本文讲述使用kubeadm工具安装部署kubernetes集群,本文假设你的机器一些准备工作已做完,例如hosts映射配置、机器间免密登录等。
1. 安装前准备 (以下操作需要在所有节点执行)
环境需求
系统:CentOS7.4 +
硬件需求:CPU >= 2C,内存 >= 2G (此处的硬件需求是最低标准,一定要保证至少2C2G)
关闭swap
1 | swapoff -a # 临时关闭,特别注意如果你是用的虚拟机,并且使用临时关闭这种方法,那么下次开机时也需要再设置一次 |
关闭防火墙和SELinux
1 | systemctl stop firewalld && systemctl disable firewalld |
内核调整,将桥接的IPv4流量传递到iptables的链
1 | cat > /etc/sysctl.d/k8s.conf << EOF |
设置系统时区并同步服务器
1 | yum install -y ntpdate |
docker安装
1 | 添加docker-ce YUM软件源 |
注意:安装完毕启动docker时,可能会报如下错误:
1 | Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. |
解决方式:
1 | vim /etc/docker/daemon.json |
添加kubernetes YUM软件源
1 | cat > /etc/yum.repos.d/kubernetes.repo << EOF |
安装kubeadm、kubelet和kubectl
1 | yum install -y kubelet-1.16.3 kubeadm-1.16.3 kubectl-1.16.3 |
2. 部署Kubernetes Master
只需要在Master 节点执行,这里的apiserver地址需要修改成自己的master地址:
1 | kubeadm init \ |
注意:由于默认拉取的镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
输出
1 | [init] Using Kubernetes version: v1.16.3 |
当看到 Your Kubernetes control-plane has initialized successfully! 这一句时表明Kubernetes Master已经初始化成功,接下来根据输出提示进行如下操作 (注意如果执行了kubeadm reset进行过kubeadm的重置 (重置时Node节点上也要执行kubeadm reset)并重新初始化master,则每次初始化完master之后都要根据提示执行如下操作):
1 | mkdir -p $HOME/.kube |
3. 加入Kubernetes Node
在所有Node节点上执行:
1 | kubeadm join 192.168.4.116:6443 --token c3f704.tu2gpew6v7lkg3uc \ |
输出如下内容时表示join成功:
1 | [preflight] Running pre-flight checks |
4. 安装网络插件
未安装网络插件之前,如果执行 kubectl get nodes 查看所有节点的信息,则会显示NotReady,因此安装网络插件是必须的。
注意:本人在初次执行 kubectl get nodes 时报错如下:
1 | Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes") |
原因是因为我执行过kubeadm reset,然后再 kubeadm init,即重新初始化过 kubeadm,但是没有根据提示重新执行如下的三条命令,所以会出现这个问题。重新执行一下即可。
1 | mkdir -p $HOME/.kube |
本文选择weave作为CNI网络插件:
1 | 如下命令适用于kubernetes1.4以后的版本 |
执行之后可以验证Kubernetes集群相关的Pod是否都正常创建并运行:
1 | kubectl get pods --all-namespaces |
注意:Pod创建中的STATUS为ContainerCreating,等容器创建完毕之后变为Running。
然后查看集群节点状态:
1 | kubectl get nodes |
均为Ready则正常。
5. 部署 Dashboard
注意:dashboard暂时不支持v16版本,本文使用dashboardv2.0。部署Dashboard需要两个镜像,如下:
1 | kubernetesui/dashboard v2.0.0-beta5 b46f92585200 8 weeks ago 91.5MB |
可以在执行 kubectl create -f recommended.yaml 之前提前pull下来,注意点就是可能第一个镜像会pull不下来,需要简单的配置一下,将 /etc/docker/daemon.json 文件内容补充如下,主要是添加了registry-mirrors。
1 | {"storage-driver":"devicemapper","registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"]} |
然后重启docker:systemctl restart docker。
1.安装前先查看所有的pod详细信息:
1 | kubectl get pods -A -o wide |
2.下载并修改Dashboard脚本
1 | wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta5/aio/deploy/recommended.yaml |
修改recommended.yaml文件内容:
1 |
|
3.安装Dashboard
1 | 安装 |
4.创建Dashboard管理员
1 | vim dashboard-admin.yaml |
为用户分配权限:
1 | vim dashboard-admin-bind-cluster-role.yaml |
5.查看并复制用户Token
1 | kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}') |
访问 https://masterIP:30009 , 谷歌浏览器不行,推荐使用火狐,选择Token登录,输入刚才复制的密钥即可。
以上就是kubernetes的kubeadm方式部署以及可视化工具dashboard部署的全部过程及其注意事项,但是还有一个小小的瑕疵,就是在页面上没有安装metrics-server所以Pods的CPU、内存情况是看不到的。
6.安装metrics-server
heapster已经被metrics-server取代。
在Master上执行安装:
1 | cd /usr/local/env # 目录自己选择 |
修改metrics-server-deployment.yaml文件:
1 | 其中的 image: k8s.gcr.io/metrics-server-amd64:v0.3.6 |
因为默认的镜像是国外的,下不动。
然后执行如下步骤安装:
1 | 安装 |
大功告成!