搭建k8s集群–实践及部分遇到的问题
最近一段时间,刚开始学习k8s(kubernetes)。在了解过k8s的基础理论知识后,就要着手搭建一个k8s的集群。在这里也记录和分享一下我的搭建过程。
该教程是基于CentOS7系统。 搭建时间为2019年6月,可能之后搭建过程会有所差异。
首先准备至少两个节点,一个是Master,一个是Node。
一、准备
1.设置主机名hostname,管理节点设置主机名为 master 。
hostnamectl set-hostname master
其他主同理,可设置为node1,node2等。
2.节点准备好之后,配置主机映射。编辑/etc/hosts 文件(注意修改ip地址,可用ip address或ifconfig查看)
cat <<EOF >>/etc/hosts
10.10.10.10 master
10.10.10.11 node1
10.10.10.12 node2
EOF
3.关闭防火墙、selinux和swap。
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
4.配置国内yum源(不然会很慢或者无法连接)
yum install -y wget
mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all && yum makecache
配置国内Kubernetes源(采用的是阿里云的)
cat <<EOF > /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
配置 docker 源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
二、安装
注:在所有节点上进行如下操作
1.安装docker
yum install -y docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker –version
Docker version 18.06.1-ce, build e68fc7a
2.安装kubeadm、kubelet、kubectl
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
三、部署master节点
注:此操作尽在master节点上进行。
1.在master进行Kubernetes集群初始化。
使用1.14.3版本k8s,配置阿里云镜像仓库。
kubeadm init --kubernetes-version=v1.14.3 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
集群初始化成功后返回如下信息:
记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群时执行。
kubeadm join 11.11.11.37:6443 --token o10l3t.f5wzod2if4m5b45a \
--discovery-token-ca-cert-hash sha256:1642a7a8386e9a986b5482e2f2e15d8c63f087569598e05a25fff04a5292d869
注意,token是有有效期的。
此时master节点的工作还并未结束。
2.执行后续操作
以下三条命令是在 kubeadm init之后执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.部署flannel网络
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
此操作有可能连接超时,若超时,则需要使用特殊方法下载。
下载后将文件上传,然后执行
kubectl apply -f kube-flannel.yml
此时,使用kubectl get nodes
可查看节点状态,正常情况下master会是Ready。若是NotReady,可使用kubectl get pods --all-namespaces
查看是否都是Running状态。(此处可能有失败,详见五)。
四、部署Node节点
执行刚才记录下的内容。
kubeadm join 11.11.11.37:6443 --token o10l3t.f5wzod2if4m5b45a \
--discovery-token-ca-cert-hash sha256:1642a7a8386e9a986b5482e2f2e15d8c63f087569598e05a25fff04a5292d869
此处可能有异常(详见五)
加入成功后,在master节点中,执行kubectl get nodes
可查看节点状态。
五、所遇到的异常情况
可使用systemctl status kubelet
查看kubelet运行状态。
可使用journalctl -f -u kubelet.service
查看kubelet运行日志。
可使用kubectl logs -f coredns-8686dcc4fd-8f4s6 -n kube-system
查看没有处于Running的Pod的状态。
可使用
1.执行kubectl命令报错
The connection to the server localhost:8080 was refused - did you specify the right host or port?
可参考 https://www.jianshu.com/p/6fa06b9bbf6a
2.coredns CrashLoopBackOff 报错
可能是由于3的错误引起的。可执行kubectl logs -f coredns-8686dcc4fd-8f4s6 -n kube-system
查看。我在搭建的过程中遇到了由3引起的该问题。解决办法详见3。
若是其他问题,暂时还不清楚。
3.dial tcp 10.96.0.1:443: getsockopt: no route to host
可参考 https://blog.csdn.net/shida_csdn/article/details/80028905