千家信息网

kubernetes二进制集群部署 二——单master集群

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,内容要点:一、实验环境二、单master群集部署三、多master群集部署一、实验环境:基于上篇博客:https://blog.51cto.com/14475876/2470049 部署的环境上二、单
千家信息网最后更新 2025年02月04日kubernetes二进制集群部署 二——单master集群

内容要点:

一、实验环境

二、单master群集部署

三、多master群集部署

一、实验环境:

基于上篇博客:https://blog.51cto.com/14475876/2470049 部署的环境上


二、单master群集部署

单master群集架构图:


以下是自签SSL证书列表:


1、首先,我们要了解在 Master 上,要部署以下三大核心组件:


  • kube-apiserver:是集群的统一入口,各组件协调者,所有对象资源的增删改查和监听操作都交给 APIServer 处理后再提交给 Etcd 存储;

  • kube-controller-manager:处理群集中常规后台任务,一个资源对应一个控制器,而 controller-manager 就是负责管理这些控制器的;

  • kube-scheduler:根据调度算法为新创建的 Pod 选择一个 Node 节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同节点上。

操作流程:配置文件 -----> systemd 管理组件 -----> 启动


-- 部署开始:

接下来是在 master 上的操作,生成 api-server 证书:


将宿主机上下载好的 master.zip 包上传到 /root/k8s/ 目录下,并解压:[root@localhost k8s]# unzip master.zip[root@localhost k8s]# mkdir /opt/kubernetes/{cfg,bin,ssl} -p  [root@localhost k8s]# mkdir k8s-cert      //创建 apiserver自签证书的目录[root@localhost k8s]# cd k8s-cert/[root@localhost k8s-cert]# vim k8s-cert.shcat > ca-config.json < ca-csr.json < server-csr.json < admin-csr.json < kube-proxy-csr.json <


2、在 node 节点上的部署:


首先以下是 node 节点上的 三大核心组件:


  • kubelet:是master在node节点上的agent,可以管理本机运行容器的生命周期,例如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作,kubelet 将每个 Pod转换成一组容器。

  • kube-proxy:在 node节点上实现 Pod网络代理,维护网络规划和四层负载均衡工作。

  • docker:容器(我们已经安装好了)


-- 部署开始:

//先在master上,把 kubelet、kube-proxy 拷贝到 node节点上去:[root@localhost ~]# cd k8s/kubernetes/server/bin/[root@localhost bin]# lsapiextensions-apiserver              kube-apiserver.docker_tag           kube-proxycloud-controller-manager             kube-apiserver.tar                  kube-proxy.docker_tagcloud-controller-manager.docker_tag  kube-controller-manager             kube-proxy.tarcloud-controller-manager.tar         kube-controller-manager.docker_tag  kube-schedulerhyperkube                            kube-controller-manager.tar         kube-scheduler.docker_tagkubeadm                              kubectl                             kube-scheduler.tarkube-apiserver                       kubelet                             mounter[root@localhost bin]# scp kubelet kube-proxy root@192.168.109.131:/opt/kubernetes/bin/[root@localhost bin]# scp kubelet kube-proxy root@192.168.109.132:/opt/kubernetes/bin///在 node01节点上操作(将宿主机上的 node.zip包 到/root 目录下再解压):[root@localhost ~]# lsanaconda-ks.cfg  flannel-v0.10.0-linux-amd64.tar.gz  node.zip   公共  视频  文档  音乐flannel.sh       initial-setup-ks.cfg                README.md  模板  图片  下载  桌面[root@localhost ~]# unzip node.zip    //解压,获得 kubelet.sh proxy.shArchive:  node.zip  inflating: proxy.sh                  inflating: kubelet.sh ----接下来在 master 上操作:[root@localhost k8s]# mkdir kubeconfig[root@localhost k8s]# cd kubeconfig/[root@localhost kubeconfig]# cat /opt/kubernetes/cfg/token.csv  //获取 token信息1232eb0133309f6ccde54802cc0b3ebe,kubelet-bootstrap,10001,"system:kubelet-bootstrap"[root@localhost kubeconfig]# vim kubeconfigAPISERVER=$1SSL_DIR=$2# 创建kubelet bootstrapping kubeconfig export KUBE_APISERVER="https://$APISERVER:6443"# 设置集群参数kubectl config set-cluster kubernetes \  --certificate-authority=$SSL_DIR/ca.pem \  --embed-certs=true \  --server=${KUBE_APISERVER} \  --kubeconfig=bootstrap.kubeconfig# 设置客户端认证参数kubectl config set-credentials kubelet-bootstrap \  --token=1232eb0133309f6ccde54802cc0b3ebe \  --kubeconfig=bootstrap.kubeconfig# 设置上下文参数kubectl config set-context default \  --cluster=kubernetes \  --user=kubelet-bootstrap \  --kubeconfig=bootstrap.kubeconfig# 设置默认上下文  --kubeconfig=bootstrap.kubeconfig# 设置默认上下文kubectl config use-context default --kubeconfig=bootstrap.kubeconfig#----------------------# 创建kube-proxy kubeconfig文件kubectl config set-cluster kubernetes \  --certificate-authority=$SSL_DIR/ca.pem \  --embed-certs=true \  --server=${KUBE_APISERVER} \  --kubeconfig=kube-proxy.kubeconfigkubectl config set-credentials kube-proxy \  --client-certificate=$SSL_DIR/kube-proxy.pem \  --client-key=$SSL_DIR/kube-proxy-key.pem \  --embed-certs=true \  --kubeconfig=kube-proxy.kubeconfigkubectl config set-context default \  --cluster=kubernetes \  --user=kube-proxy \  --kubeconfig=kube-proxy.kubeconfigkubectl config use-context default --kubeconfig=kube-proxy.kubeconfig//设置环境变量(可以写入到 /etc/profile 中):[root@localhost kubeconfig]# export PATH=$PATH:/opt/kubernetes/bin///检查健康状态:[root@localhost kubeconfig]# kubectl get csNAME                 STATUS    MESSAGE             ERRORscheduler            Healthy   ok                  controller-manager   Healthy   ok                  etcd-0               Healthy   {"health":"true"}   etcd-2               Healthy   {"health":"true"}   etcd-1               Healthy   {"health":"true"} //生成配置文件:[root@localhost kubeconfig]# bash kubeconfig 192.168.109.138 /root/k8s/k8s-cert/[root@localhost kubeconfig]# lsbootstrap.kubeconfig  kubeconfig  kube-proxy.kubeconfig//拷贝配置文件到 node节点上:[root@localhost kubeconfig]# scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.109.131:/opt/kubernetes/cfg/[root@localhost kubeconfig]# scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.109.132:/opt/kubernetes/cfg///创建 bootstrap角色赋予权限用于连接 apiserver请求签名(至关重要):[root@localhost kubeconfig]# kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap----接下来在 node01 节点上的操作:[root@localhost ~]# bash kubelet.sh 192.168.109.131//检查 kubelet 服务启动:[root@localhost ~]# ps aux|grep kube----在master上://检查到 node01 节点的请求:[root@localhost kubeconfig]# kubectl get csrNAME                                                   AGE   REQUESTOR           CONDITIONnode-csr-M9Iv_3cKuOZaiKSvoQGIarJHOaK1S9FnRs6SGIXP9nk   5s    kubelet-bootstrap   Pending(意思:等待群集给该节点颁发证书)//接下来同意请求,颁发证书即可:[root@localhost kubeconfig]# kubectl certificate approve node-csr-M9Iv_3cKuOZaiKSvoQGIarJHOaK1S9FnRs6SGIXP9nk[root@localhost kubeconfig]# kubectl get csrNAME                                                   AGE    REQUESTOR           CONDITIONnode-csr-M9Iv_3cKuOZaiKSvoQGIarJHOaK1S9FnRs6SGIXP9nk   7m7s   kubelet-bootstrap   Approved,Issued(Approved,Issued:就表示已经被允许加入群集)//查看群集节点,成功加入 node01 节点:[root@localhost kubeconfig]# kubectl get nodeNAME              STATUS   ROLES    AGE    VERSION192.168.109.131   Ready       3m8s   v1.12.3----在 node01上操作,启动 proxy服务:[root@localhost ~]# bash proxy.sh 192.168.109.131[root@localhost ~]# systemctl status kube-proxy.service    //查看状态是否正常----部署 node02 :为了提高效率,我们将 node01上现成的 /opt/kubernetes目录复制到其他节点进行修改即可:[root@localhost ~]# scp -r /opt/kubernetes/ root@192.168.109.132:/opt///再把kubelet,kube-proxy的service文件拷贝到node2中[root@localhost ~]# scp /usr/lib/systemd/system/{kubelet,kube-proxy}.service root@192.168.109.132:/usr/lib/systemd/system/--接下来就是在 node02 节点上的操作://首先,先删除复制过来的证书,因为待会 node02 会自行申请属于自己的证书:[root@localhost ~]# cd /opt/kubernetes/ssl/[root@localhost ssl]# rm -rf *//修改配置文件 kubelet 、kubelet.config 、kube-proxy(三个配置文件)[root@localhost ssl]# cd /opt/kubernetes/cfg/[root@localhost cfg]# vim kubeletKUBELET_OPTS="--logtostderr=true \--v=4 \--hostname-override=192.168.109.132 \  ##改成自己的IP地址--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \--bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig \--config=/opt/kubernetes/cfg/kubelet.config \--cert-dir=/opt/kubernetes/ssl \--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"[root@localhost cfg]# vim kubelet.configkind: KubeletConfigurationapiVersion: kubelet.config.k8s.io/v1beta1address: 192.168.109.132   ##改成自己的IP地址port: 10250readOnlyPort: 10255cgroupDriver: cgroupfsclusterDNS:- 10.0.0.2clusterDomain: cluster.local.failSwapOn: falseauthentication:  anonymous:    enabled: true[root@localhost cfg]# vim kube-proxyKUBE_PROXY_OPTS="--logtostderr=true \--v=4 \--hostname-override=192.168.109.132 \   ##改成自己的IP地址--cluster-cidr=10.0.0.0/24 \--proxy-mode=ipvs \--kubeconfig=/opt/kubernetes/cfg/kube-proxy.kubeconfig"//启动服务:[root@localhost cfg]# systemctl start kubelet.service[root@localhost cfg]# systemctl start kube-proxy.service//和之前一样,在 master 上操作查看请求:[root@localhost kubeconfig]# kubectl get csrNAME                                                   AGE     REQUESTOR           CONDITIONnode-csr-M9Iv_3cKuOZaiKSvoQGIarJHOaK1S9FnRs6SGIXP9nk   29m     kubelet-bootstrap   Approved,Issuednode-csr-vOfkpLYSYqFtD__GgZZZiV7NU_WaqECDvBbFuGyckRc   2m21s   kubelet-bootstrap   Pending//接下来和刚刚一样,同意授权,颁发证书即可:[root@localhost kubeconfig]# kubectl certificate approve node-csr-vOfkpLYSYqFtD__GgZZZiV7NU_WaqECDvBbFuGyckRc//查看群集中的节点:[root@localhost kubeconfig]# kubectl get nodeNAME              STATUS   ROLES    AGE   VERSION192.168.109.131   Ready       34s   v1.12.3192.168.109.132   Ready       25m   v1.12.3


!!至此,我们一个单节点的 Master 部署就完成了,接下来是带来 多节点 Master部署


三、多 Master 节点部署:

多 Master节点集群图:

在有单 Master 节点部署环境的基础上,在部署一个 Master02 即可。

角色IP地址
master02192.168.109.230


-部署开始:


//首先关闭防火墙:[root@localhost ~]# systemctl stop firewalld.service [root@localhost ~]# setenforce 0//在 master01上,直接将 kubernetes目录拷贝到 master02上即可:[root@localhost kubeconfig]# scp -r /opt/kubernetes/ root@192.168.109.230:/opt//在复制 master01 上的三个组件启动脚本:kube-apiserver.service、kube-controller-manager.service、kube-scheduler.service  [root@localhost kubeconfig]# scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.220.129:/usr/lib/systemd/system///接下来,在 master02上,修改配置文件 kube-apiserver中的IP地址:[root@localhost cfg]# pwd/opt/kubernetes/cfg[root@localhost cfg]# vim kube-apiserver.(省略部分).--etcd-servers=https://192.168.109.138:2379,https://192.168.109.131:2379,https://192.168.109.132:2379 \--bind-address=192.168.109.230 \        ##改成自己的ip地址--secure-port=6443 \--advertise-address=192.168.109.230 \   ##改成自己的ip地址--allow-privileged=true \--service-cluster-ip-range=10.0.0.0/24 \.(省略部分).//拷贝 master01 上已有的 etcd 证书给 master02 使用:[root@localhost kubeconfig]# scp -r /opt/etcd/ root@192.168.109.230:/opt///接下来,启动 master02中的三个组件:[root@localhost cfg]# systemctl start kube-apiserver.service [root@localhost cfg]# systemctl start kube-controller-manager.service [root@localhost cfg]# systemctl start kube-scheduler.service //增加环境变量:[root@localhost cfg]# vim /etc/profile在末尾添加:export PATH=$PATH:/opt/kubernetes/bin/[root@localhost cfg]# source /etc/profile   //环境变量生效//master02 上查看节点情况(和 master01一模一样):[root@localhost cfg]# kubectl get nodeNAME              STATUS   ROLES    AGE   VERSION192.168.109.131   Ready       44m   v1.12.3192.168.109.132   Ready       70m   v1.12.3


0