# Kubernetes 1.15 部署文档 **Repository Path**: attacker/kubernetes115bushu ## Basic Information - **Project Name**: Kubernetes 1.15 部署文档 - **Description**: Kubernetes 1.15 部署文档 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-02-10 - **Last Updated**: 2022-05-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README kubeadm安装Kubernetes 1.15 实践 -- 一、环境准备(在全部设备上进行) - 3 台 centos7.5 服务器,网络使用 Calico。 |IP地址|节点角色|CPU|内存|Hostname| |---|---|---|---|---| |10.0.1.45|master|2c|4G|k8s-master| |10.0.1.20|node|2c|4G|node1| |10.0.1.18|node|2c|4G|node2| 1. 设置主机名 hostname。 ```bash hostnamectl set-hostname k8s-master ``` 对应上面表格的Hostname,node1与node2同理。 2. 编辑3台设备的 host 文件,添加域名解析。 ```bash cat <>/etc/hosts 10.0.1.45 k8s-master 10.0.1.20 node1 10.0.1.18 node2 EOF ``` 3. 关闭防火墙、selinux 和 swap ```bash systemctl stop firewalld systemctl disable firewalld ``` 禁用SELINUX: ```bash setenforce 0 vim /etc/selinux/config SELINUX=disabled ``` 关闭swap ```bash swapoff -a sed -i 's/.*swap.*/#&/' /etc/fstab ``` 4. kube-proxy 开启 ipvs。 由于ipvs已经加入到了内核的主干,所以为kube-proxy开启ipvs的前提需要加载以下的内核模块: ``` ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack_ipv4 ``` 创建 /etc/sysconfig/modules/ipvs.modules 文件,保证在节点重启后能自动加载所需模块。 使用 lsmod | grep -e ip_vs -e nf_conntrack_ipv4 命令查看是否已经正确加载所需的内核模块。 ```bash cat > /etc/sysconfig/modules/ipvs.modules < /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF ``` 安装kubeadm、kubelet、kubectl ```bash yum install -y kubeadm kubelet kubectl systemctl enable kubelet ``` 二、k8s-master 节点配置 - 1.使用 kubeadm 初始化 Kubernetes 集群 ```bash kubeadm init --kubernetes-version=1.15.0 \ --apiserver-advertise-address=10.0.1.45 \ --image-repository registry.aliyuncs.com/google_containers \ --pod-network-cidr=10.244.0.0/16 ``` 参数含义: ```bash --apiserver-advertise-address=10.0.1.45 #定义api server地址就是master本机IP地址。 --image-repository registry.aliyuncs.com/google_containers #由于kubeadm默认从官网k8s.grc.io下载镜像,以防网络原因,改为阿里云镜像仓库地址。 --pod-network-cidr=10.244.0.0/16 #定义POD网段为: 10.244.0.0/16。 ``` 集群初始化成功后返回如下信息: ```bash join 10.0.1.45:6443 --token bybzi7.7201j7f7mtiwtmg4 \ --discovery-token-ca-cert-hash sha256:9186c9b0709af151079bcb034f1771f10f382341bfb45024e5d0c541a055f2eb ``` 2. 配置 kubectl 工具 ```bash mkdir -p ~/.kube cp /etc/kubernetes/admin.conf ~/.kube/config #查看集群状态,确认所有组件都处于healthy状态 kubectl get cs NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {"health":"true"} ``` 集群初始化如果遇到问题,可以使用下面的命令进行清理(慎用): ```bash kubeadm reset ``` 3. 安装 Calico v3.8 网络服务 ```bash wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml #由于默认的 calico.yaml 的 Pod 网段为192.168.0.0/16,打开 calico.yaml 文件找到这行改为10.244.0.0/16。 vim calico.yaml - name: CALICO_IPV4POOL_CIDR value: "10.244.0.0/16" kubectl apply -f ./calico.yaml #查看创建情况,等待每个 pod 的 STATUS 变为 Running。 watch kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-kube-controllers-6ff88bf6d4-tgtzb 1/1 Running 0 2m45s kube-system calico-node-24h85 1/1 Running 0 2m43s kube-system coredns-846jhw23g9-9af73 1/1 Running 0 4m5s kube-system coredns-846jhw23g9-hmswk 1/1 Running 0 4m5s kube-system etcd-jbaker-1 1/1 Running 0 6m22s kube-system kube-apiserver-jbaker-1 1/1 Running 0 6m12s kube-system kube-controller-manager-jbaker-1 1/1 Running 0 6m16s kube-system kube-proxy-8fzp2 1/1 Running 0 5m16s kube-system kube-scheduler-jbaker-1 1/1 Running 0 5m41s ``` 三、node 节点配置(在所有node节点上操作) - 添加 node 节点,执行如下命令,使所有 node 节点加入 Kubernetes 集群。 ```bash kubeadm join 10.0.1.45:6443 --token bybzi7.7201j7f7mtiwtmg4 \ --discovery-token-ca-cert-hash sha256:9186c9b0709af151079bcb034f1771f10f382341bfb45024e5d0c541a055f2eb ``` 成功后,在 k8s-master 中输入命令检查集群状态。 ```bash kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready master 36m v1.15.0 node1 Ready 3m10h v1.15.0 node2 Ready 3m v1.15.0 ``` 四、部署 Dashboard(在k8s-master上进行操作) - 1. 下载 Dashboard 的 yaml 文件。 ```bash wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml #修改 yaml 文件中使用的源镜像。 sed -i 's/k8s.gcr.io/loveone/g' kubernetes-dashboard.yaml #使用 NodePort 模式映射 30001 至 k8s 所有宿主机的 30001 端口上。 sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' kubernetes-dashboard.yaml ``` 2. 部署 Dashboard。 ```bash kubectl apply -f kubernetes-dashboard.yaml ``` 3. 创建完成后,检查相关服务运行状态。 ```bash kubectl get deployment kubernetes-dashboard -n kube-system NAME READY UP-TO-DATE AVAILABLE AGE kubernetes-dashboard 1/1 1 1 3m kubectl get services -n kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP,9153/TCP 40m kubernetes-dashboard NodePort 10.99.190.175 443:30001/TCP 4m ``` 4. 在 Firefox 浏览器输入 Dashboard 访问地址: https://10.0.1.45:30001 注: 由于 Dashborad 的认证原因,谷歌浏览器和 IE 可能无法打开,请使用 Firefox 浏览器。 5. 查看访问 Dashboard 的认证令牌。 ```bash kubectl create serviceaccount dashboard-admin -n kube-system kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}') ``` 6. 使用输出的 token 登录 Dashboard。