本文介绍的部署过程主要是为了让读者能够理解 K8S 的运行原理,为了简化流程,这里不涉及高可用、高性能等解决方案。

安装说明:
- 本文仅仅是在两个节点上部署所有的组件,如图所示包括 MASTER 和 NODE
- 所有的组件都安装在 /opt/{component} 的根目录下,包括二进制文件和配置文件
- 另外组件进程由 systemd 来管理,其配置文件在 /etc/systemd/system/{component}.service
本文所有的安装代码已经放在 https://github.com/bilc/kubernetes-deploy,供大家参考。
1.前期准备
配置环境变量文件 environment,如下,只修改 MASTER_IP 和 NODE_IP 即可。
export MASTER_IP=10.1.0.86
export NODE_IP=10.1.0.87
#service
export SERVICE_CIDR="10.254.0.0/16" #service使用的虚拟IP
export CLUSTER_KUBERNETES_SVC_IP="10.254.0.1" #apiserver的service,会被pod访问
export NODE_PORT_RANGE="30000-32767" #nodeport类型的service分配的端口
#for coredns & kubelet
export CLUSTER_DNS_DOMAIN="cluster.local" #域名后缀
export CLUSTER_DNS_SVC_IP="10.254.0.2" #dnsserver地址
#pod
export CLUSTER_CIDR="172.30.0.0/16" #pod网络分配的地址段
主要需要配置免密登录和下载二进制文件,这里的 download.sh 下载的文件可能需要翻墙解决。
ssh-keygen #生成免密登录的公私钥
. envrionment
./ssh-nopwd.sh #设置免密登录
cd cert
./download.sh #这里需要自行翻墙解决
./install.sh #在目标机上创建目录和上传文件
cd -
2.证书生成
首先介绍一下证书文件类型:
- ca.pem, ca-key.pem:证书颁发机构自己的证书和私钥
- *.pem, *-key.pem:该模块的证书和私钥
- *.kubeconfig:访问 K8S 的配置文件,内部包括集群的 apiserver、ca、自己的证书和私钥,作用等同配置单独公私钥等参数。
在签发证书时,注意作为被访问节点时,需要将自己被访问所有入口 IP 和域名都放到证书 hosts 字段。

生成证书的示例如下:

所有执行命令执行如下:
. environment
cd cert
. ./install.sh
cd -
3.部署ETCD
生产环境的 etcd 需要部署三节点或者五节点,这里为了节省资源和方便部署,只部署单节点即可。
4.部署MASTER
这里不一一列举所有参数意义,如果需要可以参考官网,几个重点参数如下:
部署 kube-apiserver 主要的参数除了一些证书配置,还包括:
–service-cluster-ip-range=SERVICECIDRservice分配IP的范围−−service−node−port−range={SERVICE_CIDR} \\ service 分配 IP 的范围 --service-node-port-range=SERVICECIDRservice分配IP的范围−−service−node−port−range={NODE_PORT_RANGE} \ Nodeport 分配端口
kube-controller-manager 的重点参数:
–allocate-node-cidrs=true \ 为 node 上的 pod 分配 IP 段
–cluster-cidr=${CLUSTER_CIDR} \ pod 总的 IP 段
–service-cluster-ip-range=${SERVICE_CIDR} \ service 的 IP 范围
kube-scheduler 会主动连接 apiserver 并 watch 相关事件
. environment
cd master
./kube-apiserver.sh
./kube-controller-manager.sh
./kube-scheduler.sh
cd -
5.部署NODE
node 上主要包括 kubelet ,kube-proxy 和容器服务。
其中容器服务相关的标准有 CRI 和 OCI :
- CRI ( Container Runtime Interface ) 是 Kubernetes 定义的一组 gRPC服务。Kubelet 作为客户端,基于gRPC 框架,通过 Socket和容器运行时通信。它包括两类服务:镜像服务(ImageService)和运行时服务 ( RuntimeService ) ,一些实现包括:containerd,cri-o。
- OCI ( Open Container Initiative ) 定义了创建容器的格式和运行时的开源行业标准,包括镜像规范 (
Image-Specification ) 和运行时规范 ( RuntimeSpecification ),一些实现包括:runc,kata。
如下图所示,本文使用下图中的第二种方式:

. environment
cd node
. ./containerd.sh
. ./kubelet.sh
. ./kube-proxy.sh
cd -
6.部署 Flannel 和 CoreDNS
接下来部署 Kubernetes 的网络相关的插件,Flannel 和 CoreDNS。
CoreDNS 是 Kubernetes 域名服务器的一种实现方案,通过与 API Server 同步 service 和 pod 数据,来做 DNS 解析。运行示意如下:

Flannel 是为 Kubernetes 提供的 overlay 网络方案,会在每一个宿主机上运行名为 flanneId 代理,其负责为宿主机预先分配一个子网,并为 Pod 分配 IP 地址。Flannel 使用 Kubernetes 或 etcd 来存储网络配置、分配的子网和主机公共IP等信息。数据包则通过 VXLAN 、UDP 或 host-gw 这些类型的后端机制进行转发。如下图所示:

. environment
cd flannel
./flannel.sh
cd -
cd coredns
./coredns.sh
cd -
7.验证集群
kubectl apply ./pod.yaml
kubectl get pods
本文以 Kubernetes 1.18 版本为例,简单的进行了部署,主要是为了读者能够从中理解 Kubernetes 的组件关系。在部署中,一般出现的问题是证书和权限导致的,不同的版本要求不同,在部署中需要注意。
最后
感谢大家看到这里,文章有不足,欢迎大家指出;如果你觉得写得不错,那就给我一个赞吧。
也欢迎大家关注我的公众号:程序员麦冬,麦冬每天都会分享java相关技术文章或行业资讯,欢迎大家关注和转发文章!

本文提供了一种简化流程的Kubernetes集群部署方法,适用于学习和理解K8S原理。在两个节点上部署所有组件,详细步骤包括环境配置、证书生成、ETCD、MASTER和NODE的部署,以及Flannel和CoreDNS的安装。最后通过验证集群来确保部署成功。文中还提到了CRI和OCI在Kubernetes中的角色以及网络解决方案。
2万+

被折叠的 条评论
为什么被折叠?



