目录

1 部署kubernetes(集群中的每台机器都要设置)

1.1 创建k8s.sh

1.2 执行k8s.sh(很耗时)

1.3 Master克隆

2 master配置

2.1 初始化

2.2 安装pod网络插件

2.2.1 下载1.17.0版本的flannel的yaml文件:

2.2.2 安装flannel组件

3 Worker节点配置

3.1 Master移植过来的细项修改

3.1.1 设置hostname

3.1.2 修改ip

3.1.3 重启

3.2 启动kubelet

3.3 配置文件复制

3.3.1 复制

3.3.2 配置文件和授权

3.3.3 启动flannel网络

3.4 Docker配置

3.5 加入集群

3.5.1 获取token

3.5.2 获取sha256

3.5.3 加入集群

3.6 验证集群是否添加成功

3.6.1 获取集群所有节点

3.6.2 在主节点查询kube-system名称空间下关于node节点pod的信息


上一篇已经分享了安装k8s的必要的三个工具,这篇讲解如何基于上一篇安装的工具来部署k8s。

1 部署kubernetes(集群中的每台机器都要设置)

1.1 创建k8s.sh

部署k8s的过程比较麻烦,我采用.sh的文件方式来一次性完成部署。

执行命令创建sh文件

mkdir /k8s && vi k8s.sh

sh文件里头输入:

#脚本去下载安装各个节点(kube-apiserver.service、kube-controller-manager.service、kube-scheduler.servic、kube-proxy.service、DASHBOARD、DNS、FLANNEL、PAUSE)
#cat k8s.sh
K8S_VERSION=v1.17.0
ETCD_VERSION=3.4.3-0
DASHBOARD_VERSION=v1.8.3
FLANNEL_VERSION=v0.10.0-amd64
DNS_VERSION=1.6.5
PAUSE_VERSION=3.1

# 基本组件
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$K8S_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:$ETCD_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION
# 网络组件
docker pull quay.io/coreos/flannel:$FLANNEL_VERSION
# 修改tag
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:$K8S_VERSION k8s.gcr.io/kube-apiserver:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:$K8S_VERSION k8s.gcr.io/kube-controller-manager:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:$K8S_VERSION k8s.gcr.io/kube-scheduler:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$K8S_VERSION k8s.gcr.io/kube-proxy:$K8S_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:$ETCD_VERSION k8s.gcr.io/etcd:$ETCD_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$DNS_VERSION k8s.gcr.io/coredns:$DNS_VERSION

1.2 执行k8s.sh(很耗时)

chmod -R 777 k8s.sh && ./k8s.sh

1.3 Master克隆

到这一步,master节点准备就告一段落了。下一步开始就是要进行master配置了。

但是worker节点跟master到这一步都是一样的。因此,如果使用vmware来模拟主机的话,这个时候建议就要把master以完整的模式克隆一份出去备份(利用vmware workstation的克隆功能来备份)。这样后头worker节点,只要修改一些细项,就可以直接进入配置步骤了,可以减少很多时间,同时如果master节点后面配置出问题了,也可以有一个干净的备份,方便,重来。这是笔者一把鼻涕一把眼泪总结的教训。

master配置

一直到这一步之前,master节点和worker节点的操作都是一样。

下面的配置,master节点和worker节点的配置就开始不一样了。

2.1 初始化

先执行:

kubeadm init --kubernetes-version=1.17.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.211.3

再执行:

mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.2 安装pod网络插件

2.2.1 下载1.17.0版本的flannel的yaml文件:

运行命令:

​yum install git -y && cd /k8s && git clone GitHub - blackmed/kubernetes-kubeadm

如果上面的git地址文件没了,可以下载我上传到的资源:

https://download.csdn.net/download/wltsysterm/24285162icon-default.png?t=L892https://download.csdn.net/download/wltsysterm/24285162

2.2.2 安装flannel组件

kubectl create -f flannel.yaml

3 Worker节点配置

Worker节点要放在master节点配置之后再配置,不然worker节点启动不起来。

下面演示的是一个worker节点,如果有多个worker节点就重复相同的步骤即可。

如果使用虚拟机的话,通常worker节点我会从master节点克隆一份。这个要求要有预见性。

因为master和worker节点只有配置不一样。

3.1 Master移植过来的细项修改

如果是直接使用master克隆出来的节点作为worker初始镜像的话,那么这一步要看完,否则,免看。

3.1.1 设置hostname

hostnamectl set-hostname worker1

3.1.2 修改ip

只要改ip,无需配置其他的,因为master已经都做好了。

vi /etc/sysconfig/network-scripts/ifcfg-ens33

将IPADDR修改成192.168.211.4

3.1.3 重启

输入命令reboot回车,即可重启

3.2 启动kubelet

systemctl enable kubelet && systemctl start kubelet

3.3 配置文件复制

3.3.1 复制

需要从master节点复制这两个文件:

/k8s/kubernetes-kubeadm/flannel.yaml  (就是master里头通过git下载下来的)

/root/.kube/config  (有些人可能会疑惑.kube通过dir没看到,是因为.kube被隐藏了,通过dir -a就可以看到)

复制方式建议使用远程命令的方式:

先在worker节点上(比如worker1)创建一个文件夹: mkdir /k8s

然后在master节点上执行如下命令(将文件拷贝到worker节点的/k8s目录下):

复制第一个文件命令:

scp /k8s/kubernetes-kubeadm/flannel.yaml root@worker1:/k8s

回车会有提示,按提示操作即可

命令2:

scp /root/.kube/config root@worker1:/k8s

回车会有提示,按提示操作即可

3.3.2 配置文件和授权

在worker节点上执行如下命令:

mkdir -p $HOME/.kube && sudo cp -i /k8s/config $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config

3.3.3 启动flannel网络

在worker节点上执行如下命令:

cd /k8s && kubectl apply -f flannel.yaml

3.4 Docker配置

运行命令docker info查看 查看Cgroup Driver是否为systemd,如果不是按照如下修改:

打开:

vi /etc/docker/daemon.json

加入下面的内容:

{

  "exec-opts": ["native.cgroupdriver=systemd"]

}

重启docker:

systemctl restart docker

查看启动状态:

systemctl status docker

3.5 加入集群

worker节点加入集群的命令是:

kubeadm join 192.168.211.3:6443 --token 184t3d.3bva2h75sd3pbsnx \
    --discovery-token-ca-cert-hash sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

可以看出需要三个参数:

Master节点的ip

Token(从master上获取)

Sha256(从master上获取)

第一个参数没有问题。后面两个参数参照下面教程来获取:

3.5.1 获取token

在master节点执行如下命令:

查看现在的token有几条:

kubeadm token list

创建一个新的token:

kubeadmin token create 

拿到新创建的记录的token字段的值。

(默认kubeadm装完就有一个token了,为了避免我们人为延迟操作,导致token过期,因此我选择每次重新生成token)

3.5.2 获取sha256

在master节点执行如下命令:

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

输出的那段内容就是我们要的sha256

3.5.3 加入集群

按照上面的参数和命令模板,组装命令,并执行命令,完成加入集群。

加入成功标志

...

This node has joined the cluster:

* Certificate signing request was sent to apiserver and a response was received.

* The Kubelet was informed of the new secure connection details.

...

错误处理

执行加入集群的命令,如果发现日志卡在 pre flight,那么通过ctrl + c停止运行,然后上面命令在命令后面再加上-v=10,重新执行可以查看到详细的日志,再根据详细的日志进行排查问题。

3.6 验证集群是否添加成功

在任意已经加入集群的worker节点或者是master节点执行如下的验证命令,可以查看到集群的状态信息:

3.6.1 获取集群所有节点

[root@master ~]# kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION

3.6.2 在主节点查询kube-system名称空间下关于node节点pod的信息

[root@master ~]# kubectl get pods -n kube-system -o wide |grep node

至此,部署k8s完毕。

下一篇,分享k8s部署应用和管理。

Logo

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

更多推荐