目录
使用 kubeadm 工具快速安装 Kubernetes 集群
安装cubeadm
修改 kubeadm的默认配置init-config.yaml
下载Kubernetes 的相关镜像
运行 kubeadm init 命令安装 Master 节点
准备工作
使用init-config.yaml配置一键安装master节点
使用cubectl 命令行工具访问集群
将新的 Node 加入集群
安装 kubeadm和kubelet (在 Node 上无须安装 kubectl)
使用 kubeadm join命令加入集群
安装 CNI 网络插件
验证kerbernetes集群是否工作正常
以二进制文件方式安装 Kuernetes 安全高可用集群
集群架构
相关安装包
需要安装的组件
-------------部署master节点------------
CA根证书
部署ETCD集群
下载etcd安装包,注册systemd服务
利用CA根证书,为etcd签发服务端和客户端CA证书
将三个节点的etcd注册为Systemd服务
部署master(即kube-apiserver)
利用ca.crt,为kube-apiserver签发服务端CA证书。
将三个节点的apiserver注册为Systemd服务
kube-apiserver基于 token 的认证机制
为api-server签发客户端CA证书
创建客户端连接 kube-apiserver 服务所需的 kubeconfig 配置文件
部署 kube-controller-manager 版务
将kube-controller-manager注册为systemd服务
部署 kube-scheduler 服务
注册为systemd服务
使用 HAPproxy和 keepalived 部署高可用负载均衡器
HAProxy配置(haproxy.cfg)
keepalived配置(keepalived.conf)
验证keepalive是否部署成功
-----------部署Node节点----------------
部署kubelet
部署kube-proxy
在Master 上通过 kubectl 验证 Node 信患
部署CNI网络插件--docker
部署DNS插件
私有镜像库的相关配置
Kubernetes 的版本升级
二进制文件升级
使用 kubeadm 进行集群升级
升级master节点
升级Node节点
使用 kubeadm 工具快速安装 Kubernetes 集群
安装cubeadm
修改 kubeadm的默认配置init-config.yaml
下载Kubernetes 的相关镜像
运行 kubeadm init 命令安装 Master 节点
准备工作
另外, Kubemetes 默认设置 cgroup 驱动 (cgroupdriver) 为“systemd" ,而 Docker 服务的 cgroup 驱动默认值为 “cgroupfs" ,建议将其修改为 “systemd" ,与 Kubemetes 保持一致。这可以通过修改 docker 服务的配置文件(默认为/et ocker/daemon.json) 进行设置
{
" exec - opts ": [ " native. cgroupdriver=systemd "]
}
使用init-config.yaml配置一键安装master节点
准备工作就绪之后 以运行 kubeadm init 命令,使用之前创建的配置文件一键安 Maste 节点(控制平面)了:
# kubeadm init --config=init-config.yaml
使用cubectl 命令行工具访问集群
到此 Kubernetes aster 节点 经可 工作了, 但在集群内还是没有可用的 Worker node, 并缺乏容器网络的配置。
将新的 Node 加入集群
安装 kubeadm和kubelet (在 Node 上无须安装 kubectl)
使用 kubeadm join命令加入集群
从安装 Master 点的成功提示内容中复制完整的命令
安装 CNI 网络插件
验证kerbernetes集群是否工作正常
以二进制文件方式安装 Kuernetes 安全高可用集群
通过 kubeadm 能够快速部署一个 Kubern tes 集群,但是如果需要精细调整 Kubernetes 各组件服务的参数及安全设置、高可用模式等,管理员就可以使用 Kubernetes 二进制文件 进行部署。
本节基于 Kubernetes 19 版本,以 二进制文件方式 对如何配置 、部署一个启 用了安全机制、 节点高可用的 Kubernetes 集群进行说明 。对于 测试环境 可以适当进行简化,将 某些组件部署为单点。
集群架构
在正式环境中应确保 Master 的高可用,并启用安全访问机制,至少包括以下几方面。
- Master的 kube-apiserve、 kube-controller-manager和 kube-scheduler 服务至少以3个节点的多实例方式部署。
- Master 启用基于CA认证的 HTTPS 安全机制。
- etcd 至少以 3个节点的集群模式部署
- etcd 集群启用基于 CA 认证的 HTTPS 安全机制
- Master 启用 RBAC 授权模式(详见 6.2 节的说明)
Master 的高可用部署架构如图 2.1 所示
Master 的3个节点之前,应通过 个负载均衡器提供对客户端的唯 访问人口地 址,负载均衡器可以选择硬件或者软件进行搭建 软件负载均衡器可以选择的方案较多, 本文以 HAProxy 搭配 Keepalived 为例进行说明。
本例中 台主机的 IP 地址分别为 192.168.18.3、192.168.18.4、192.168.18.5, 负载均衡器使用的 VIP 192.168.18.100。
下面分别对 etcd 、负载均衡器、 Master Node 等组件如何进行高可用部署、关键配置、
CA 证书配置等进行详细说明。
ETCD
部署在三个节点上。
etcd服务端监听端口:2379
etcd集群成员之间通信端口:2380
在每个节点的etcd配置文件中,都配置了三个节点的地址,用于etcd集群之间的服务发现。
ETCD_INITIAL_CLUSTER=" etcdl=https: //192.168.18.3:2360,etcd2=https://192.168.8.4:2380,etcd3=https://192.168.18.5:2380"
master(即api-server)
三个节点的dns名称及IP地址:k8s-1(192.168.18.3)、k8s-2(192.168.18.4)、k8s-3(192.168.18.5)
三个节点的api-server服务地址:https://192.168.18.3:6443,https://192.168.18.4:6443,https://192.168.18.5:6443
或 https://k8s-1:6443,https://k8s-2:6443,https://k8s-3:6443
负载均衡器服务地址:https://192.168.18.100:9443。kube-controller-manager、kube-scheduler、kubelet、kube-proxy 服务作为客户端,通过该地址访问master(kube-apiserver) 服务。
master服务的DNS名称:kerbernetes、kerbernetes.default、kerbernetes.default.svc、kerbernetes.default.svc.cluster.local
master服务的Cluster IP地址:169.169.0.1
api-server要访问etcd,因此配置api-server时,要配置etcd的三个服务地址、etcd的客户端证书:
-- --etcd-servers=https://192.168.18.3:2379, https://192.168.18.4:2379, https://192.168.18.5:2379
--e tcd-cert file=/etc/e cd/pki/etcd_clie nt.crt \
--etcd-key le=/etc/etcd/pki/etcd_client.key \
--se rvice -cluster-ip-range=l 69 . 169. 0.0/16 \
controller-manager
是部署在三个节点上吗?三个节点之间的服务发现如何实现?配置中没有看到类似etcd的服务发现配置。
cube-scheduler
是部署在三个节点上吗?三个节点之间的服务发现如何实现?配置中没有看到类似etcd的服务发现配置。
HAProxy和keepalived
部署在192.168.18.3和192.168.18.4上,形成HA方案。
使用192.168.18.100作为master(即api-server)服务的负载均衡地址,后端分流到后端三个api-server的实际地址(192.168.18.3、192.168.18.4和192.168.18.5的6443端口)
相关安装包
需要安装的组件
在Kubemetes Master 节点上需要部署的服务包括 etcd、kube-apiserver、kube-controller-manager 和kube-scheduler。
在工作节点 (Worker Node )上需要部署的服务包括 docker、kubelet、kube-proxy。
-------------部署master节点------------
CA根证书
ca.key ca.crt
部署ETCD集群
下载etcd安装包,注册systemd服务
利用CA根证书,为etcd签发服务端和客户端CA证书
api-server要连接etcd,需要客户端证书。
CA证书的subjectAltname参数包含三个etcd服务器的IP地址
etcd_server.key/etcd_server.crt、etc_client.key/etc_client.crt
证书配置文件etcd_ssl.conf,配置如下:
将三个节点的etcd注册为Systemd服务
/etc/etcd/etcd.conf文件内容如下:
部署master(即kube-apiserver)
利用ca.crt,为kube-apiserver签发服务端CA证书。
服务端证书文件:apiserver.key/apiserver.crt。
证书配置文件master_ssl.conf,配置如下:
将三个节点的apiserver注册为Systemd服务
参数说明:
kube-apiserver基于 token 的认证机制
Kubernetes 除了提供了基于 CA 证书的认证方式,也提供了基 HTTP Token 的简单 认证方式。各客户端组件与 API Server 之间的通信方式仍然采用 HTTP S, 但不采用 CA数 字证书。这种认证机制与 CA 证书相比,安全性很低 在生产环境不建议使用。
采用基千 HTTP Token 的简单认证方式时, API Serve 对外暴露 HTT PS 端口 客户端 携带 To ken 来完成认证过 。需要说明的是, kubectl 命令行工具比较特殊,它同时支持CA证书 和简单认证两种方式与API Server 通信, 其他客户端组件只能配置基于 CA 证书的认证方式或者非安全方式与API Server 通信。
为api-server签发客户端CA证书
客户端证书文件:client.key/client.crt
kube-controller-manager、 kube-scheduler、 kubelet、 kube-proxy 服务作为客户端连接 kube-apiserver 服务。
创建客户端连接 kube-apiserver 服务所需的 kubeconfig 配置文件
为 kube- con troller- manager、cub e-sche duler、 kubelet、 kube-proxy 统一创建 cubecon fig 文件作为连接 cube- api se rv er 服务的配置文件,后续也作为 kubectl命令行 工具连接 ku be-apiserver 服务的配置文件。
在 cubecon fig 文件中主要设置访问 kube-apiserver URL 地址及所需的 CA 证书等的相 关参数,示例如下:
部署 kube-controller-manager 版务
将kube-controller-manager注册为systemd服务
问题:是三个节点都部署kube-controller-manager吗?没有看到相互发现的配置,如何相互发现的?
部署 kube-scheduler 服务
注册为systemd服务
使用 HAPproxy和 keepalived 部署高可用负载均衡器
部署在192.168.18.3和192.168.18.4上,形成HA方案。
使用192.168.18.100作为master(即api-server)服务的负载均衡地址,后端分流到后端三个api-server的实际地址(192.168.18.3、192.168.18.4和192.168.18.5的6443端口)
HAProxy配置(haproxy.cfg)
keepalived配置(keepalived.conf)
Keepalived 需要持续监控 HAProxy 的运行状态 ,在某个 HAProxy 实例运行不正常时,
自动切换到运行正常的 HAProxy 实例上。需要 创建一个 HAProxy 健康检查脚本 ,定 期运
行该脚本进行监控,例如新建脚本 check-haproxy.sh 并将其保存到 usr/bin 目录下,内容示
例如下:
若检查成功 则应返回 0 ; 若检查失败,则返回非0。 k eepa li ved 根据上面的配置, 会每隔2秒 检查一次 HAProxy 运行状态。例如,如果在 192 168 8.3 上检查失败, keepalived 就会将 VIP 地址切换到正常运行 HAProxy 192.168.18.4 服务器上,保证 VIP 192.168 18.100 地址的 高可用。
在运行正常的情况下, keepalived 会在服务器 192.168 18.3 的网卡 ens33 上设置 192.168.18 100的 IP 地址,同样在服务器 192. 68.18.3 上运行的 HAProxy 将在该 IP 地址上监听 9443 端口号,对需要访问 Kubernetes Maste 的客户端提供负载均衡器的入口地址,即192.168.18.100:9443
验证keepalive是否部署成功
通过 ip addr 令查看 服务器 192.168. 8.3 地址信息,可以 看到在 ns33 卡上 新增了 192. 168.18.100 地址。
-----------部署Node节点----------------
Node 需要部署 docker、 kubelet、 kube-proxy, 在成功加入 Kubernetes 集群后 还需要部署 CNI 络插件、DNS 插件等管理组件。 Docker 的安装和启动详见 Docker 官网 的说明文档 本节主要对如何部署 kubelet、kube-proxy 进行说明 CNI 网络插件的安装部署详见7 .7 节的说明, DNS 插件的安装部署详见 4.3 节的说明。
部署kubelet
将 192.168. 18 .3 192.168 .18.4 192.168 18.5 三台主机部署为 Node。
部署kube-proxy
注册为systemd服务
在Master 上通过 kubectl 验证 Node 信患
部署CNI网络插件--docker
部署DNS插件
私有镜像库的相关配置
Kube rnete 集群中,容器应用都是基于镜像启动的 在私有云环境中建议搭建私有 镜像库对镜像进行统一管理,在公有云环境 可以直接使用云服务商提供的镜像库。
有镜像库有两种选择:
- Docker 提供的 Registry 镜像库,详细说明请 考官网的说明
- Harbor 镜像仓库 详细说明请参考官网的说明或者 Harbor 项目维护者及贡献者 《Harbor 权威指南 》一 书。
此外, Kubernetes 对于创建 Pod 需要使用 个名为 “pause" 的镜像, tag 名为 "k8s.gcr. io/pause: 3.2" ,默认从镜像库 k8s.gcr io 下载,在私有云环境中可以将其上传到私 有镜像库,并修改kubelet 的启动参数--pod-infra-container-image, 将其设置为使用镜像库 的镜像名称,例如: --pod-infra-container-image=<my-privat e-regi st ry>/pause:3.2
Kubernetes 的版本升级
二进制文件升级
使用 kubeadm 进行集群升级
升级master节点
升级Node节点