容器编排——kubeadm在线或离线搭建kubernetes集群

容器编排——kubeadm在线或离线搭建kubernetes集群,第1张

容器编排——kubeadm在线或离线搭建kubernetes集群

目录

1、架构简介:

2、集群架构图:

3、集群服务器:

4、修改主机名称:

5、修改hosts配置文件:

6、关闭selinux:

7、关闭防火墙:

8、关闭swap:

9、设置iptables网桥:

10、软件k8s/docker/dashboard版本:

11、安装docker环境:

(1)在线安装docker:

① 卸载旧版本docker:

② 安装依赖:

③ 配置存储仓库:

④ 安装docker:

(2)离线rpm安装docker:

① 获取离线包:

② 上传离线包:

执行安装包:

④ 编写docker服务脚本:

⑤ 上传服务脚本及授权:

⑥ 重新加载系统服务:

(3) *** 作docker服务:

① 开机自启docker服务:

② 启动docker服务:

(4)修改docker的Cgroup Driver:

(5)重新启动docker:

12、安装kubeadm/kubelet/kubectl:

(1)简介:

(2)官网安装教程:

(3)在线安装:

① 添加阿里云YUM的软件源:

② 安装安装kubeadm/kubelet/kubectl:

(4)离线安装:

① 安装crictl:

② 获取kubeadm/kubelet/kubectl离线包:

③ 上传kubeadm/kubelet/kubectl离线包:

④ 执行安装包:

⑤ 编写kubelet服务脚本:

⑥ 上传服务脚本及授权:

⑦ 重新加载系统服务:

(5) *** 作kubelet服务:

① 开启自启kubelet服务:

13、集群k8s所需镜像和软件版本:

14、部署k8s的单个master:

(1)在线安装:

(2)离线安装:

① 下载k8s镜像:

② 导出镜像:

③ 导入镜像:

④ 检查镜像列表:

⑤ 部署master节点:

⑥ 查看部署结果:

(3)生成kubelet环境配置文件:

15、安装pod网络插件(CNI):

(1)下载flannel的yml配置文件:

(2)上传yml配置文件:

(3)拉取flannel镜像:

(4)重命名flannel镜像:

(5)删除旧flannel镜像:

(6)生效yml配置文件:

16、加入k8s的nodes:

(1)如果是离线加入需要 *** 作:

① 拉取kube-proxy镜像:

(2)拉取flannel镜像:

(3)重命名flannel镜像:

(4)删除旧flannel镜像:

(5)向集群添加新节点:

① 查询token值:

② 新建token:

③ 查询discovery-token-ca-cert-hash值:

④ 添加新节点到集群:

(6)安装pod网络插件(CNI):

(7)查看node列表:

17、测试验证k8s集群:

(1)拉取nginx镜像:

(2)创建nginx容器:

(3)暴露对外端口:

(4)查询nginx是否运行成功:

(5)浏览器测试访问:

(6)扩展nginx副本:

(7)查看pod:


1、架构简介:

搭建k8s-1.17.0的离线资源地址:kubeadm安装k8s-1.17.0离线资源.rar-虚拟化文档类资源-CSDN下载

一个K8S集群由两部分构成 master节点和node节点。master节点主要负责集群的控制,对pod进行调度,已经令牌管理等等功能。node节点主要是负责干活,启动容器、管理容器。master节点和node节点一般不要部署在一台机器上。实际生产上,从高可用考虑,是需要部署多个master节点的。将这张图抽象一下,大约是这个样子:

2、集群架构图:

Kubernetes集群架构图如下,本次搭建暂不部署NFS和docker私有仓库。

3、集群服务器:

本地搭建kubernetes集群采用3台虚拟机,一台为master,两台为node。

集群角色

主机名称

IP地址

CPU/内存

软件

master

k8s-master

192.168.137.129

2核/2GB

Docker

Kubelet

Etcd

kube-apiserver

kube-controller-manager

kube-scheduler

node

k8s-node-01

192.168.137.130

2核/2GB

Docker

Kubelet

kube-proxy

Flannel

node

k8s-node-02

192.168.137.131

2核/2GB

Docker

Kubelet

kube-proxy

Flannel

注意:master节点所在的服务器最低是2核的,不然安装会报错。

4、修改主机名称:

说明:在集群中所有服务器,均需要如下 *** 作:

修改/etc/hostname文件,修改对应的名称为主机名称。

然后重新启动服务器。

5、修改hosts配置文件:

说明:在集群中所有服务器,均需要如下 *** 作:

修改/etc/hosts文件添加主机名与IP映射关系:

6、关闭selinux:

说明:在集群中所有服务器,均需要如下 *** 作:

修改/etc/selinux/config文件中SELINUX=的值为:disabled,然后重新启动服务器:

7、关闭防火墙:

说明:在集群中所有服务器,均需要如下 *** 作:

执行以下命令:

关闭防火墙:

systemctl stop firewalld.service

关闭防火墙自启:

systemctl disable firewalld.service
8、关闭swap:

说明:在集群中所有服务器,均需要如下 *** 作:

编辑/etc/fstab配置文件,将包含swap的行使用#进行注释,然后保存配置文件。最后重新启动服务器。

9、设置iptables网桥:

说明:在集群中所有服务器,均需要如下 *** 作:

执行命令:

cat > /etc/sysctl.d/k8s.conf << EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

执行命令:

sysctl --system
10、软件k8s/docker/dashboard版本:

软件k8s、docker、dashboard在版本上有一定的兼容关系:

K8s版本

Docker版本

Dashboard版本

V1.22

兼容最新到V20.10

暂时没有找到版本

V1.21

兼容最新到V20.10

V2.3.1/V2.3.0

V1.20

有变化暂未懂,应该与V1.17相同

V2.3.1/V2.3.0/V2.2.0/V2.1.0

V1.19

有变化暂未懂,应该与V1.17相同

V2.0.5/V2.0.4

V1.18

咱无明确说明,应该与V1.17相同

V2.0.3/V2.0.2/V2.0.1/V2.0.0

V1.17

V1.13.1/V17.03/V17.06/V17.09/

V18.06/V18.09/V19.03

V2.0.0-rc7/V2.0.0-rc6/V2.0.0-rc5/V2.0.0-rc4

V1.16

V1.13.1/V17.03/V17.06/V17.09/

V18.06/V18.09

V2.0.0-rc3/V2.0.0-rc2/V2.0.0-rc1/

V2.0.0-beta8/V2.0.0-beta7/V2.0.0-beta6/

V2.0.0-beta5

V1.15

V1.13.1/V17.03/V17.06/V17.09/

V18.06/V18.09

V2.0.0-beta4/V2.0.0-beta3/V2.0.0-beta2

V1.14

V1.13.1/V17.03/V17.06/V17.09/

V18.06/V18.09

V2.0.0-beta1

V1.13

V1.11.1/V1.12.1/V1.13.1/

V17.03/V17.06/V17.09/V18.06

暂时没有找到版本

V1.12

V1.11.1/V1.12.1/V1.13.1/

V17.03/V17.06/V17.09/V18.06

暂时没有找到版本

V1.11

V1.11.x/V1.12.x/V1.13.x/V17.03.x

暂时没有找到版本

V1.10

V1.11.x/V1.12.x/V1.13.x/V17.03.x

V1.10.1/V1.10.0

V1.9

V1.11.x/V1.12.x/V1.13.x/V17.03.x

V1.10.1/V1.10.0/V1.8.3

V1.8

V1.11.2/V1.12.6/V1.13.1/V17.03.2

V1.10.1/V1.10.0/V1.8.3

查看k8s与docker版本兼容关系 *** 作步骤:

本次搭建的k8s为1.17.0,对应的docker版本需要1.13.1、17.03、17.06、 17.09、 18.06、18.09。本地安装的docker版本为:18.06.1。

软件k8s的github地址:https://github.com/kubernetes/kubernetes,通过CHANGELOG,点击低版本的log,比如:14、15等,搜索:docker version,可以查看到当前k8s版本兼容的docker版本。

查看k8s与dashboard版本兼容关系 *** 作步骤:

注意查看k8s兼容的dashboard版本。本次搭建的k8s版本为1.17.0,通过查看dashboard官网上不同版本的dashboard软件包能够兼容的对应k8s版本,查找到对应的dashboard版本,本次dashboard版本使用的是v2.0.0-rc7。

官网dashboard地址:https://github.com/kubernetes/dashboard/releases

11、安装docker环境:

说明:在集群中所有服务器,均需要如下 *** 作:

(1)在线安装docker:

本地安装的docker版本为:18.06.1。

① 卸载旧版本docker:

执行命令:

yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
② 安装依赖:

执行命令:

yum install -y yum-utils device-mapper-persistent-data lvm2
③ 配置存储仓库:

执行命令:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
④ 安装docker:

在线安装的命令为:

yum -y install docker-ce-18.06.1.ce-3.el7
(2)离线rpm安装docker:

在一个有网,并且没安装过docker的服务器上执行yum命令,将需要的相关rpm格式安装包下载到服务器指定文件夹中,以便在无网服务器中安装:

① 获取离线包:

创建rpm软件存储目录:

mkdir -p /wocloud/soft/docker_rpm

安装依赖rpm包:

yum install -y yum-utils device-mapper-persistent-data lvm2

配置存储仓库:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

获取docker的rpm包:

yum -y install docker-ce-18.06.1.ce-3.el7 --downloadonly --downloaddir /wocloud/soft/docker_rpm

其它无网服务器需要安装时,将/wocloud/soft/docker_rpm中的所有rpm文件压缩到一个包中,然后上传到目标服务器,执行下面安装命令即可。

② 上传离线包:

将获取的docker的rpm离线包上传到目标服务器。

③ 执行安装包:

进入到docker的rpm离线包的文件夹中,执行如下安装命令:

执行命令:

rpm -ivh *.rpm --force --nodeps
④ 编写docker服务脚本:

编写docker.service服务文件;

[Unit]

Description=Docker Application Container Engine

documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target



[Service]

Type=notify

# the default is not to use systemd for cgroups because the delegate issues still

# exists and systemd currently does not support the cgroup feature set required

# for containers run by docker

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

# Having non-zero Limit*s causes performance problems due to accounting overhead

# in the kernel. We recommend using cgroups to do container-local accounting.

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

# Uncomment TasksMax if your systemd version supports it.

# only systemd 226 and above support this version.

#TasksMax=infinity

TimeoutStartSec=0

# set delegate yes so that systemd does not reset the cgroups of docker containers

Delegate=yes

# kill only the docker process, not all processes in the cgroup

KillMode=process

# restart the docker process if it exits prematurely

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s



[Install]

WantedBy=multi-user.target
⑤ 上传服务脚本及授权:

将docker.service文件上传到服务器/etc/systemd/system/中,并授权:

chmod 777 /etc/systemd/system/docker.service
⑥ 重新加载系统服务:

执行命令:

systemctl daemon-reload
(3) *** 作docker服务: ① 开机自启docker服务:

执行命令:

systemctl enable docker
② 启动docker服务:

执行命令:

systemctl start docker
(4)修改docker的Cgroup Driver:

执行命令:

cat > /etc/docker/daemon.json < 
(5)重新启动docker: 

执行命令:

systemctl daemon-reload

执行命令:

systemctl restart docker.service
12、安装kubeadm/kubelet/kubectl:

说明:在集群中所有服务器,均需要如下 *** 作:

(1)简介:

Kubeadm:用来初始化集群的指令。

Kubelet:在集群中的每个节点上用来启动Pod和容器等。

Kubectl:用来与集群通信的命令行工具。

kubeadm不能帮你安装或者管理kubelet或kubectl,所以你需要 确保它们与通过kubeadm安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 然而,控制平面与kubelet间的相差一个次要版本不一致是支持的,但 kubelet 的版本不可以超过API服务器的版本。 例如,1.7.0版本的kubelet可以完全兼容1.8.0版本的API服务器,反之则不可以。

(2)官网安装教程:

官网安装教程地址:安装 kubeadm | Kubernetes

(3)在线安装: ① 添加阿里云YUM的软件源:

执行命令:

cat > /etc/yum.repos.d/kubernetes.repo << EOF

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF
② 安装安装kubeadm/kubelet/kubectl:

执行命令:

yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0
(4)离线安装: ① 安装crictl:

软件crictl是kubeadm/kubelet容器运行时接口(CRI)所需的。

软件下载:下载V1.17.0版本的crictl,与k8s版本一致,下载地址为:https://github.com/kubernetes-sigs/cri-tools/releases

软件上传:将下载的crictl软件包上传到服务器的自定义文件夹中。

软件解压:将crictl软件包进行解压。

文件移动:将crictl软件解压的crictl文件移动到/usr/bin中。

② 获取kubeadm/kubelet/kubectl离线包:

在一个有网,并且没安装过k8s的服务器上执行yum命令,将需要的相关rpm格式安装包下载到服务器指定文件夹中,以便在无网服务器中安装:

添加阿里云YUM的软件源:

执行命令:

cat > /etc/yum.repos.d/kubernetes.repo << EOF

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

下载离线安装包:

创建rpm软件存储目录:

mkdir -p /wocloud/soft/kubeadm

执行命令:

yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0 --downloadonly --downloaddir /wocloud/soft/kubeadm

其它无网服务器需要安装时,将/wocloud/soft/kubeadm中的所有rpm文件压缩到一个包中,然后上传到目标服务器,执行下面安装命令即可。

③ 上传kubeadm/kubelet/kubectl离线包:

将获取的kubeadm/kubelet/kubectl离线包上传到目标服务器。

④ 执行安装包:

进入到kubeadm/kubelet/kubectl离线包的文件夹中,执行如下安装命令:

执行命令:

rpm -ivh *.rpm --force --nodeps
⑤ 编写kubelet服务脚本:

编写kubelet.service服务文件;

[Unit]

Description=kubelet: The Kubernetes Node Agent

documentation=https://kubernetes.io/docs/



[Service]

ExecStart=/usr/bin/kubelet

Restart=always

StartLimitInterval=0

RestartSec=10



[Install]

WantedBy=multi-user.target
⑥ 上传服务脚本及授权:

将kubelet.service文件上传到服务器/etc/systemd/system/中,并授权:

chmod 777 /etc/systemd/system/kubelet.service
⑦ 重新加载系统服务:

执行命令:

systemctl daemon-reload
(5) *** 作kubelet服务: ① 开启自启kubelet服务:

执行命令:

systemctl enable kubelet
13、集群k8s所需镜像和软件版本:

通过kubeadm搭建k8s集群所需要的相关镜像和软件,与k8s版本有对应的兼容关系,查看不同版本的k8s所需要的镜像和软件版本如下 *** 作:

软件k8s的github地址:https://github.com/kubernetes/kubernetes,通过CHANGELOG,点击低版本的log,比如:17、18等,搜索:coredns、etcd等关键词,可以查看到当前k8s版本兼容的对应镜像版本。

K8s

版本

Coredns版本

Etcd

版本

api

版本

controller

版本

proxy

版本

scheduler

版本

Pause

版本

Cri-ctl

版本

V1.22

V1.8.4

V3.5.0

V1.22.0

V1.22.0

V1.22.0

V1.22.0

V3.5

V1.21.0

V1.21

V1.8.0

V3.4.13

V1.21.0

V1.21.0

V1.21.0

V1.21.0

V3.4.1

V1.20.0

V1.20

V1.7.0

V3.4.13

V1.20.0

V1.20.0

V1.20.0

V1.20.0

V3.4

V1.19.0

V1.19

V1.7.0

V3.4.9

V1.19.0

V1.19.0

V1.19.0

V1.19.0

V3.2

V1.18.0

V1.18

V1.6.7

V3.4.3

V1.18.0

V1.18.0

V1.18.0

V1.18.0

V3.2

V1.17.0

V1.17

V1.6.5

V3.4.3

V1.17.0

V1.17.0

V1.17.0

V1.17.0

V3.1

V1.17.0

V1.16

V1.6.2

V3.3.15

V1.16.0

V1.16.0

V1.16.0

V1.16.0

——

V1.14.0

V1.15

V1.3.1

V3.3.10

V1.15.0

V1.15.0

V1.15.0

V1.15.0

——

V1.14.0

V1.14

V1.3.1

V3.3.10

V1.14.0

V1.14.0

V1.14.0

V1.14.0

——

——

V1.13

V1.2.6

V3.2.24

V1.13.0

V1.13.0

V1.13.0

V1.13.0

——

——

V1.12

V1.2.2

V3.2.24

V1.12.0

V1.12.0

V1.12.0

V1.12.0

——

——

V1.11

V1.1.3

V3.2.18

V1.11.0

V1.11.0

V1.11.0

V1.11.0

——

——

V1.10

——

V3.1.12

V1.10.0

V1.10.0

V1.10.0

V1.10.0

V3.1

——

V1.9

——

V3.1.10

V1.9.0

V1.9.0

V1.9.0

V1.9.0

——

V1.0.0

V1.8

——

——

V1.8.0

V1.8.0

V1.8.0

V1.8.0

——

V1.0.0

14、部署k8s的单个master:

说明:在集群中master所在服务器,进行如下 *** 作:

(1)在线安装:

执行命令:

kubeadm init 

--apiserver-advertise-address=192.168.137.129 

--image-repository registry.aliyuncs.com/google_containers 

--kubernetes-version v1.17.0 

--service-cidr=10.1.0.0/16 

--pod-network-cidr=10.244.0.0/16 

--v=5

参数说明:

参数

默认值

参数说明

--apiserver-advertise-address

默认网络接口

API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口。

--image-repository

"k8s.gcr.io"

选择用于拉取控制平面镜像的容器仓库。

--kubernetes-version

"stable-1"

为控制平面选择一个特定的 Kubernetes 版本。

--service-cidr

"10.96.0.0/12"

为服务的虚拟 IP 地址另外指定 IP 地址段

--pod-network-cidr

指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs。

(2)离线安装:

在有网的服务器上下载k8s所需的相关镜像,将对应的镜像导出到服务器指定文件夹中,以便在无网服务器中能够导入镜像,进行使用:

① 下载k8s镜像:

从国内镜像源下载镜像:

docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.17.0

docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.17.0

docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.17.0

docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.17.0

docker pull registry.aliyuncs.com/google_containers/pause:3.1

docker pull registry.aliyuncs.com/google_containers/coredns:1.6.5

docker pull registry.aliyuncs.com/google_containers/etcd:3.4.3-0
② 导出镜像:

将修改为官方tag的镜像导入到tar压缩包中,执行命令:

docker save -o kube-proxy-v1.17.0.tar kube-proxy镜像ID registry.aliyuncs.com/google_containers/kube-proxy:v1.17.0

docker save -o kube-apiserver-v1.17.0.tar kube-apiserver镜像ID registry.aliyuncs.com/google_containers/kube-apiserver:v1.17.0

docker save -o kube-controller-manager-v1.17.0.tar kube-controller-manager镜像ID registry.aliyuncs.com/google_containers/kube-controller-manager:v1.17.0

docker save -o kube-scheduler-v1.17.0.tar kube-scheduler镜像ID registry.aliyuncs.com/google_containers/kube-scheduler:v1.17.0

docker save -o pause-3.1.tar pause镜像ID registry.aliyuncs.com/google_containers/pause:3.1

docker save -o coredns-1.6.5.tar coredns镜像ID registry.aliyuncs.com/google_containers/coredns:1.6.5

docker save -o etcd-3.4.3-0.tar etcd镜像ID registry.aliyuncs.com/google_containers/etcd:3.4.3-0
③ 导入镜像:

将上述导出的镜像包tar传输到需要的服务器上,然后通过docker命令将镜像包tar导入到docker本地仓库中,命令示例:

docker image load -i 镜像包tar文件名称

④ 检查镜像列表:

查看docker本地仓库中的镜像列表,执行命令:docker images

⑤ 部署master节点:

执行命令:

kubeadm init 

--apiserver-advertise-address=192.168.137.129 

--image-repository registry.aliyuncs.com/google_containers 

--kubernetes-version v1.17.0 

--service-cidr=10.1.0.0/16 

--pod-network-cidr=10.244.0.0/16 

--v=5

参数说明:

参数

默认值

参数说明

--apiserver-advertise-address

默认网络接口

API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口。

--image-repository

"k8s.gcr.io"

选择用于拉取控制平面镜像的容器仓库。

--kubernetes-version

"stable-1"

为控制平面选择一个特定的 Kubernetes 版本。

--service-cidr

"10.96.0.0/12"

为服务的虚拟 IP 地址另外指定 IP 地址段

--pod-network-cidr

指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs。

⑥ 查看部署结果:

出现如下提示信息,表示k8s的master节点部署好了。

(3)生成kubelet环境配置文件:

执行命令:

mkdir -p $HOME/.kube

执行命令:

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

执行命令:

sudo chown $(id -u):$(id -g) $HOME/.kube/config
15、安装pod网络插件(CNI):

说明:在集群中master所在服务器,进行如下 *** 作:

(1)下载flannel的yml配置文件:

在线flannel的yml文件地址:https://github.com/caoran/kube-flannel.yml/blob/master/kube-flannel.yml,通过该地址将该yml文件下载下来。

(2)上传yml配置文件:

将yml配置文件上传到需要的服务器上。

(3)拉取flannel镜像:

执行命令:

docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-amd64
(4)重命名flannel镜像:

执行命令:

docker tag flannel镜像ID quay.io/coreos/flannel:v0.12.0-amd64
(5)删除旧flannel镜像:

执行命令:

docker rmi registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-amd64
(6)生效yml配置文件:

在需要的服务器上,进入到yml配置文件所在的文件夹中,然后执行命令进行生效:kubectl apply -f kube-flannel.yml

16、加入k8s的nodes:

说明:在集群中node所在服务器,进行如下 *** 作:

(1)如果是离线加入需要 *** 作: ① 拉取kube-proxy镜像:

执行命令:

docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.17.0
(2)拉取flannel镜像:

执行命令:

docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-amd64
(3)重命名flannel镜像:

执行命令:

docker tag flannel镜像ID quay.io/coreos/flannel:v0.12.0-amd64
(4)删除旧flannel镜像:

执行命令:

docker rmi registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-amd64
(5)向集群添加新节点: ① 查询token值:

说明:在集群中master所在服务器,进行如下 *** 作:

执行命令:

kubeadm token list
② 新建token:

说明:在集群中master所在服务器,进行如下 *** 作:

通过kubeadm初始化后,都会提供node加入的token。默认token的有效期为24小时,当过期之后,该token就不可用了,那么就新建一个token。

执行命令:

kubeadm token create
③ 查询discovery-token-ca-cert-hash值:

说明:在集群中master所在服务器,进行如下 *** 作:

执行命令:

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
④ 添加新节点到集群:

说明:在集群中node所在服务器,进行如下 *** 作:

执行命令:

kubeadm join 192.168.137.129:6443 --token zz5xc1.svx9tw1msbbd2v2l --discovery-token-ca-cert-hash sha256:2232ff536c7a272d52dfbce2ba07fa947fee7bcf6724095ef3c6def5dc34374e

参数说明:

参数

默认值

参数说明

--token

这个令牌用于建立控制平面节点与工作节点间的双向通信。格式为 [a-z0-9]{6}.[a-z0-9]{16} - 示例:abcdef.0123456789abcdef

--discovery-token-ca-cert-hash

对基于令牌的发现,验证根 CA 公钥是否与此哈希匹配 (格式: ":")。

(6)安装pod网络插件(CNI):

说明:如果在master服务器上安装pod网络插件(CNI)是在node加入k8s之后的话,那么就不需要手动在node服务器上安装CNI了,因为在master上安装CNI时会在整个k8s集群上安装。

检查当前node服务器/etc/cni/net.d/10-flannel.conflist文件是否存在,如果存在就不需要执行以下 *** 作了。如果没有就进行如下 *** 作。

以下 *** 作只是针对已经安装好CNI后,又往k8s集群中增加node节点:

由于安装pod网络插件(CNI)在节点加入k8s之前,因此不会在node上安装CNI,需要手动将master服务器上的/etc/cni/net.d/10-flannel.conflist文件拷贝到当前node服务器上的对应路径下。

然后在node节点上执行命令:

systemctl daemon-reload && systemctl restart kubelet
(7)查看node列表:

说明:在集群中master所在服务器,进行如下 *** 作:

执行命令:

kubectl get node
17、测试验证k8s集群: (1)拉取nginx镜像:

由于本次搭建没有使用私有镜像库,因此在每个node节点上,需要手动拉取以下nginx镜像。执行命令:

docker pull nginx
(2)创建nginx容器:

执行命令:

kubectl create deployment nginx --image=nginx
(3)暴露对外端口:

执行命令:

kubectl expose deployment nginx --port=80 --type=NodePort
(4)查询nginx是否运行成功:

执行命令:

kubectl get pod,svc
(5)浏览器测试访问:

在与k8s集群通网络段的windows服务器上的浏览器中,输入k8s集群的master或node节点IP及对应nginx映射出的端口号,进行访问,正常的话是可以访问到nginx欢迎页的。

(6)扩展nginx副本:

执行命令:

kubectl scale deployment nginx --replicas=3
(7)查看pod:

通过对nginx进行了扩展副本,然后查看nginx的pod是几个,是否生效,执行命令:

kubectl get pods

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4664031.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存