二进制包部署管理Kubernetes集群

x33g5p2x  于2021-12-25 转载在 其他  
字(14.8k)|赞(0)|评价(0)|浏览(255)

K8S集群部署有几种方式:kubeadm、minikube和二进制包。前两者属于自动部署,简化部署操作,自动部署屏蔽了很多细节,使得对各个模块感知很少。这篇文章是使用二进制包部署Kubernetes集群。

一、架构拓扑图

二、环境规划

| <br>角色<br> | <br>IP<br> | <br>组件<br> |
| <br>master<br> | <br>192.168.0.211<br> | <br>etcd<br><br>kube-apiserver<br><br>kube-controller-manager<br><br>kube-scheduler<br> |
| <br>node01<br> | <br>192.168.0.212<br> | <br>kubelet<br><br>kube-proxy<br><br>docker<br> |
| <br>node02<br> | <br>192.168.0.213<br> | <br>kubelet<br><br>kube-proxy<br><br>docker<br> |

环境说明:

操作系统:Ubuntu16.04 or CentOS7

Kubernetes版本:v1.8.3

Docker版本:v17.09-ce

均采用当前最新稳定版本。

关闭selinux。

三、部署集群

3.1 下载二进制包

打开下面网址,下载下面两个红色框框的包。

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.8.md#v183

下载完成后,上传到服务器:

kubernetes-server-linux-amd64.tar.gz上传到master节点。

kubernetes-node-linux-amd64.tar.gz 上传到node节点。

3.2  安装etcd3

| <br>1<br><br>2<br><br>3<br><br>4<br><br>5<br><br>6<br><br>7<br><br>8<br> | <br>k8s-master``# yum install etcd –y<br><br>k8s-master``# vi /etc/etcd/etcd.conf <br><br>ETCD_NAME=``"default"<br><br>ETCD_DATA_DIR=``"/var/lib/etcd/default"<br><br>ETCD_LISTEN_CLIENT_URLS=``"http://0.0.0.0:2379"<br><br>ETCD_ADVERTISE_CLIENT_URLS=http:``//0``.0.0.0:2379<br><br>k8s-master``# systemctl enable etcd<br><br>k8s-master``# systemctl start etcd<br> |

注意:Ubuntu系统etcd配置文件在/etc/default/etcd。

3.3 运行Master节点组件

| <br>1<br><br>2<br><br>3<br> | <br>k8s-master``# tar zxvf kubernetes-server-linux-amd64.tar.gz<br><br>k8s-master``# mkdir -p /opt/kubernetes/{bin,cfg}<br><br>k8s-master``# mv kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl} /opt/kubernetes/bin<br> |

3.3.1 apiserver

创建配置文件:

| <br>1<br><br>2<br><br>3<br><br>4<br><br>5<br><br>6<br><br>7<br><br>8<br><br>9<br><br>10<br><br>11<br><br>12<br><br>13<br><br>14<br><br>15<br><br>16<br><br>17<br> | <br># vi /opt/kubernetes/cfg/kube-apiserver<br><br># 启用日志标准错误<br><br>KUBE_LOGTOSTDERR=``"--logtostderr=true"<br><br># 日志级别<br><br>KUBE_LOG_LEVEL=``"--v=4"<br><br># Etcd服务地址<br><br>KUBE_ETCD_SERVERS=``"--etcd-servers=http://192.168.0.211:2379"<br><br># API服务监听地址<br><br>KUBE_API_ADDRESS=``"--insecure-bind-address=0.0.0.0"<br><br># API服务监听端口<br><br>KUBE_API_PORT=``"--insecure-port=8080"<br><br># 对集群中成员提供API服务地址<br><br>KUBE_ADVERTISE_ADDR=``"--advertise-address=192.168.0.211"<br><br># 允许容器请求特权模式,默认false<br><br>KUBE_ALLOW_PRIV=``"--allow-privileged=false"<br><br># 集群分配的IP范围<br><br>KUBE_SERVICE_ADDRESSES=``"--service-cluster-ip-range=10.10.10.0/24"<br> |

创建systemd服务文件:

| <br>1<br><br>2<br><br>3<br><br>4<br><br>5<br><br>6<br><br>7<br><br>8<br><br>9<br><br>10<br><br>11<br><br>12<br><br>13<br><br>14<br><br>15<br><br>16<br><br>17<br><br>18<br><br>19<br> | <br># vi /lib/systemd/system/kube-apiserver.service <br><br>[Unit]<br><br>Description=Kubernetes API Server<br><br>Documentation=https:``//github``.com``/kubernetes/kubernetes<br><br>[Service]<br><br>EnvironmentFile=-``/opt/kubernetes/cfg/kube-apiserver<br><br>#ExecStart=/opt/kubernetes/bin/kube-apiserver ${KUBE_APISERVER_OPTS}<br><br>ExecStart=``/opt/kubernetes/bin/kube-apiserver \<br><br>${KUBE_LOGTOSTDERR} \<br><br>${KUBE_LOG_LEVEL} \<br><br>${KUBE_ETCD_SERVERS} \<br><br>${KUBE_API_ADDRESS} \<br><br>${KUBE_API_PORT} \<br><br>${KUBE_ADVERTISE_ADDR} \<br><br>${KUBE_ALLOW_PRIV} \<br><br>${KUBE_SERVICE_ADDRESSES}<br><br>Restart=on-failure<br><br>[Install]<br><br>WantedBy=multi-user.target<br> |

启动服务,并设置开机启动:

| <br>1<br><br>2<br><br>3<br> | <br># systemctl daemon-reload<br><br># systemctl enable kube-apiserver<br><br># systemctl restart kube-apiserver<br> |

注意:apiserver默认支持etcd3,如果是etcd2,需启动时指定版本选项--storage-backend=etcd2

3.3.2 scheduler

创建配置文件:

| <br>1<br><br>2<br><br>3<br><br>4<br><br>5<br> | <br># vi /opt/kubernetes/cfg/kube-scheduler<br><br>KUBE_LOGTOSTDERR=``"--logtostderr=true"<br><br>KUBE_LOG_LEVEL=``"--v=4"<br><br>KUBE_MASTER=``"--master=192.168.0.211:8080"<br><br>KUBE_LEADER_ELECT=``"--leader-elect"<br> |

创建systemd服务文件:

| <br>1<br><br>2<br><br>3<br><br>4<br><br>5<br><br>6<br><br>7<br><br>8<br><br>9<br><br>10<br><br>11<br><br>12<br><br>13<br><br>14<br> | <br># vi /lib/systemd/system/kube-scheduler.service<br><br>[Unit]<br><br>Description=Kubernetes Scheduler<br><br>Documentation=https:``//github``.com``/kubernetes/kubernetes<br><br>[Service]<br><br>EnvironmentFile=-``/opt/kubernetes/cfg/kube-scheduler<br><br>ExecStart=``/opt/kubernetes/bin/kube-scheduler \<br><br>${KUBE_LOGTOSTDERR} \<br><br>${KUBE_LOG_LEVEL} \<br><br>${KUBE_MASTER} \<br><br>${KUBE_LEADER_ELECT}<br><br>Restart=on-failure<br><br>[Install]<br><br>WantedBy=multi-user.target<br> |

启动服务,并设置开机启动:

| <br>1<br><br>2<br><br>3<br> | <br># systemctl daemon-reload<br><br># systemctl enable kube-scheduler<br><br># systemctl restart kube-scheduler<br> |

3.3.3 controller-manager

创建配置文件:

| <br>1<br><br>2<br><br>3<br><br>4<br> | <br># vi /opt/kubernetes/cfg/kube-controller-manager<br><br>KUBE_LOGTOSTDERR=``"--logtostderr=true"<br><br>KUBE_LOG_LEVEL=``"--v=4"<br><br>KUBE_MASTER=``"--master=192.168.0.211:8080"<br> |

创建systemd服务文件:

| <br>1<br><br>2<br><br>3<br><br>4<br><br>5<br><br>6<br><br>7<br><br>8<br><br>9<br><br>10<br><br>11<br><br>12<br><br>13<br><br>14<br> | <br># vi /lib/systemd/system/kube-controller-manager.service<br><br>[Unit]<br><br>Description=Kubernetes Controller Manager<br><br>Documentation=https:``//github``.com``/kubernetes/kubernetes<br><br>[Service]<br><br>EnvironmentFile=-``/opt/kubernetes/cfg/kube-controller-manager<br><br>ExecStart=``/opt/kubernetes/bin/kube-controller-manager \<br><br>${KUBE_LOGTOSTDERR} \<br><br>${KUBE_LOG_LEVEL} \<br><br>${KUBE_MASTER} \<br><br>${KUBE_LEADER_ELECT}<br><br>Restart=on-failure<br><br>[Install]<br><br>WantedBy=multi-user.target<br> |

启动服务,并设置开机启动:

| <br>1<br><br>2<br><br>3<br> | <br># systemctl daemon-reload<br><br># systemctl enable kube-controller-manager<br><br># systemctl restart kube-controller-manager<br> |

3.3.4 小结

Master节点组件就全部启动了,需要注意的是服务启动顺序有依赖,先启动etcd,再启动apiserver,其他组件无顺序要求。

查看Master节点组件进程状态:

说明组件都在运行。

如果启动失败,请查看启动日志,例如:

#journalctl -u kube-apiserver

3.4  运行Node节点组件

| <br>1<br><br>2<br><br>3<br> | <br>k8s-node01``# tar zxvf kubernetes-node-linux-amd64.tar.gz<br><br>k8s-node01``# mkdir -p /opt/kubernetes/{bin,cfg}<br><br>k8s-node01``# mv kubernetes/node/bin/{kubelet,kube-proxy} /opt/kubernetes/bin/<br> |

3.4.1 kubelet

创建kubeconfig配置文件:

| <br>1<br><br>2<br><br>3<br><br>4<br><br>5<br><br>6<br><br>7<br><br>8<br><br>9<br><br>10<br><br>11<br><br>12<br> | <br># vi /opt/kubernetes/cfg/kubelet.kubeconfig<br><br>apiVersion: v1<br><br>kind: Config<br><br>clusters:<br><br>  ``- cluster:<br><br>      ``server: http:``//192``.168.0.211:8080<br><br>    ``name: ``local<br><br>contexts:<br><br>  ``- context:<br><br>      ``cluster: ``local<br><br>    ``name: ``local<br><br>current-context: ``local<br> |

kubeconfig文件用于kubelet连接master apiserver。

创建配置文件:

| <br>1<br><br>2<br><br>3<br><br>4<br><br>5<br><br>6<br><br>7<br><br>8<br><br>9<br><br>10<br><br>11<br><br>12<br><br>13<br><br>14<br><br>15<br><br>16<br><br>17<br><br>18<br><br>19<br><br>20<br> | <br># vi /opt/kubernetes/cfg/kubelet            <br><br># 启用日志标准错误<br><br>KUBE_LOGTOSTDERR=``"--logtostderr=true"<br><br># 日志级别<br><br>KUBE_LOG_LEVEL=``"--v=4"<br><br># Kubelet服务IP地址<br><br>NODE_ADDRESS=``"--address=192.168.0.212"<br><br># Kubelet服务端口<br><br>NODE_PORT=``"--port=10250"<br><br># 自定义节点名称<br><br>NODE_HOSTNAME=``"--hostname-override=192.168.0.212"<br><br># kubeconfig路径,指定连接API服务器<br><br>KUBELET_KUBECONFIG=``"--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig"<br><br># 允许容器请求特权模式,默认false<br><br>KUBE_ALLOW_PRIV=``"--allow-privileged=false"<br><br># DNS信息<br><br>KUBELET_DNS_IP=``"--cluster-dns=10.10.10.2"<br><br>KUBELET_DNS_DOMAIN=``"--cluster-domain=cluster.local"<br><br># 禁用使用Swap<br><br>KUBELET_SWAP=``"--fail-swap-on=false"<br> |

创建systemd服务文件:

| <br>1<br><br>2<br><br>3<br><br>4<br><br>5<br><br>6<br><br>7<br><br>8<br><br>9<br><br>10<br><br>11<br><br>12<br><br>13<br><br>14<br><br>15<br><br>16<br><br>17<br><br>18<br><br>19<br><br>20<br><br>21<br><br>22<br> | <br># vi /lib/systemd/system/kubelet.service<br><br>[Unit]<br><br>Description=Kubernetes Kubelet<br><br>After=docker.service<br><br>Requires=docker.service<br><br>[Service]<br><br>EnvironmentFile=-``/opt/kubernetes/cfg/kubelet<br><br>ExecStart=``/opt/kubernetes/bin/kubelet \<br><br>${KUBE_LOGTOSTDERR} \<br><br>${KUBE_LOG_LEVEL} \<br><br>${NODE_ADDRESS} \<br><br>${NODE_PORT} \<br><br>${NODE_HOSTNAME} \<br><br>${KUBELET_KUBECONFIG} \<br><br>${KUBE_ALLOW_PRIV} \<br><br>${KUBELET_DNS_IP} \<br><br>${KUBELET_DNS_DOMAIN} \<br><br>${KUBELET_SWAP} \<br><br>Restart=on-failure<br><br>KillMode=process<br><br>[Install]<br><br>WantedBy=multi-user.target<br> |

启动服务,并设置开机启动:

| <br>1<br><br>2<br><br>3<br> | <br># systemctl daemon-reload<br><br># systemctl enable kubelet<br><br># systemctl restart kubelet<br> |

3.4.2 proxy

创建配置文件:

| <br>1<br><br>2<br><br>3<br><br>4<br><br>5<br><br>6<br><br>7<br><br>8<br><br>9<br> | <br># vi /opt/kubernetes/cfg/kube-proxy            <br><br># 启用日志标准错误<br><br>KUBE_LOGTOSTDERR=``"--logtostderr=true"<br><br># 日志级别<br><br>KUBE_LOG_LEVEL=``"--v=4"<br><br># 自定义节点名称<br><br>NODE_HOSTNAME=``"--hostname-override=192.168.0.212"<br><br># API服务地址<br><br>KUBE_MASTER=``"--master=http://192.168.0.211:8080"<br> |

创建systemd服务文件:

| <br>1<br><br>2<br><br>3<br><br>4<br><br>5<br><br>6<br><br>7<br><br>8<br><br>9<br><br>10<br><br>11<br><br>12<br><br>13<br><br>14<br> | <br># vi /lib/systemd/system/kube-proxy.service<br><br>[Unit]<br><br>Description=Kubernetes Proxy<br><br>After=network.target<br><br>[Service]<br><br>EnvironmentFile=-``/opt/kubernetes/cfg/kube-proxy<br><br>ExecStart=``/opt/kubernetes/bin/kube-proxy \<br><br>${KUBE_LOGTOSTDERR} \<br><br>${KUBE_LOG_LEVEL} \<br><br>${NODE_HOSTNAME} \<br><br>${KUBE_MASTER}<br><br>Restart=on-failure<br><br>[Install]<br><br>WantedBy=multi-user.target<br> |

启动服务,并设置开机启动:

| <br>1<br><br>2<br><br>3<br> | <br># systemctl daemon-reload<br><br># systemctl enable kube-proxy<br><br># systemctl restart kube-proxy<br> |

3.4.3 小结

其他节点加入集群与node01方式相同,但需修改kubelet的--address和--hostname-override选项为本机IP。

查看Node节点组件进程状态:

说明组件都在运行。

如果启动失败,请查看启动日志,例如:

#journalctl -u kubelet

3.5 验证集群是否部署成功

设置可执行文件到系统变量,方便使用:

| <br>1<br><br>2<br> | <br># echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile<br><br># source /etc/profile<br> |

查看集群节点状态:

两个节点都加入到了kubernetes集群,就此部署完成。

相关文章