Kubernetes集群部署教程二·Master节点

Kubernetes(k8s)是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理,具备可移植、可扩展、自动化等特点。

本系列教程讲述在CentOS7系统中k8s集群的部署过程,本节内容重点讲述如何部署master节点。

核心组件介绍

名称 介绍
kube-apiserver Kubernetes API,集群的统一稿,各组件协调者,以 HTTP API 提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给etcd存储。
kube-controller-manager 处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。
kube-scheduler 根据调度算法为新创建的Pod选择一个Node节点。

配置Mater环境

0x01 安装应用包

在Master上安装以下应用包:

0x02 检查cgroup

以下三个方法中任选一个,不管用systemd还是cgroupfs,统一即可。

方法1

/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf加入参数:

方法2(推荐)

/usr/lib/systemd/system/docker.service的ExecStart=/usr/bin/dockerd行末添加参数:

方法3

编辑文件/etc/docker/daemon.json

统一cgroup后重启服务:

配置Master节点

1x01 配置高可用

安装haproxy和keepalived:

修改haproxy配置/etc/haproxy/haproxy.cfg

编辑守护脚本/etc/keepalived/check_apiserver.sh

修改keepalived(MASTER)配置/etc/keepalived/keepalived.conf

修改keepalived(BACKUP)配置/etc/keepalived/keepalived.conf

启动haproxy和keepalived:

1x02 导入配置镜像文件

使用“kubeadm config images list”命令查看需要拉取的镜像:

  • k8s.gcr.io/kube-apiserver:v1.19.2
  • k8s.gcr.io/kube-controller-manager:v1.19.2
  • k8s.gcr.io/kube-scheduler:v1.19.2
  • k8s.gcr.io/kube-proxy:v1.19.2
  • k8s.gcr.io/pause:3.2
  • k8s.gcr.io/etcd:3.4.13-0
  • k8s.gcr.io/coredns:1.7.0

因为某些原因,国内无法访问国外的某些资源,这里我们改用阿里云的镜像服务器,使用以下脚本拉取镜像并贴上标签(根据需要拉取的镜像修改):

1x03 初始化master节点

切记!仅首master节点需要初始化,备用master节点跳过此步骤:

如果初始化顺利,则会显示如下日志信息,提示如何添加master/worker节点:

如果 kubeadm init ... 执行失败,必须通过以下命令重置,然后重新操作:

附:kubeadm ini 参数说明

参数 说明
--apiserver-advertise-address API Server 将要广播的监听地址
--apiserver-bind-port API Server 绑定的端口,默认“6443”
--apiserver-cert-extra-sans 可选的额外提供的证书主题别名(SANs)用于指定API Server的服务器证书
--cert-dir 证书的存储路径,默认“/etc/kubernetes/pki”
--config kubeadm配置文件的路径
--cri-socket 要连接的 CRI socket 文件,默认“/var/run/dockershim.sock”
--dry-run 只输出将要执行的操作,不应用任何改变
--feature-gates 键值对的集合,用来控制各种功能的开关,默认“Auditing=false, CoreDNS=true, DynamicKubeletConfig=false”
-h, --help 获取init命令的帮助信息
--ignore-preflight-errors 忽视检查项错误列表,列表中的每一个检查项如发生错误将被展示输出为警告,而非错误
--kubernetes-version 为 control plane 选择一个特定的Kubernetes版本,默认“stable-1”
--node-name 指定节点的名称
--pod-network-cidr 指明pod网络可以使用的IP地址段
--service-cidr 为service的虚拟IP地址另外指定IP地址段,默认“10.96.0.0/12”
--service-dns-domain 为services另外指定域名,默认“cluster.local”
--skip-token-print 不打印出由 kubeadm init 命令生成的默认令牌
--token 这个令牌用于建立主从节点间的双向受信链接
--token-ttl 令牌被自动删除前的可用时长,设置为 '0', 令牌将永不过期,默认“24h0m0s”

1x04 配置kubectl

备用master节点跳过此步骤。

1x05 配置网络

备用master节点加入集群前无法操作。

方案1:采用flannel (推荐)

方案2:采用calico

1x06 验证master

备用master节点加入集群前无法操作。

此时发现controller-manager和scheduler的状态是“Unhealthy”,修改它们的配置文件,去掉配置中的“--port=0”,然后重启kubelet:

继续检验master健康状态:

使Master参与Pod调度

备用master节点加入集群前无法操作。

配置Master集群

2x01 在首master节点操作

在首master节点验证证书有效时间(notBefore为生效时间/notAfter为失效时间):

先做免密:

编辑脚本,将master证书拷贝到备用节点:

2x02 在备用master节点操作

创建证书目录:

依次将首master节点复制过来的证书移至对应的目录中,并使配置生效:

然后执行以下命令加入集群:

原创文章禁止转载:技术学堂 » Kubernetes集群部署教程二·Master节点

精彩评论

2+2=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏