大家国庆节快乐!
![ececc92a03cd7e7ebd740aa5557d329a.png](https://i-blog.csdnimg.cn/blog_migrate/6798801ff8bf5f6f0e145ea63831367e.jpeg)
昨天分享了《009 使用二进制文件安装kubernetes1.15集群之部署 master 节点》今天我们来学习二进制部署k8s集群的最后的部分,slave节点的部署。
开始部署slave节点
仍然在master节点上操作!!这里把master节点也算作在node节点之内kubernetes work 节点运行如下组件:dockerkubeletkube-proxy
首先将server的二进制压缩包解压后的二进制命令拷贝到所有节点:
[root@k8s-1 ~]# cd /data/install/kubernetes/server/bin/[root@k8s-1 bin]# scp kubelet kube-proxy k8s-1:/cloud/k8s/kubernetes/bin/[root@k8s-1 bin]# scp kubelet kube-proxy k8s-2:/cloud/k8s/kubernetes/bin/[root@k8s-1 bin]# scp kubelet kube-proxy k8s-3:/cloud/k8s/kubernetes/bin/
- 部署 kubelet 组件
kublet 运行在每个 worker 节点上,接收 kube-apiserver 发送的请求,管理 Pod 容器,执行交互式命令,如exec、run、logs 等;kublet 启动时自动向 kube-apiserver 注册节点信息,内置的 cadvisor 统计和监控节点的资源使用情况;为确保安全,本文档只开启接收 https 请求的安全端口,对请求进行认证和授权,拒绝未授权的访问(如apiserver、heapster)。
下边创建三个kubeconfig文件
注意BOOTSTRAP_TOKEN=562c96dba17c1753416ed9643de03757 是 在部署apiserver的token时执行”head -c 16 /dev/urandom | od -An -t x | tr -d ' '“命令生成的!!!不要照抄我这里的!这是个坑!
创建 kubelet bootstrap.kubeconfig 文件
通过 执行environment.sh脚本获取 bootstrap.kubeconfig 配置文件。
cd /data/ssl_config/kubernetes/[root@k8s-1 kubernetes]# pwd/data/ssl_config/kubernetes[root@k8s-1 kubernetes]# cat environment.sh# 创建kubelet bootstrapping kubeconfigBOOTSTRAP_TOKEN=562c96dba17c1753416ed9643de03757KUBE_APISERVER="https://192.168.10.23:6443"# 设置集群参数kubectl config set-cluster kubernetes --certificate-authority=./ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=bootstrap.kubeconfig# 设置客户端认证参数kubectl config set-credentials kubelet-bootstrap --token=${BOOTSTRAP_TOKEN} --kubeconfig=bootstrap.kubeconfig# 设置上下文参数kubectl config set-context default --cluster=kubernetes --user=kubelet-bootstrap --kubeconfig=bootstrap.kubeconfig# 设置默认上下文kubectl config use-context default --kubeconfig=bootstrap.kubeconfig执行脚本[root@k8s-1 kubernetes]# sh ./environment.sh
创建 kubelet.kubeconfig 文件
通过 执行envkubelet.kubeconfig.sh脚本获取 kubelet.kubeconfig配置文件。
[root@k8s-1 kubernetes]# pwd/data/ssl_config/kubernetes[root@k8s-1 kubernetes]# cat envkubelet.kubeconfig.sh# 创建kubelet bootstrapping kubeconfigBOOTSTRAP_TOKEN=562c96dba17c1753416ed9643de03757KUBE_APISERVER="https://192.168.10.23:6443"# 设置集群参数kubectl config set-cluster kubernetes --certificate-authority=./ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=kubelet.kubeconfig# 设置客户端认证参数kubectl config set-credentials kubelet --token=${BOOTSTRAP_TOKEN} --kubeconfig=kubelet.kubeconfig# 设置上下文参数kubectl config set-context default --cluster=kubernetes --user=kubelet --kubeconfig=kubelet.kubeconfig# 设置默认上下文kubectl config use-context default --kubeconfig=kubelet.kubeconfig执行脚本[root@k8s-1 kubernetes]# sh ./envkubelet.kubeconfig.sh
创建kube-proxy kubeconfig文件
通过 执行env_proxy.sh脚本获取 kube-proxy.kubeconfig配置文件。
[root@k8s-1 kubernetes]# pwd/data/ssl_config/kubernetes[root@k8s-1 kubernetes]# cat env_proxy.sh# 创建kube-proxy kubeconfig文件BOOTSTRAP_TOKEN=562c96dba17c1753416ed9643de03757KUBE_APISERVER="https://192.168.10.23:6443"# 设置集群参数kubectl config set-cluster kubernetes --certificate-authority=./ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=kube-proxy.kubeconfig# 设置客户端认证参数kubectl config set-credentials kube-proxy --client-certificate=./kube-proxy.pem --client-key=./kube-proxy-key.pem --embed-certs=true --kubeconfig=kube-proxy.kubeconfig# 设置上下文参数kubectl config set-context default --cluster=kubernetes --user=kube-proxy --kubeconfig=kube-proxy.kubeconfig# 设置默认上下文kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig执行脚本[root@k8s-1 kubernetes]# sh ./env_proxy.sh
生成三个kubeconfig文件
![68b5009ba2eb3fe86a6c575f4b5c9f65.png](https://i-blog.csdnimg.cn/blog_migrate/815943b996dcf5aad2e0d16ff6b3964d.jpeg)
将bootstrap kubeconfig kube-proxy.kubeconfig 文件拷贝到所有slave节点
[root@k8s-1 kubernetes]# pwd/data/ssl_config/kubernetes[root@k8s-1 kubernetes]# scp -rp bootstrap.kubeconfig kube-proxy.kubeconfig k8s-1:/cloud/k8s/kubernetes/cfg/[root@k8s-1 kubernetes]# scp -rp bootstrap.kubeconfig kube-proxy.kubeconfig k8s-2:/cloud/k8s/kubernetes/cfg/[root@k8s-1 kubernetes]# scp -rp bootstrap.kubeconfig kube-proxy.kubeconfig k8s-3:/cloud/k8s/kubernetes/cfg/
- 创建kubelet 参数配置模板文件
注意:address: 192.168.10.23,这个参数写本节点的IP,各不相同。拷贝到其他节点要注意!!
[root@k8s-1 ~]# cat /cloud/k8s/kubernetes/cfg/kubelet.configkind: KubeletConfigurationapiVersion: kubelet.config.k8s.io/v1beta1address: 192.168.10.23port: 10250readOnlyPort: 10255cgroupDriver: cgroupfsclusterDomain: cluster.local.failSwapOn: falseauthentication:anonymous:enabled: true
创建kubelet配置文件
[root@k8s-1 ~]# cat /cloud/k8s/kubernetes/cfg/kubeletKUBELET_OPTS="--logtostderr=true --v=4 --hostname-override=k8s-1 --kubeconfig=/cloud/k8s/kubernetes/cfg/kubelet.kubeconfig --bootstrap-kubeconfig=/cloud/k8s/kubernetes/cfg/bootstrap.kubeconfig --config=/cloud/k8s/kubernetes/cfg/kubelet.config --cert-dir=/cloud/k8s/kubernetes/ssl --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"
创建kubelet systemd unit 服务文件
[root@k8s-1 ~]# cat /usr/lib/systemd/system/kubelet.service[Unit]Description=Kubernetes KubeletAfter=docker.serviceRequires=docker.service[Service]EnvironmentFile=/cloud/k8s/kubernetes/cfg/kubeletExecStart=/cloud/k8s/kubernetes/bin/kubelet $KUBELET_OPTSRestart=on-failureKillMode=process[Install]WantedBy=multi-user.target
将刚创建的kubelet.config、kubelet、kubelet.service文件拷贝到所有 nodes节点,包括master
不写脚本了,直接上命令吧:注意:kubelet.config文件的address: 192.168.10.23,这个参数写本节点的IP,各不相同。拷贝到其他节点要注意!!
#k8s-1节点[root@k8s-1 ~]# scp /cloud/k8s/kubernetes/cfg/kubelet.config root@k8s-1:/cloud/k8s/kubernetes/cfg/kubelet.config[root@k8s-1 ~]# scp /cloud/k8s/kubernetes/cfg/kubelet root@k8s-1:/cloud/k8s/kubernetes/cfg/kubelet[root@k8s-1 ~]# scp /usr/lib/systemd/system/kubelet.service root@k8s-1:/usr/lib/systemd/system/kubelet.service#k8s-2节点[root@k8s-1 ~]# scp /cloud/k8s/kubernetes/cfg/kubelet.config root@k8s-2:/cloud/k8s/kubernetes/cfg/kubelet.config[root@k8s-1 ~]# scp /cloud/k8s/kubernetes/cfg/kubelet root@k8s-2:/cloud/k8s/kubernetes/cfg/kubelet[root@k8s-1 ~]# scp /usr/lib/systemd/system/kubelet.service root@k8s-2:/usr/lib/systemd/system/kubelet.service#k8s-3节点[root@k8s-1 ~]# scp /cloud/k8s/kubernetes/cfg/kubelet.config root@k8s-3:/cloud/k8s/kubernetes/cfg/kubelet.config[root@k8s-1 ~]# scp /cloud/k8s/kubernetes/cfg/kubelet root@k8s-3:/cloud/k8s/kubernetes/cfg/kubelet[root@k8s-1 ~]# scp /usr/lib/systemd/system/kubelet.service root@k8s-3:/usr/lib/systemd/system/kubelet.service
将kubelet-bootstrap用户绑定到系统集群角色
[root@k8s-1 ~]# kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
启动kubelet服务
在各个节点上都要启动执行:
[root@k8s-1 ~]# systemctl daemon-reload && systemctl enable kubelet && systemctl restart kubelet
![d33f9763f5d00b5bc50c138e586ba8dc.png](https://i-blog.csdnimg.cn/blog_migrate/e650f0d865e3df1f467f8f941f161334.jpeg)
批准 kubelet 签名请求文件 请求
[root@k8s-1 ~]# kubectl get csr |head -2NAME AGE REQUESTOR CONDITIONnode-csr-yCn3MIUz-luhqwEVva1haugCmoz48ykxU7x4er3pfQs 44s kubelet-bootstrap Pending#看csr,仍然是pending状态,需要批准以下,$NAME就是csr的name。[root@k8s-1 ~]# kubectl get csr | grep Pending | awk '{print $1}' | xargs kubectl certificate approve[root@k8s-1 ~]# kubectl get csrcsr 状态变为 Approved,Issued 即可
查看集群状态
![6e05c8be318b9b645b2a131cc9dfaff4.png](https://i-blog.csdnimg.cn/blog_migrate/03f1c259e489d09efed805cd72285e19.jpeg)
- 部署 node节点 kube-proxy 组件
在master上执行操作。kube-proxy 运行在所有 node节点上,它监听 apiserver 中 service 和 Endpoint 的变化情况,创建路由规则来进行服务负载均衡。
创建kube-proxy配置文件
集群cidr: --cluster-cidr=10.96.0.0/12
[root@k8s-1 ~]# cat /cloud/k8s/kubernetes/cfg/kube-proxyKUBE_PROXY_OPTS="--logtostderr=true --v=4 --hostname-override=k8s-1 --cluster-cidr=10.96.0.0/12 --kubeconfig=/cloud/k8s/kubernetes/cfg/kube-proxy.kubeconfig"
创建kube-proxy systemd unit 服务文件
[root@k8s-1 ~]# cat /usr/lib/systemd/system/kube-proxy.service[Unit]Description=Kubernetes ProxyAfter=network.target[Service]EnvironmentFile=/cloud/k8s/kubernetes/cfg/kube-proxyExecStart=/cloud/k8s/kubernetes/bin/kube-proxy $KUBE_PROXY_OPTSRestart=on-failure[Install]WantedBy=multi-user.target
将刚创建的kube-proxy文件和kube-proxy.service文件拷贝到所有slave节点,包含maser
#k8s-1节点[root@k8s-1 ~]# scp /cloud/k8s/kubernetes/cfg/kube-proxy root@k8s-1:/cloud/k8s/kubernetes/cfg/kube-proxy[root@k8s-1 ~]# scp /usr/lib/systemd/system/kube-proxy.service root@k8s-1:/usr/lib/systemd/system/kube-proxy.service#k8s-2节点[root@k8s-1 ~]# scp /cloud/k8s/kubernetes/cfg/kube-proxy root@k8s-2:/cloud/k8s/kubernetes/cfg/kube-proxy[root@k8s-1 ~]# scp /usr/lib/systemd/system/kube-proxy.service root@k8s-2:/usr/lib/systemd/system/kube-proxy.service#k8s-3节点[root@k8s-1 ~]# scp /cloud/k8s/kubernetes/cfg/kube-proxy root@k8s-3:/cloud/k8s/kubernetes/cfg/kube-proxy[root@k8s-1 ~]# scp /usr/lib/systemd/system/kube-proxy.service root@k8s-3:/usr/lib/systemd/system/kube-proxy.service
在所有节点启动kube-proxy服务
[root@k8s-1 ~]# systemctl daemon-reload && systemctl enable kube-proxy && systemctl restart kube-proxy && systemctl status kube-proxy
![5a7d9a521d7e01ce27693841b7c92251.png](https://i-blog.csdnimg.cn/blog_migrate/975a240edc6a7338162798c688040293.jpeg)
关于以二进制文件的方式部署kubernetes集群到此先告一段落了,其中难免有不妥的地方,希望大家指正共同学习。