k8s + Docker 搭建实录和问题总结
- 2019 年 10 月 8 日
- 筆記
最近看了<<kubernetes 权威指南>> 这本书,也想着照着书中范例搭建一个k8s集群。书中的例子是在单机跑起来的,也有点年代了,完全照着书中范例配置遇到了不少问题,搭建前前后后花了好几天的休息时间才弄好。 因此把过程中的问题整理出来,方便后续重新搭建的时候能够有坑可循。自己也想过搞个一键搭建脚本,但是作为k8s入门,还是需要自己亲手一步步操作过来,才能有所收获。
k8s权威指南书里介绍的是如何在单机上搭建k8s的,比较简单,我这边搭建的是集群模式。 将k8s的master以及node分别部署在不同的机子上。
其中master的进程如下所述:

node上的进程如下所述:

搭建环境注意项:
- master 如果不用来部署node的话,至少是1个CPU 1GB的硬件配置。
- node CPU 1核,但是内存至少要2G以上,否则会导致node节点起的容器频繁诱发OOMKill,和频繁的swap导致结点卡顿无法操作
下面是在Centos 7.5 版本下搭建的具体步骤:
关闭防火墙,关闭senlinux。 防火墙会导致后面对外暴露服务的时候拦截掉端口流量, master和node都得设置下
# systemctl stop firewalld # systemctl disable firewalld # setenforce 0 # sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux
搭建master
# yum -y install etcd kubernetes
配置etcd 和apiserver
#vim /etc/etcd/etcd.conf ETCD_NAME=default ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
vim /etc/kubernetes/apiserver KUBE_API_ADDRESS="--address=0.0.0.0"KUBE_API_PORT="--port=8080" KUBELET_PORT="--kubelet_port=10250" KUBE_ETCD_SERVERS="--etcd_servers=http://127.0.0.1:2379" KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota" KUBE_API_ARGS=""
启动master上的服务进程:
#!/bin/sh for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done
设置etcd网络:
etcdctl set /atomic.io/network/config '{"Network":"10.1.0.0/16"}'
到这里,master的配置就完成
接下来进行node的配置
按照必要的包
# yum -y install flannel kubernetes
设置node连接master的配置
vim /etc/kubernetes/config KUBE_MASTER="--master=http://${master ip}:8080" KUBE_ETCD_SERVERS="--etcd_servers=http://${master ip}:2379" 这里需要将${master ip} 替换成master的ip
vim /etc/kubernetes/kubelet KUBELET_PORT="--port=10250" # change the hostname to this host’s IP address KUBELET_HOSTNAME="--hostname_override=${local ip}" KUBELET_API_SERVER="--api_servers=http://${master ip}:8080" KUBELET_ARGS="" 这里需要将${local ip} 替换为node本机ip ${master ip} 替换为master的ip
#vim /etc/sysconfig/flanneld FLANNEL_ETCD_ENDPOINTS="http://${master ip}:2379" FLANNEL_ETCD_PREFIX="/atomic.io/network" 这里需要将${master ip} 替换成master的ip
在console执行以下指令清理docker0网络配置:
ip link delete docker0
启动node结点的服务
#!/bin/sh for SERVICES in flanneld kube-proxy kubelet docker; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done
这个时候,在master上执行kubectl get nodes。如果配置成功即可查看到如下信息
[root@VM_0_3_centos k8s]# kubectl get nodes NAME STATUS AGE 49.235.XX.XX Ready 9d [root@VM_0_3_centos k8s]#