k8s安装及升级

目录

使用 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

k8s安装及升级_第1张图片

修改 kubeadm的默认配置init-config.yaml

k8s安装及升级_第2张图片

k8s安装及升级_第3张图片

下载Kubernetes 的相关镜像

 k8s安装及升级_第4张图片

k8s安装及升级_第5张图片

 运行 kubeadm init 命令安装 Master 节点

准备工作

k8s安装及升级_第6张图片

另外, 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 命令行工具访问集群

k8s安装及升级_第7张图片

到此 Kubernetes aster 节点 经可 工作了, 但在集群内还是没有可用的 Worker node, 并缺乏容器网络的配置。

将新的 Node 加入集群

安装 kubeadm和kubelet (在 Node 上无须安装 kubectl)

k8s安装及升级_第8张图片

使用 kubeadm join命令加入集群

从安装 Master 点的成功提示内容中复制完整的命令
k8s安装及升级_第9张图片

k8s安装及升级_第10张图片

k8s安装及升级_第11张图片

k8s安装及升级_第12张图片

安装 CNI 网络插件

k8s安装及升级_第13张图片

验证kerbernetes集群是否工作正常

     k8s安装及升级_第14张图片

k8s安装及升级_第15张图片

 以二进制文件方式安装 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 所示

k8s安装及升级_第16张图片

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端口)
k8s安装及升级_第17张图片

相关安装包

k8s安装及升级_第18张图片

需要安装的组件

在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,配置如下:

k8s安装及升级_第19张图片

  

将三个节点的etcd注册为Systemd服务

k8s安装及升级_第20张图片

/etc/etcd/etcd.conf文件内容如下:

k8s安装及升级_第21张图片

 k8s安装及升级_第22张图片

 k8s安装及升级_第23张图片

部署master(即kube-apiserver)

利用ca.crt,为kube-apiserver签发服务端CA证书。

服务端证书文件:apiserver.key/apiserver.crt。

证书配置文件master_ssl.conf,配置如下:

k8s安装及升级_第24张图片

 将三个节点的apiserver注册为Systemd服务

k8s安装及升级_第25张图片

k8s安装及升级_第26张图片

参数说明: 

k8s安装及升级_第27张图片

 

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 通信。
k8s安装及升级_第28张图片

为api-server签发客户端CA证书

客户端证书文件:client.key/client.crt 

kube-controller-manager、 kube-scheduler、 kubelet、 kube-proxy 服务作为客户端连接 kube-apiserver 服务。
k8s安装及升级_第29张图片

创建客户端连接 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 证书等的相 关参数,示例如下:
k8s安装及升级_第30张图片

k8s安装及升级_第31张图片

部署 kube-controller-manager 版务 

kube-controller-manager注册为systemd服务

k8s安装及升级_第32张图片

k8s安装及升级_第33张图片

问题:是三个节点都部署kube-controller-manager吗?没有看到相互发现的配置,如何相互发现的?

 部署 kube-scheduler 服务

 注册为systemd服务

k8s安装及升级_第34张图片

k8s安装及升级_第35张图片

使用 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端口)
k8s安装及升级_第36张图片

HAProxy配置(haproxy.cfg

k8s安装及升级_第37张图片

k8s安装及升级_第38张图片

keepalived配置(keepalived.conf

 k8s安装及升级_第39张图片

 k8s安装及升级_第40张图片

 

Keepalived 需要持续监控 HAProxy 的运行状态 ,在某个 HAProxy  实例运行不正常时,
自动切换到运行正常的 HAProxy 实例上。需要 创建一个 HAProxy 健康检查脚本 ,定 期运
行该脚本进行监控,例如新建脚本 check-haproxy.sh 并将其保存到 usr/bin  目录下,内容示
例如下:

 k8s安装及升级_第41张图片

若检查成功 则应返回 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 地址。
k8s安装及升级_第42张图片

-----------部署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。

k8s安装及升级_第43张图片

  k8s安装及升级_第44张图片 

部署kube-proxy

 注册为systemd服务

k8s安装及升级_第45张图片

k8s安装及升级_第46张图片

在Master 上通过 kubectl 验证 Node 信患 

 k8s安装及升级_第47张图片

 k8s安装及升级_第48张图片

部署CNI网络插件--docker

部署DNS插件

私有镜像库的相关配置

Kube rnete 集群中,容器应用都是基于镜像启动的 在私有云环境中建议搭建私有 镜像库对镜像进行统一管理,在公有云环境 可以直接使用云服务商提供的镜像库。
有镜像库有两种选择:
  1. Docker 提供的 Registry 镜像库,详细说明请 考官网的说明
  2. ​​​​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 的版本升级

二进制文件升级

k8s安装及升级_第49张图片

        

 使用 kubeadm 进行集群升级

升级master节点

k8s安装及升级_第50张图片

k8s安装及升级_第51张图片

升级Node节点

 k8s安装及升级_第52张图片

你可能感兴趣的:(k8s,kubernetes,容器,云原生)