使用k8e快速部署Kubernetes集群服务

GitHub - xiaods/k8e: k8e - Simple Enterprise Kubernetes. I would like to adopt more enterprise features in a lightweight distribution, a binary component, k8e to provide all the k8s components. 欢迎 Star

使用k8e快速部署Kubernetes集群服务_第1张图片  

作为YAML工程师,经常需要使用Kubernetes集群来验证很多技术化场景,如何快速搭建一套完整标准化的集群至关重要。罗列当前能快速部署Kubernetes 集群的工具有很多种,例如官方首当其冲有kubeadm工具,云原生社区有sealos作为一键部署的最佳方案,熟悉起来后部署都非常快。但是你是否考虑过并不是每一个YAML工程师都需要非常了解集群组件的搭配。这里,我给大家推荐的工具是基于单个文件的免配置的部署方式,对比kubeadm和sealos方案,去掉了对 Kubernetes 官方组件镜像的依赖,并且把Kubernetes相关的核心扩展推荐组件也都集成到这个二进制包中,通过软链接暴露,让环境依赖更少,这个安装工具就是k8e(可以叫 ‘kuber easy’ 或 K8易) 。k8e是基于当前主流上游Kubernetes发行版 k3s做的优化封装和裁剪。去掉对IoT的依赖,目标就是做最好的服务器版本的发行版本。并且和上游保持一致,可以自由扩展。

K8e v1 组件架构图:

使用k8e快速部署Kubernetes集群服务_第2张图片

  • 准备主机(2Core/4G RAM是最小标配)清单如下:
主机名 配置 数量 网络 类型
k8e-test1 2Core vCPU/8G RAM 1 172.25.1.56 master/etcd
k8e-test2 2Core vCPU/8G RAM 1 172.25.1.57 master/etcd
k8e-test3 2Core vCPU/8G RAM 1 172.25.1.58 master/etcd
k8e-test4 2Core vCPU/8G RAM 1 172.25.1.59 agent

k8e 目前支持 kubernetes 1.21 主线版本

部署步骤如下:

# 定义环境变量
# K8E_TOKEN   集群token,用来传输tls证书使用
# K8E_NODE_NAME  主机hostname,用来表示etcd中的唯一别名
# K8E_CLUSTER_INIT  启用内置etcd做为存储

sudo cat <> /etc/systemd/system/k8e.service.env
K8E_TOKEN=ilovek8e
K8E_NODE_NAME=k8e-test1
K8E_CLUSTER_INIT=true
EOF

# 启动服务
sudo systemctl start k8e

此时,单机版的k8s集群就启动完毕,做技术验证环境足够。但是如果你需要搭建高可用版本的k8s集群,就需要启用3台master节点,这是可根据一下步骤增加master节点。遵循CAP原理 高可用集群,需要配置3台以上的etcd实例才能保证集群状态的一致性。

第二台master节点配置如下:

sudo cat <> /etc/systemd/system/k8e.service.env
K8E_TOKEN=ilovek8e
K8E_NODE_NAME=k8e-test2
K8E_URL=https://172.25.1.56:6443
EOF

# 启动服务
sudo systemctl start k8e

第三台master节点配置如下

sudo cat <> /etc/systemd/system/k8e.service.env
K8E_TOKEN=ilovek8e
K8E_NODE_NAME=k8e-test3
K8E_URL=https://172.25.1.56:6443
EOF

# 启动服务
sudo systemctl start k8e

此时,3台master节点配置完毕,通过命令kubelet get node 获得节点情况。

sudo cat <> /etc/systemd/system/k8e.service.env
K8E_TOKEN=ilovek8e
K8E_NODE_NAME=k8e-test4
K8E_URL=https://172.25.1.56:6443
EOF

# sudo vi /etc/systemd/system/k8e.service 把server变成agent 并且apiserver地址配上 --server http://apiserver:6443
# 启动服务
sudo systemctl start k8e

初始化网络 内置Cilium 安装工具

默认k8e是没有网络的,需要通过ciliumcli工具来安装最新的cilium网络组件。

# 声明kube config
export KUBECONFIG=/etc/k8e/k8e.yaml 
cilium install

执行结果如下:


ℹ️  using Cilium version "v1.10.4"                                                        
 Auto-detected cluster name: default                                                   
 Auto-detected IPAM mode: cluster-pool                                                 
 Generating CA...                      
2021/10/17 13:56:06 [INFO] generate received request                           
2021/10/17 13:56:06 [INFO] received CSR                                                  
2021/10/17 13:56:06 [INFO] generating key: ecdsa-256                                                                                                                              
2021/10/17 13:56:06 [INFO] encoded CSR
2021/10/17 13:56:06 [INFO] signed certificate with serial number 337817730559787562155448316297412029330013174580
 Generating certificates for Hubble...
2021/10/17 13:56:06 [INFO] generate received request
2021/10/17 13:56:06 [INFO] received CSR
2021/10/17 13:56:06 [INFO] generating key: ecdsa-256
2021/10/17 13:56:06 [INFO] encoded CSR 
2021/10/17 13:56:06 [INFO] signed certificate with serial number 99873684673056469755769171314281690139358742178
 Creating Service accounts...
 Creating Cluster roles...                                                             
 Creating ConfigMap for Cilium version 1.10.4...                         
 Creating Agent DaemonSet...                                                           
 Creating Operator Deployment...                                                       
⌛ Waiting for Cilium to be installed... 
⌛ Waiting for Cilium to become ready before restarting unmanaged pods...
♻️  Restarting unmanaged pods...                                                          
♻️  Restarted unmanaged pod ingress-pipy/svclb-ingress-pipy-controller-fip-568sd                                                                                                   
♻️  Restarted unmanaged pod cert-manager/cert-manager-cainjector-749c569894-7z2pq
♻️  Restarted unmanaged pod kube-system/local-path-provisioner-64d457c485-hsjbg
♻️  Restarted unmanaged pod kube-system/metrics-server-7b4f8b595-fzsgl
♻️  Restarted unmanaged pod cert-manager/cert-manager-57c5c775b7-tk7rh
♻️  Restarted unmanaged pod cert-manager/cert-manager-webhook-78c5b5b6fc-6jh2s
♻️  Restarted unmanaged pod ingress-pipy/ingress-pipy-cfg-fip-6779766bb5-2bsnl
♻️  Restarted unmanaged pod ingress-pipy/ingress-pipy-controller-fip-6f947dbb6b-smkl9
♻️  Restarted unmanaged pod flomesh/proxy-injector-fsm-85d7b6f6c7-mjrsb
♻️  Restarted unmanaged pod flomesh/operator-manager-fsm-5c7d7f98d7-6ckrl
♻️  Restarted unmanaged pod ingress-pipy/ingress-pipy-manager-fip-5d865bb494-xbtjj
✅ Cilium was successfully installed! Run 'cilium status' to view installation health

查看cilium网络状态

[root@ip-172-31-24-246 ~]# cilium status
    /¯¯\
 /¯¯\__/¯¯\    Cilium:         1 errors
 \__/¯¯\__/    Operator:       OK
 /¯¯\__/¯¯\    Hubble:         disabled
 \__/¯¯\__/    ClusterMesh:    disabled
    \__/

Deployment        cilium-operator    Desired: 1, Ready: 1/1, Available: 1/1
DaemonSet         cilium             Desired: 1, Ready: 1/1, Available: 1/1
Containers:       cilium-operator    Running: 1
                  cilium             Running: 1
Cluster Pods:     12/12 managed by Cilium
Image versions    cilium             quay.io/cilium/cilium:v1.10.4: 1
                  cilium-operator    quay.io/cilium/operator-generic:v1.10.4: 1
Errors:           cilium             cilium-bmkgb    controller bpf-map-sync-cilium_ipcache is failing since 14s (40x): 11 map sync errors

Note : 主控节点三台内置了LB,启动集群后,把第一台关闭,计算节点agent也可以自动切换到第二台。不用担心集群受到影响。对于管理控制台想访问api-server地址,可以放一个nginx汇聚三台master节点的ip就可以。如果想做VIP,可以考虑采用kube-vip来实现。

默认kubeconfig放在 /etc/k8e/k8e.yaml中。

Note : 对于集群高可用场景下控制面kube-api-server,需要一个VIP入口,这里需要注意。因为k8e是默认加入了TLS证书在6443端口上,所以需要在启动k8e的时候给VIP也签名一个证书,这样管理端才能有效的访问这个K8S集群进行管理。配置参数如下:

# --tls-san value   (listener) Add additional hostname or IP as a Subject Alternative Name in the TLS cert
# bootstrap server和其它server都需要配置如下参数:
k8e server --tls-san 192.168.1.1

Note : 支持启用Dockerd容器引擎,需要修改/etc/systemd/systemd/k8e.service 文件加入参数--docker就可以切换成功,后面Pod内的容器就是由docker来执行。如下:

# vi /etc/systemd/systemd/k8e.service
#---这个参数就是切换容器引擎到docker
k8e server --docker 

 

  1. 在命令行下一键安装k8e 每台机器都跑一遍脚本下载k8e组件
     
    curl -sfL https://getk8e.com/install.sh | sh -
  2. 启动 k8s 集群过程:
  3. 注意主机系统必须满足:Linux kernel >= 4.9.17,方便支持eBPF网络
  4. 第一台,是引导服务(注意:第一台主机IP就是api-server的IP):
  5. 添加工作负载节点agent

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