搭建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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐