阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Kubernetes集群的部署方式及详细步骤

186次阅读
没有评论

共计 6810 个字符,预计需要花费 18 分钟才能阅读完成。

一、部署环境架构以及方式

Kubernetes 集群的部署方式及详细步骤

第一种部署方式

1、针对于 master 节点

将 API Server、etcd、controller-manager、scheduler 各组件进行 yum install、编译安装或者展开安装的方式手动直接安装在 master 节点主机上,作为系统级守护进程运行。

2、针对于 node 节点

将 kube-proxy、kubelet、docker、flannel 各组件进行 yum install 或下载已预制好的二进制程序包手动安装在 node 节点主机上,作为系统级守护进程运行。

此部署方式非常的繁琐,出于安全方面的考虑,各组件之间通信都需要配置 CA 和证书。

注:此部署方式的缺点就是如果 master 宕机了,需要手动进行启动这些系统级的守护进程

第二种部署方式

由于第一种部署方式比较繁琐,此次我们采用 kubeadm 工具进行部署,由 k8s 官方所提供的专门部署集群的管理工具。

每一个节点主机上包括 master 节点都要手动安装并运行 docker,同时也都要手动安装并运行 kubelet。如果将第一个节点初始化为 master 节点,在执行初始化这个步骤,其实就是通过 kubeadm 工具将 API Server、etcd、controller-manager、scheduler 各组件运行为 Pod,也就是跑在 docker 上。而其他 node 节点,因已经运行了 kubelet、docker 组件,剩下的 kube-proxy 组件也是要运行在 Pod 上。

kubelet:负责能运行 Pod 化容器的核心组件

docker:运行容器的引擎

但是以上 master 节点上的 Pod 都是静态 Pod(static Pod),并不受 k8s 自身管理,只是运行为 Pod 形式而已,也可运行为自托管 Pod(本文不作阐述)。

Kubernetes 集群的部署方式及详细步骤

而 flannel 组件也是运行在 Pod 上的系统级守护进程,起到各 node 节点通信作用。以下是 flannel 简单介绍:

https://www.linuxidc.com/Linux/2019-08/159869.htm

3、kubeadm 的介绍

在 GitHub 上 kubeadm 的介绍:

https://github.com/kubernetes/kubeadm

二、Kubernetes 集群的部署详细步骤

(一)简述部署流程

1、master、nodes 节点要先安装 kubelet、kubeadm 和 docker

2、在 master 节点上运行 kubeadm init 进程进行初始化集群

3、将各 node 节点加入集群中:kubeadm join

kubeadm 工作原理详解见:https://github.com/kubernetes/kubeadm/blob/master/docs/design/design_v1.10.md(此文档介绍的是 k8s1.10 版本)

(二)部署流程的详细介绍

(1)master 节点环境安装的准备工作

1、确保集群中的所有节点,服务器时间是同步的。设置详情如下:

https://www.cnblogs.com/huhyoung/p/9657253.html

2、公司内部局域网的服务器可配置 hosts 文件进行域名解析,例如马哥视频中的:

Kubernetes 集群的部署方式及详细步骤

而云服务器需要另外考虑

注:阿里云服务器切记不要修改 hostname

3、关闭防火墙服务

需要注意的是,CentOS Linux 7 默认启动了 firewalld(防火墙服务),而 Kubernetes 的 master 与工作 node 之间会有大量的网络通信,安全的做法是在防火墙上配置各组件需要相互通信的端口号。在一个安全的内部网络环境中可以关闭防火墙服务:

[root@master ~]# systemctl disable firewalld
[root@master ~]# systemctl stop firewalld

4、获取软件包

第一种部署方式获取软件包

源码包获取地址:https://github.com/kubernetes/kubernetes/releases

Kubernetes 集群的部署方式及详细步骤

图中红色框的为源码包,而 kubernetes.tar.gz 不是源码包,但包含所需的所有组件。建议下载官方预制好的,master、node 相关组件分别分开组建的包,点击 CHANGELOG-1.11.md

Kubernetes 集群的部署方式及详细步骤

点击目录 Downloads for v1.11.3 跳转到

Kubernetes 集群的部署方式及详细步骤

不管是 master 和 node 都应该安装服务端安装包,像图中的 kubernetes-server-linux-amd64.tar.gz 包,如果要进行交互,则需要安装客户端

第二种部署方式获取软件包

如果是 Cent OS,建议使用 yum install 安装,Google 官方已经将这些组件制作成了 RPM 包,这些包需要 RPM 包生成器动态生成,所以不能下载到本地使用,只能通过在线仓库进行安装。

(2)master 节点环境的安装

1、配置 yum 仓库

先安装 docker 镜像,去阿里云官方镜像网站:https://opsx.alibaba.com/mirror 找到 docker-ce 对应的 linux centos 系统 repo 配置文件,右击复制链接

Kubernetes 集群的部署方式及详细步骤

然后进入 /etc/yum.repos.d 目录,下载到本地。

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Kubernetes 集群的部署方式及详细步骤

接着再生成 Kubernetes 的仓库文件,创建并编辑 kubernetes.repo。

[root@master yum.repos.d]# vim kubernetes.repo

写入以下内容,baseurl 和 gpgkey 的路径可在阿里云官方镜像网站 Kubernetes 目录下找到。

Kubernetes 集群的部署方式及详细步骤

 

[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1

 Kubernetes 集群的部署方式及详细步骤

创建完之后,获取当前系统有效的repolist 

[root@master yum.repos.d]# yum repolist

Kubernetes 集群的部署方式及详细步骤

为了方便在 node 节点上安装,可以将这个两个配置文件通过 scp 命令复制到 node 节点服务器上

[root@master yum.repos.d]# scp kubernetes.repo docker-ce.repo node1:/etc/yum.repos.d/

2、安装各组件

kuberctl:API Server 的命令行客户端

[root@master yum.repos.d]# yum install docker-ce kubelet kubeadm kubectl

可以看到加载到的是哪些版本的包

Kubernetes 集群的部署方式及详细步骤

安装到 cri-tools-1.11.1-0.x86_64 包时提示 gpgkey 没有安装

Kubernetes 集群的部署方式及详细步骤

将 yum-key.gpg 下载到本地进行 rpm –import 导入

Kubernetes 集群的部署方式及详细步骤

发现还是报同样的错,于是顺便也把 rpm 包的 key 也下载下来进行导入

wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

Kubernetes 集群的部署方式及详细步骤

Kubernetes 集群的部署方式及详细步骤

最后,都安装成功了。

3、启动 docker

启动 docker 后,需要注意的是它会去 docker 仓库下载所依赖到的每个镜像文件,这些镜像文件暂时获取不到,建议将相关镜像文件通过其他途径下载到本地然后导入使用,或者推送到本地仓库。

在这里我们是借用别人此前提供的一种路径来获取并下载使用,因此在启动之前,需要编辑 vim /usr/lib/systemd/system/docker.service,在该文件中定义一个环境变量

Kubernetes 集群的部署方式及详细步骤

注意 NO_PROXY 中间是有下划线的。然后修改完配置文件之后需要重新加载配置文件,然后重新启动,否则修改不会生效。

[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl start docker

Kubernetes 集群的部署方式及详细步骤

是否启动成功用 docker info 查看一下,可以看出已经启动成功了

Kubernetes 集群的部署方式及详细步骤

同时还要确保以下两个参数值为 1。通过网桥转发的 IP 数据包会 iptables 规则过滤,而这两个选项将阻止过滤 Netfilter 是默认情况下启用了桥梁,如果不阻止会导致严重的混乱

Kubernetes 集群的部署方式及详细步骤

如果不是 1 需要修改为 1

echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

通过[root@master ~]# rpm -ql kubelet  命令查看都安装了什么文件

 Kubernetes 集群的部署方式及详细步骤

查看配置文件发现额外参数是空的

Kubernetes 集群的部署方式及详细步骤

4、设置 kubelet、docker 为开机启动

[root@master ~]# systemctl start kubelet
[root@master ~]# systemctl status kubelet

Kubernetes 集群的部署方式及详细步骤

这边没有明显的错误提示,因此查看日志[root@master ~]# tail /var/log/messages

Kubernetes 集群的部署方式及详细步骤

[root@master ~]# systemctl stop kubelet        #将 kubelet 关闭

因各个组件还未初始化完成所以不能启动,将其设置开机启动即可

[root@master ~]# systemctl enable kubelet    #将其设置为开机启动

[root@master ~]# systemctl enable docker    #将 docker 设置为开机启动

Kubernetes 集群的部署方式及详细步骤

5、kubeadm init 初始化

查看 kubeadm init 的帮助信息 

[root@master ~]# kubeadm init –help

Kubernetes 集群的部署方式及详细步骤

–apiserver-advertise-address:API 服务器将通知它正在监听的 IP 地址,监听的地址为“0.0.0.0”,即本机所有 IP 地址。

–apiserver-bind-port:API 服务器绑定到的端口。(默认:6443)

–cert-dir:加载证书的相关目录(默认:/etc/kubernetes/pki)

–config:配置文件的路径。警告: 配置文件目前属于实验性,还不稳定。

–ignore-preflight-errors:将错误显示为警告的检查列表进行忽略。例如:“IsPrivilegedUser,Swp”。Value ‘all’ 忽略所有检查中的错误。

–pod-network-cidr:指定 pod 网络的 IP 地址范围。如果设置,控制平面将为每个节点自动分配 CIDRs。

–service-cidr:为 service VIPs 使用不同的 IP 地址。(默认“10.96.0.0/12”)

然后我们指定选项进行初始化:

[root@master ~]# kubeadm init –kubernetes-version=v1.11.1 –pod-network-cidr=10.244.0.0/16 –service-cidr=10.96.0.0/12

Kubernetes 集群的部署方式及详细步骤

Kubernetes 集群的部署方式及详细步骤

如果在初始化中碰到 swap 不支持的报错,如下图

Kubernetes 集群的部署方式及详细步骤

需要做两个设定

①[root@master ~]# vim /etc/sysconfig/kubelet        #加入以下参数

KUBELET_EXTRA_ARGS=”–fail-swap-on=false”

Kubernetes 集群的部署方式及详细步骤

②[root@master ~]# kubeadm init –kubernetes-version=v1.11.1 –pod-network-cidr=10.244.0.0/16 –service-cidr=10.96.0.0/12 –ignore-preflight-errors=Swap   #在初始化时加入 –ignore 选项

最后通过[root@master ~]# docker image ls 查看镜像都拉取完了

Kubernetes 集群的部署方式及详细步骤

其中 k8s.gcr.io/pause 就是基础架构容器,可以不用启动,其他容器可以将它当成模板进行网络、存储卷复制。

特别注意:

其中有两个附件:CoreDNS 和 kube-proxy

CoreDNS:CoreDNS 已经经历过三个版本:sky-dns()—–>kube-dns(1.3 版本)—–>CoreDNS(1.11 版本)

kube-proxy:作为附件运行自托管与 k8s 之上,来帮忙负责生成 service 资源相关的 iptables 或者 ipvs 规则,在 1.11 版本默认使用 ipvs。

6、创建 kube 目录,添加 kubectl 配置

建议用普通用户运行以下三个命令:

mkdir -p $HOME/.kube;

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config;

sudo chown $(id -u):$(id -g) $HOME/.kube/config

Kubernetes 集群的部署方式及详细步骤

因不是生产环境,所以此处直接用 root 权限执行,第三步更改属主和属组也不需要操作

还未执行以上三个命令时,查看 nodes 节点是会报以下错误:

Kubernetes 集群的部署方式及详细步骤

执行完之后,再查看 nodes 节点时,结果如下:

Kubernetes 集群的部署方式及详细步骤

可以看出 master 的状态是未就绪(NotReady),之所以是这种状态是因为还缺少一个附件 flannel 或者 Calico,没有网络各 Pod 是无法通信的。

也可以通过检查组件的健康状态

[root@master ~]# kubectl get componentstatus      #componentstatus 可简写为 cs

Kubernetes 集群的部署方式及详细步骤

7、添加网络组件(flannel)

 组件 flannel 可以通过 https://github.com/coreos/flannel 中获取,此处也有介绍怎么安装

Kubernetes 集群的部署方式及详细步骤

如果 Kubernetes 版本是 1.7 以上执行这行命令即可,在线自动获取部署清单,然后基于此清单下载镜像启动并部署

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Kubernetes 集群的部署方式及详细步骤

看到很多东西被创建是还不够的,还需要查看 flannel 是否处于正常启动并运行的状态,才算正在的部署完成

[root@node1 ~]# docker image ls           #查看 flannel 镜像是否有被拉取下来

可以看到 flannel 镜像已经下载下来了

Kubernetes 集群的部署方式及详细步骤

注意:从这步开始我用的版本是 v1.11.2,由于代理到期,导致之前的镜像下载不到重新换了途径下载,所以你们 kubeadm init 初始化时记得对应上版本。

[root@node1 ~]# kubectl get pods –all-namespaces       #查看所有名称空间的 pod,同时可以看到 flannel 已经正常启动

[root@node1 ~]# kubectl get pods -n kube-system          #查看名称空间为 kube-system 的 pod

Kubernetes 集群的部署方式及详细步骤

[root@localhost ~]# kubectl get ns    #查看有哪些名称空间

系统级别的 Pod 都在名称空间 kube-system 中

Kubernetes 集群的部署方式及详细步骤

这样我们的 master 节点就部署好了

8、

(3)node 节点环境的安装

[root@node01 ~]# rpm –import rpm-package-key.gpg

[root@node01 ~]# yum install -y docker-ce kubelet kubeadm

[root@master ~]# scp /usr/lib/systemd/system/docker.service node01:/usr/lib/systemd/system/docker.service

[root@master ~]# scp /etc/sysconfig/kubelet node01://etc/sysconfig/

[root@node01 ~]# systemctl daemon-reload

[root@node01 ~]# systemctl start docker

[root@node01 ~]# systemctl enble docker kubelet

[root@node01 ~]# kubeadm join 172.20.0.70:6443 –token jpy0lt.fxz77am8dgr4r93f –discovery-token-ca-cert-hash sha256:70b67aa60ebb2eef3e3e4f76e5278fc23e6972c1c4e0848d744b93caa6f9b6ec –ignore-preflight-errors=Swap

加入成功之后,等以下镜像下载完之后这个 node 节点就 ok 了。

Kubernetes 集群的部署方式及详细步骤

可以通过 kubectl get pods -n kube-system -o wide 查看 flannel 和 proxy 有两个,一个在 master 节点上,一个在 node01 节点上。

Kubernetes 集群的部署方式及详细步骤

 Kubernetes 集群的部署方式及详细步骤

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计6810字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中