手把手教你10分钟快速部署Kubernetes集群

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

本文介绍的部署过程主要是为了让读者能够理解 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=SERVICECIDRserviceIPservicenodeportrange={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相关技术文章或行业资讯,欢迎大家关注和转发文章!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值