(10)二进制文件方式部署Kubernetes高可用集群----------部署node节点

Kubernetes的node节点包含以下组件:

Calico:需要在service配置文件中增加TLS配置

Doecker:统一的资源操作入口

Kubelet:统一的资源操作入口

Kube-proxy:统一的资源操作入口

1. Docker安装(略)

这里,Docker还是以二进制文件方式安装,具体安装方式可参考之前的文章《(6)二进制文件方式部署Kubernetes高可用集群----------安装Docker Engine》内容即可。

2. 配置kubelet

相对于kubernetes1.6集群必须进行的配置有: 对于kuberentes1.14集群,必须关闭swap,否则kubelet启动将失败。 修改/etc/fstab将,swap系统注释掉。

这里以master01作为集群的复用节点,进行node节点部署:

kubelet 启动时向 kube-apiserver 发送 TLS bootstrapping 请求,需要先将 bootstrap token 文件中的 kubelet-bootstrap 用户赋予 system:node-bootstrapper cluster 角色(role), 然后 kubelet 才能有权限创建认证请求(certificate signing requests):

2.1 在对应的master节点上给node节点kubelet授权

#在master节点上进行授权操作,该操作相当于给予node节点的签名请求权限。

kubectl create clusterrolebinding kubelet-bootstrap \

  --clusterrole=system:node-bootstrapper \

  --user=kubelet-bootstrap

2.2 复用master节点上的证书和kubeconfig文件

master节点上的证书:

(10)二进制文件方式部署Kubernetes高可用集群----------部署node节点_第1张图片

kubeconfig文件:

bootstrap.kubeconfig、kube-proxy.kubeconfig

2.3 创建kubelet参数配置文件

路径:/opt/kubernetes/config

KUBELET_ARGS="--logtostderr=true \

--v=2 \

--address=192.168.0.143 \

--hostname-override=192.168.0.143 \

--kubeconfig=/opt/kubernetes/config/kubelet.kubeconfig \

--experimental-bootstrap-kubeconfig=/opt/kubernetes/config/bootstrap.kubeconfig \

--cert-dir=/opt/kubernetes/ssl \

--allow-privileged=true \

--cluster-dns=10.10.10.2 \

--cluster-domain=cluster.local \

--fail-swap-on=false \

--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"

主要参数说明:
  • --address:node主机的IP地址,注意:不能设置为127.0.0.1,否则后续Pods访问kubelet的API接口时会失败,因为Pods访问的127.0.0.1将会指向自己而不是kubelet,且这个参数将来将会被弃用。
  • --hostname-override:如果设置该参数选项,则kube-proxy也需要设备,否则会出现找不到node的情况
  • --experimental-bootstrap-kubeconfig:指向bootstrap.kubeconfig文件,kubelet使用该文件中的用户名和token向kube-apiserver发生TLS Bootstrapping请求,管理员通过CSR请求后,kubelet自动在--cert-dir目录下创建证书和私钥文件(kubelet-client.crt和kubelet-client.key),然后写入--kubeconfig文件。
  • 建议在  --kubeconfig  配置文件中指定  kube-apiserver  地址,如果未指定  --api-servers  选项,则必须指定  --require-kubeconfig  选项后才从配置文件中读取 kube-apiserver 的地址,否则 kubelet 启动后将找不到kube-apiserver (日志中提示未找到 API Server), kubectl get nodes  不会返回对应的 Node 信息;
  • --cluster-dns  指定 kubedns 的 Service IP(可以先分配,后续创建kubedns 服务时指定该 IP), --cluster-domain  指定域名后缀,这两个参数同时指定后才会生效;
  • --pod-infra-container-image是基础镜像容器,这里用的是私有镜像仓库地址,大家部署的时候需要修改为自己的镜像。

2.4 创建kubelet服务启动文件

路径:/usr/lib/systemd/system

[Unit]

Description=Kubernetes Kubelet

After=docker.service

Requires=docker.service

 

[Service]

WorkingDirectory=/var/lib/kubelet

EnvironmentFile=-/opt/kubernetes/config/kubelet

ExecStart=/opt/kubernetes/bin/kubelet $KUBELET_ARGS

Restart=on-failure

 

[Install]

WantedBy=multi-user.target

2.5 启动kubelet

#systemctl daemon-reload

#systemctl start kubelet

#systemctl enable kubelet

#systemctl status kubelet

2.6 通过kubelet的TLS证书请求

kubelet 首次启动时向 kube-apiserver 发送证书签名请求,必须通过后 kubernetes系统才会将该 Node 加入到集群。

查看未授权的CSR请求:

#kubectl get csr

如果看不到node节点的证书签名请求,也有一种可能就是我们的master节点没有给nodes节点上的角色授予准入集群权限。这时可执行:

kubectl create clusterrolebinding kubelet-bootstrap \

--clusterrole=system:node-bootstrapper \

--user=kubelet-bootstrap

  • --user=kubelet-bootstrap 是在 /etc/kubernetes/token.csv 文件中指定的用户名,同时也写入了 /etc/kubernetes/bootstrap.kubeconfig 文件;

3. 配置kube-proxy

3.1 Kube-proxy参数配置文件

KUBE_PROXY_OPTS="--logtostderr=true \

--v=4 \

--hostname-override=192.168.0.143 \

--cluster-cidr=10.10.10.0/24 \

--proxy-mode=ipvs \

--masquerade-all=true \

--ipvs-scheduler=wrr \

--kubeconfig=/opt/kubernetes/cfg/kube-proxy.kubeconfig"

---------------------------------------------------------------------------------------------------------------------------------

字段参数说明:

 

 

3.2 Kubectl-proxy.service服务启动文件

[Unit]

Description=Kubernetes Proxy

After=network.target

Requires=network.service

 

[Service]

EnvironmentFile=-/opt/kubernetes/config/kube-proxy

ExecStart=/opt/kubernetes/bin/kube-proxy $KUBE_PROXY_ARGS

Restart=on-failure

 

[Install]

WantedBy=multi-user.target

3.3 启动kube-proxy

#systemctl daemon-reload

#systemc start kube-proxy

#systemc enable kube-proxy

# systemctl status kube-proxy


愿你就像早晨八九点钟的太阳,活力十足,永远年轻。

 

你可能感兴趣的:((10)二进制文件方式部署Kubernetes高可用集群----------部署node节点)