Sealos CLI快速部署部署K8s集群

1. Kubernetes基础环境部署

kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包

  • minikube:一个用于快速搭建单节点kubernetes的工具

  • kubeadm:一个用于快速搭建kubernetes集群的工具

  • 二进制包 :从官网下载每个组件的二进制包,依次去安装,此方式对于理解kubernetes组件更加有效

  • K8s-all:主机名为三台都做

主机名 IP地址 系统 配置
k8s-master-01 192.168.110.21/24 CentOS 7.9 4颗CPU 8G内存 100G硬盘
K8s-node-01 192.168.110.22/24 CentOS 7.9 4颗CPU 8G内存 100G硬盘
K8s-node-02 192.168.110.23/24 CentOS 7.9 4颗CPU 8G内存 100G硬盘

**注意:**关闭防火墙和SElinux

1.1 配置hosts解析和免密钥

复制代码
 [root@K8s-master-01 ~]# cat >> /etc/hosts << EOF
 192.168.110.21 k8s-master-01
 192.168.110.22 K8s-node-01
 192.168.110.23 K8s-node-02
 EOF
 [root@K8s-master-01 ~]# scp /etc/hosts K8s-node-01:/etc/
 [root@K8s-master-01 ~]# scp /etc/hosts K8s-node-02:/etc/
 ​
 # master节点可以免密钥访问其他节点
 [root@k8s-master-01 ~]# ssh-keygen -f ~/.ssh/id_rsa -N '' -q
 [root@k8s-master-01 ~]# ssh-copy-id k8s-node-01
 [root@k8s-master-01 ~]# ssh-copy-id k8s-node-02

1.2 配置NTP时间服务

复制代码
 [root@K8s-master-01 ~]# sed -i '3,6 s/^/# /' /etc/chrony.conf
 [root@K8s-master-01 ~]# sed -i '6 a server ntp.aliyun.com iburst' /etc/chrony.conf
 [root@K8s-master-01 ~]# systemctl restart chronyd.service
 [root@K8s-master-01 ~]# chronyc sources
 210 Number of sources = 1
 MS Name/IP address         Stratum Poll Reach LastRx Last sample               
 ===============================================================================
 ^* 203.107.6.88                  2   6    17    18   +266us[+1386us] +/-   24ms
 ​
 [root@K8s-node-01 ~]# sed -i '3,6 s/^/# /' /etc/chrony.conf
 [root@K8s-node-01 ~]# sed -i '6 a server ntp.aliyun.com iburst' /etc/chrony.conf
 [root@K8s-node-01 ~]# systemctl restart chronyd.service
 [root@K8s-node-01 ~]# chronyc sources
 210 Number of sources = 1
 MS Name/IP address         Stratum Poll Reach LastRx Last sample               
 ===============================================================================
 ^* 203.107.6.88                  2   6    17    18   +266us[+1386us] +/-   24ms
 ​
 [root@K8s-node-02 ~]# sed -i '3,6 s/^/# /' /etc/chrony.conf
 [root@K8s-node-02 ~]# sed -i '6 a server ntp.aliyun.com iburst' /etc/chrony.conf
 [root@K8s-node-02 ~]# systemctl restart chronyd.service
 [root@K8s-node-02 ~]# chronyc sources
 210 Number of sources = 1
 MS Name/IP address         Stratum Poll Reach LastRx Last sample               
 ===============================================================================
 ^* 203.107.6.88                  2   6     7     1   -291us[-4455us] +/-   30ms

1.3 禁用Swap交换分区

由于容器设计为尽可能高效地使用资源,Kubernetes通常要求在节点上禁用swap分区,原因包括:

  • 性能问题 :如前所述,使用swap会降低系统性能,这可能会影响容器的性能和稳定性。

  • 资源隔离 :禁用swap可以确保容器之间的资源隔离更加清晰,避免一个容器使用过多swap空间而影响其他容器。

  • 调试和监控 :禁用swap可以简化系统监控和调试,因为不需要考虑磁盘空间作为内存使用的复杂性。

复制代码
 [root@K8s-master-01 ~]# sed -i 's/.*swap.*/# &/' /etc/fstab
 [root@K8s-node-01 ~]# sed -i 's/.*swap.*/# &/' /etc/fstab
 [root@K8s-node-02 ~]# sed -i 's/.*swap.*/# &/' /etc/fstab

1.4 升级操作系统内核

**注意:**三台机器同时做

1.4.1 导入elrepo gpg key

复制代码
 [root@K8s-all ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

1.4.2 安装elrepo YUM源仓库

复制代码
 [root@K8s-all ~]# yum install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm -y 

1.4.3 安装kernel-ml版本

  • ml为长期稳定版本,lt为长期维护版本
复制代码
 [root@K8s-all ~]# yum --enablerepo="elrepo-kernel" install kernel-ml.x86_64 -y 
 [root@K8s-all ~]# uname -r
 3.10.0-1160.71.1.el7.x86_64

1.4.5 设置grub2默认引导为0

复制代码
 [root@K8s-all ~]# grub2-set-default 0

1.4.6 重新生成grub2引导文件

复制代码
 [root@K8s-all ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
 [root@K8s-all ~]# reboot  #更新后,需要重启,使用升级的内核生效
 [root@K8s-all ~]# uname -r   #重启后,需要验证内核是否为更新对应的版本
 6.8.7-1.el7.elrepo.x86_64

1.5 开启内核路由转发

复制代码
 [root@K8s-all ~]# sysctl -w net.ipv4.ip_forward=1
 net.ipv4.ip_forward = 1
 [root@K8s-all ~]# modprobe br_netfilter
 [root@k8s-all ~]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf 
 [root@k8s-all ~]# sysctl -p
 net.ipv4.ip_forward = 1

1.6 添加网桥过滤及内核转发配置文件

复制代码
 [root@K8s-all ~]# cat > /etc/sysctl.d/k8s.conf << EOF
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 vm.swappiness = 0
 EOF
 [root@K8s-all ~]# modprobe br-netfilter
 [root@K8s-all ~]# sysctl -p /etc/sysctl.d/k8s.conf
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 vm.swappiness = 0

1.7 开启IPVS

复制代码
 [root@K8s-all ~]# yum install ipset ipvsadm -y
 [root@K8s-all ~]# cat >> /etc/sysconfig/modules/ipvs.modules <<EOF
 #!/bin/bash
 ​
 ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_vip ip_vs_sed ip_vs_ftp nf_conntrack"
 ​
 for kernel_module in $ipvs_modules; 
 do
         /sbin/modinfo -F filename $kernel_module >/dev/null 2>&1
         if [ $? -eq 0 ]; then
                 /sbin/modprobe $kernel_module
         fi
 done
 ​
 chmod 755 /etc/sysconfig/modules/ipvs.modules
 EOF
 ​
 [root@K8s-all ~]# bash /etc/sysconfig/modules/ipvs.modules

1.8 配置国内镜像源

复制代码
 [root@K8s-all ~]# cat >> /etc/yum.repos.d/kubernetes.repo <<EOF
 [kubernetes]
 name=Kubernetes
 baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
 enabled=1
 gpgcheck=0
 repo_gpgcheck=0
 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
 http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
 EOF

1.9 安装软件包

复制代码
 [root@K8s-all ~]# yum install kubeadm kubelet kubectl -y
 [root@k8s-master-01 ~]# kubeadm version
 kubeadm version: &version.Info{Major:"1", Minor:"28", GitVersion:"v1.28.2", GitCommit:"89a4ea3e1e4ddd7f7572286090359983e0387b2f", GitTreeState:"clean", BuildDate:"2023-09-13T09:34:32Z", GoVersion:"go1.20.8", Compiler:"gc", Platform:"linux/amd64"}
 ​
 #为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,修改如下文件内容
 [root@K8s-all ~]# cat <<EOF > /etc/sysconfig/kubelet
 KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
 KUBE_PROXY_MODE="ipvs"
 EOF
 ​
 [root@K8s-all ~]# systemctl enable kubelet.service 

1.10 kubectl命令自动补全

复制代码
 [root@K8s-all ~]# yum install -y bash-completion
 [root@K8s-all ~]# source /usr/share/bash-completion/bash_completion
 [root@K8s-all ~]# source <(kubectl completion bash)
 [root@K8s-all ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc

2. Sealos CLI部署K8s集群

注意 :基于1 Kubernetes基础环境部署

2.1 获取Sealos CLI工具

  • 版本对应关系

    • 集群镜像版本支持说明
    • 支持 Containerd 的 K8s
    • 推荐使用 Containerd 作为容器运行时 (CRI) 的集群镜像版本,Containerd 是一种轻量级、高性能的容器运行时,与 Docker 兼容。使用 Containerd 的 Kubernetes 镜像可以提供更高的性能和资源利用率。
    • 以下是支持 Containerd 的集群镜像版本支持说明:
K8s 版本 Sealos 版本 CRI 版本 集群镜像版本
<1.25 >=v4.0.0 v1alpha2 labring/kubernetes:v1.24.0
>=1.25 >=v4.1.0 v1alpha2 labring/kubernetes:v1.25.0
>=1.26 >=v4.1.4-rc3 v1 labring/kubernetes:v1.26.0
>=1.27 >=v4.2.0-alpha3 v1 labring/kubernetes:v1.27.0
>=1.28 >=v5.0.0 v1 labring/kubernetes:v1.28.0
  • 根据 Kubernetes 版本的不同,您可以选择不同的 Sealos 版本和 CRI 版本。例如,如果您要使用 Kubernetes v1.26.0 版本,您可以选择 sealos v4.1.4-rc3 及更高版本,并使用 v1 CRI 版本。

  • 支持 Docker 的 K8s

  • 当然,也可以选择使用 Docker 作为容器运行时,以下是支持 Docker 的集群镜像版本支持说明:

K8s 版本 Sealos 版本 CRI 版本 集群镜像版本
<1.25 >=v4.0.0 v1alpha2 labring/kubernetes-docker:v1.24.0
>=1.25 >=v4.1.0 v1alpha2 labring/kubernetes-docker:v1.25.0
>=1.26 >=v4.1.4-rc3 v1 labring/kubernetes-docker:v1.26.0
>=1.27 >=v4.2.0-alpha3 v1 labring/kubernetes-docker:v1.27.0
>=1.28 >=v5.0.0 v1 labring/kubernetes-docker:v1.28.0
  • 与支持 Containerd 的 Kubernetes 镜像类似,可以根据 Kubernetes 版本的不同选择不同的 Sealos 版本和 CRI 版本。

  • 例如,如果要使用 Kubernetes v1.26.0 版本,您可以选择 sealos v4.1.4-rc3 及更高版本,并使用 v1 CRI 版本。

2.2 Sealos安装部署

复制代码
 [root@k8s-master-01 ~]# yum install https://github.com/labring/sealos/releases/download/v5.0.0-beta5/sealos_5.0.0-beta5_linux_amd64.rpm -y

2.3 使用Sealos CLI部署K8S集群

复制代码
 [root@k8s-master-01 ~]# sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes-docker:v1.28.2 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/calico:v3.24.1 \
 --masters 192.168.110.21 \
 --nodes 192.168.110.22,192.168.110.23 -p 123456

参数说明:

参数名 参数值示例 参数说明
--masters 192.168.110.22 K8s master 节点地址列表
--nodes 192.168.110.23 K8s node 节点地址列表
--ssh-passwd [your-ssh-passwd] ssh 登录密码(这里环境为免密钥)
kubernetes labring/kubernetes-docker:v1.28.2 K8s 集群镜像

注意:时间同步,kubernetes要求集群中的节点时间必须精确一致

  • 看到这个界面就成功了
复制代码
 2024-05-31T10:12:57 info succeeded in creating a new cluster, enjoy it!
 2024-05-31T10:12:57 info 
       ___           ___           ___           ___       ___           ___
      /\  \         /\  \         /\  \         /\__\     /\  \         /\  \
     /::\  \       /::\  \       /::\  \       /:/  /    /::\  \       /::\  \
    /:/\ \  \     /:/\:\  \     /:/\:\  \     /:/  /    /:/\:\  \     /:/\ \  \
   _\:\~\ \  \   /::\~\:\  \   /::\~\:\  \   /:/  /    /:/  \:\  \   _\:\~\ \  \
  /\ \:\ \ \__\ /:/\:\ \:\__\ /:/\:\ \:\__\ /:/__/    /:/__/ \:\__\ /\ \:\ \ \__\
  \:\ \:\ \/__/ \:\~\:\ \/__/ \/__\:\/:/  / \:\  \    \:\  \ /:/  / \:\ \:\ \/__/
   \:\ \:\__\    \:\ \:\__\        \::/  /   \:\  \    \:\  /:/  /   \:\ \:\__\
    \:\/:/  /     \:\ \/__/        /:/  /     \:\  \    \:\/:/  /     \:\/:/  /
     \::/  /       \:\__\         /:/  /       \:\__\    \::/  /       \::/  /
      \/__/         \/__/         \/__/         \/__/     \/__/         \/__/
 ​
                   Website: https://www.sealos.io/
                   Address: github.com/labring/sealos
                   Version: 5.0.0-beta5-a0b3363d9
 ​

2.4 查看集群

复制代码
 [root@k8s-master-01 ~]# kubectl get cs
 Warning: v1 ComponentStatus is deprecated in v1.19+
 NAME                 STATUS    MESSAGE   ERROR
 scheduler            Healthy   ok        
 controller-manager   Healthy   ok        
 etcd-0               Healthy   ok   
 ​
 [root@k8s-master-01 ~]# kubectl get nodes
 NAME            STATUS   ROLES           AGE   VERSION
 k8s-master-01   Ready    control-plane   87s   v1.28.2
 k8s-node-01     Ready    <none>          64s   v1.28.2
 k8s-node-02     Ready    <none>          64s   v1.28.2
 ​
 [root@k8s-master-01 ~]# kubectl get pod -n kube-system
 NAME                                    READY   STATUS    RESTARTS   AGE
 coredns-5dd5756b68-2gwbb                1/1     Running   0          2m35s
 coredns-5dd5756b68-hm8v9                1/1     Running   0          2m35s
 etcd-k8s-master-01                      1/1     Running   0          2m47s
 kube-apiserver-k8s-master-01            1/1     Running   0          2m47s
 kube-controller-manager-k8s-master-01   1/1     Running   0          2m47s
 kube-proxy-m9fjz                        1/1     Running   0          2m35s
 kube-proxy-rx66m                        1/1     Running   0          2m28s
 kube-proxy-v82dd                        1/1     Running   0          2m28s
 kube-scheduler-k8s-master-01            1/1     Running   0          2m47s
 kube-sealos-lvscare-k8s-node-01         1/1     Running   0          2m23s
 kube-sealos-lvscare-k8s-node-02         1/1     Running   0          2m23s

2.5 Sealos相关命令

  • 增加节点
复制代码
 1、增加 node 节点:
 sealos add --nodes 192.168.110.25,192.168.110.26 
 ​
 2、增加 master 节点:
 sealos add --masters 192.168.110.22,192.168.110.23 
  • 删除节点
复制代码
 1、删除 node 节点:
 sealos delete --nodes 192.168.110.25,192.168.110.26
 ​
 2、删除 master 节点:
 sealos delete --masters 192.168.110.22,192.168.110.23  

清理集群

复制代码
 $ sealos reset
相关推荐
能不能别报错1 天前
K8s学习笔记(十六) 探针(Probe)
笔记·学习·kubernetes
能不能别报错1 天前
K8s学习笔记(十四) DaemonSet
笔记·学习·kubernetes
火星MARK1 天前
k8s面试题
容器·面试·kubernetes
Serverless社区2 天前
阿里云函数计算 AgentRun 全新发布,构筑智能体时代的基础设施
阿里云·云原生·serverless·函数计算
赵渝强老师2 天前
【赵渝强老师】Docker容器的资源管理机制
linux·docker·容器·kubernetes
能不能别报错2 天前
K8s学习笔记(十五) pause容器与init容器
笔记·学习·kubernetes
稚辉君.MCA_P8_Java2 天前
kafka解决了什么问题?mmap 和sendfile
java·spring boot·分布式·kafka·kubernetes
乄bluefox2 天前
保姆级docker部署nacos集群
java·docker·容器
每天进步一点_JL2 天前
Docker 是什么?
后端·docker·容器
一叶飘零_sweeeet2 天前
从 0 到 1 掌控云原生部署:Java 项目的 Docker 容器化与 K8s 集群实战指南
docker·云原生·kubernetes·项目部署