当前位置: 首页 > article >正文

k8s集群自动化管理

项目地址

https://github.com/TimeBye/kubeadm-ha

准备安装包

# 离线安装环境
curl -LO https://oss.choerodon.com.cn/kubeadm-ha/kubeadm-ha-base-amd64.tar
# 集群运行所需的镜像
curl -LO https://oss.choerodon.com.cn/kubeadm-ha/kubernetes-1.30.2-images-amd64.tgz
# CentOS 7 系统对应软件包
curl -LO https://oss.choerodon.com.cn/kubeadm-ha/centos7/kubernetes-1.30.2-centos7-amd64.tgz
# 克隆脚本
git clone -b release-1.27 https://mirror.ghproxy.com/github.com/TimeBye/kubeadm-ha.git

节点信息

iphostnameOSrole
192.168.73.98k8s-master3CentOS 7.9master etcd worker
192.168.73.99k8s-master2CentOS 7.9master etcd worker
192.168.73.100k8s-master1CentOS 7.9master etcd worker
192.168.73.101k8s-node1CentOS 7.9worker
192.168.73.102k8s-deplayCentOS 7.9kubeadm-ha(ansible)

k8s-depaly 操作

解压离线包
tar -xzvf kubernetes-1.30.2-images-amd64.tgz
tar -xzvf kubernetes-1.30.2-centos7-amd64.tgz
配置yum源
cat <<EOF | tee /etc/yum.repos.d/kubeadm-ha.repo
[kubeadm-ha]
name=Kubeadm HA - \$basearch
baseurl=file:///data/packages/
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF
CentOS 类系统安装 containerd
# Kylin V10 需要移除以下软件包
yum remove -y selinux-policy python3-setools thin-provisioning-tools

yum install -y --disablerepo=\* --enablerepo=kubeadm-ha \
  containerd.io
配置 containerd
# root 为 containerd 存储目录,可修改为其他非共享存储目录。
cat <<EOF | tee /etc/containerd/config.toml
version = 2
root = "/var/lib/containerd"
state = "/run/containerd"
oom_score = -999
[grpc]
  max_recv_message_size = 16777216
  max_send_message_size = 16777216
[debug]
  level = "info"
[metrics]
  address = ""
  grpc_histogram = false
[plugins]
  [plugins."io.containerd.grpc.v1.cri"]
    sandbox_image = "registry.custom.local:12480/kubeadm-ha/pause:3.9"
    max_container_log_line_size = -1
    [plugins."io.containerd.grpc.v1.cri".containerd]
      default_runtime_name = "runc"
      snapshotter = "overlayfs"
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
          runtime_type = "io.containerd.runc.v2"
          runtime_engine = ""
          runtime_root = ""
          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            SystemdCgroup = true
    [plugins."io.containerd.grpc.v1.cri".registry]
      config_path = "/etc/containerd/certs.d"
EOF
配置 crictl 命令行
cat <<EOF | tee /etc/crictl.yaml
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 30
debug: false
EOF

启动并加载 kubeadm-ha 镜像

systemctl enable containerd
systemctl restart containerd
gunzip -c kubeadm-ha-base-amd64.tar | ctr -n k8s.io images import -
运行 kubeadm-ha 镜像
ctr -n k8s.io run -d --net-host \
  --mount type=bind,src=$PWD/registry,dst=/var/lib/registry,options=rbind:ro \
  --mount type=bind,src=$PWD/packages,dst=/kubernetes/packages,options=rbind:ro \
  --mount type=bind,src=$PWD/kubeadm-ha,dst=/etc/ansible,options=rbind:ro \
  docker.io/setzero/kubeadm-ha:base \
  kubeadm-ha
当镜像仓库不能使用
[root@k8s-deplay data]# cat kubeadm-ha-images.sh 
ctr -n k8s.io tasks ls
ctr -n k8s.io tasks kill kubeadm-ha

ctr -n k8s.io containers rm kubeadm-ha

ctr -n k8s.io run -d --net-host \
  --mount type=bind,src=$PWD/registry,dst=/var/lib/registry,options=rbind:ro \
  --mount type=bind,src=$PWD/packages,dst=/kubernetes/packages,options=rbind:ro \
  --mount type=bind,src=$PWD/kubeadm-ha,dst=/etc/ansible,options=rbind:ro \
  docker.io/setzero/kubeadm-ha:base \
  kubeadm-ha
推送镜像到已有镜像库(可选项,可跳过)
# 命令格式:sync-images 镜像库地址 镜像库用户名 镜像库用户密码

# containerd 示例
ctr -n k8s.io task exec -t --exec-id "shell$RANDOM" kubeadm-ha bash
sync-images harbor.custom.io/kubeadm-ha admin Harbor12345

# docker 示例
docker exec -it kubeadm-ha bash
sync-images harbor.custom.io/kubeadm-ha admin Harbor12345

编写配置文件

  • 编辑变量文件 ./kubeadm-ha/example/variables.yaml,内容如下
# 自定义 hosts 记录,方便后期调整 IP;IP 配置为 kubeadm-ha 镜像运行的服务器的 IP
# 本例中 192.168.73.102 就是运行 kubeadm-ha 镜像的服务器
custom_hosts: 
  "192.168.73.102": 
  - "pkgs.custom.local"
  - "registry.custom.local"
# 安装时发现 docker 或者 containerd 配置被修改则强制其重启应用新配置
# 重启可能中断集群安装,再次执行集群安装命令即可
restar_container_manager_force: true
# 注意地址末尾 / 必须加上
base_yum_repo: http://pkgs.custom.local:12480/packages/
epel_yum_repo: http://pkgs.custom.local:12480/packages/
docker_yum_repo: http://pkgs.custom.local:12480/packages/
kubernetes_yum_repo: http://pkgs.custom.local:12480/packages/
base_apt_repo: deb [trusted=yes] http://pkgs.custom.local:12480 packages/
docker_apt_repo: deb [trusted=yes] http://pkgs.custom.local:12480 packages/
kubernetes_apt_repo: deb [trusted=yes] http://pkgs.custom.local:12480 packages/
# 若使用 Docker 作为运行时,则添加此配置
cri_dockerd_download_url: http://pkgs.custom.local:12480/packages/cri-dockerd.tgz
# 设置信任镜像库
docker_insecure_registries:
- "registry.custom.local:12480"
containerd_registries:
  "registry.custom.local:12480": "http://registry.custom.local:12480"
# 配置镜像地址
kube_image_repository: registry.custom.local:12480/kubeadm-ha

参考 01-集群安装 编写 ansible inventory 文件

[root@localhost kubeadm-ha]# vi example/hosts.m-master.hostname.ini 
[root@localhost kubeadm-ha]# cat example/hosts.m-master.hostname.ini 
; 将所有节点的信息在这里填写
;    第一个字段                  为 kubernetes 节点 nodeName,注意必须由小写字母、数字,“-”或“.”组成,并且必须以小写字母或数字开头和结尾
;    第二个字段 ansible_host     为节点内网IP
;    第三个字段 ansible_port     为节点 sshd 监听端口
;    第四个字段 ansible_user     为节点远程登录用户名
;    第五个字段 ansible_ssh_pass 为节点远程登录用户密码 
[all]
k8s-master3 ansible_host=192.168.73.98 ansible_port=22 ansible_user="root" ansible_ssh_pass="123456"
k8s-master2 ansible_host=192.168.73.99 ansible_port=22 ansible_user="root" ansible_ssh_pass="123456"
k8s-master1 ansible_host=192.168.73.100 ansible_port=22 ansible_user="root" ansible_ssh_pass="123456"
k8s-node1   ansible_host=192.168.73.101 ansible_port=22 ansible_user="root" ansible_ssh_pass="123456"
k8s-deplay   ansible_host=192.168.73.102 ansible_port=22 ansible_user="root" ansible_ssh_pass="123456"

; 私有云:
;    VIP 负载模式:
;       也就是负载均衡器 + keepalived 模式,比如常用的 haproxy + keepalived。
;       本脚本中负载均衡器有 nginx、haproxy 可供选择,设置 lb_mode 即可进行任意切换。
;       设置 lb_kube_apiserver_ip 即表示启用 keepalived,请先与服务器提供部门协商保留一个IP作为 lb_kube_apiserver_ip,
;       一般 lb 节点组中有两个节点就够了,lb节点组中第一个节点为 keepalived 的 master 节点,剩下的都为 backed 节点。
;
;    节点本地负载模式:
;       只启动负载均衡器,不启用 keepalived(即不设置 lb_kube_apiserver_ip),
;       此时 kubelet 链接 apiserver 地址为 127.0.0.1:lb_kube_apiserver_port。
;       使用此模式时请将 lb 节点组置空。
;
; 公有云:
;    不推荐使用 slb 模式,建议直接使用节点本地负载模式。
;    若使用 slb 模式,请先使用节点本地负载模式进行部署,
;    部署成功后再切换至 slb 模式:
;       将 lb_mode 修改为 slb,将 lb_kube_apiserver_ip 设置为购买到的 slb 内网ip,
;       修改 lb_kube_apiserver_port 为 slb 监听端口。
;    再次运行初始化集群脚本即可切换至 slb 模式。
[lb]
k8s-master3
k8s-master2
k8s-master1

; 注意etcd集群必须是1,3,5,7...奇数个节点
[etcd]
k8s-master3
k8s-master2
k8s-master1

[kube-master]
k8s-master3
k8s-master2
k8s-master1

[kube-worker]
k8s-master3
k8s-master2
k8s-master1
k8s-node1

; 预留组,后续添加master节点使用
[new-master]

; 预留组,后续添加worker节点使用
[new-worker]

; 预留组,后续添加etcd节点使用
[new-etcd]

; 预留组,后续删除worker角色使用
[del-worker]

; 预留组,后续删除master角色使用
[del-master]

; 预留组,后续删除etcd角色使用
[del-etcd]

; 预留组,后续删除节点使用
[del-node]

;-------------------------------------- 以下为基础信息配置 ------------------------------------;
[all:vars]
; 是否跳过节点物理资源校验,Master节点要求2c2g以上,Worker节点要求2c4g以上
skip_verify_node=false
; kubernetes版本
kube_version="1.30.2"

; 容器运行时类型,可选项:containerd,docker;默认 containerd
container_manager="containerd"

; 负载均衡器
;   有 nginx、haproxy 和 slb 可选,默认使用 nginx
lb_mode="nginx"
; 使用负载均衡后集群 apiserver ip,设置 lb_kube_apiserver_ip 变量,则启用负载均衡器 + keepalived
; lb_kube_apiserver_ip="192.168.56.15"
; 使用负载均衡后集群 apiserver port
lb_kube_apiserver_port="8443"

; 网段选择:pod 和 service 的网段不能与服务器网段重叠,
; 若有重叠请配置 `kube_pod_subnet``kube_service_subnet` 变量设置 pod 和 service 的网段,示例参考:
;    如果服务器网段为:10.0.0.1/8
;       pod 网段可设置为:192.168.0.0/18
;       service 网段可设置为 192.168.64.0/18
;    如果服务器网段��:172.16.0.1/12
;       pod 网段可设置为:10.244.0.0/18
;       service 网段可设置为 10.244.64.0/18
;    如果服务器网段为:192.168.0.1/16
;       pod 网段可设置为:10.244.0.0/18
;       service 网段可设置为 10.244.64.0/18
; 集群pod ip段,默认掩码位 1816384 个ip
kube_pod_subnet="10.244.0.0/18"
; 集群service ip段
kube_service_subnet="10.244.64.0/18"
; 分配给节点的 pod 子网掩码位,默认为 24256 个ip,故使用这些默认值可以纳管 16384/256=64 个节点。
kube_network_node_prefix="24"

; node节点最大 pod 数。数量与分配给节点的 pod 子网有关,ip 数应大于 pod 数。
; https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr
kube_max_pods="110"

; 集群网络插件,目前支持flannel,calico
network_plugin="calico"

; 若服务器磁盘分为系统盘与数据盘,请修改以下路径至数据盘自定义的目录。
; Kubelet 根目录
kubelet_root_dir="/var/lib/kubelet"
; docker容器存储目录
docker_storage_dir="/var/lib/docker"
; containerd容器存储目录
containerd_storage_dir="/var/lib/containerd"
; Etcd 数据根目录
etcd_data_dir="/var/lib/etcd"

集群部署

  • 使用 containerd 进行集群部署
ctr -n k8s.io task exec -t --exec-id "shell$RANDOM" kubeadm-ha bash
ansible-playbook -i example/hosts.m-master.hostname.ini  -e @example/variables.yaml 90-init-cluster.yml

安装 helm(可选项,可跳过),k8s-master1上执行

下载helm客户端
curl -sO http://pkgs.custom.local:12480/packages/helm.tar.gz
解压压缩包(以linux-amd64为例)
tar -zxvf helm.tar.gz
将文件移动到PATH目录中(以linux-amd64为例)
sudo mv linux-amd64/helm /usr/bin/helm
执行命令,出现以下信息即部署成功。
$ helm version
version.BuildInfo{Version:"v3.12.3", GitCommit:"3a31588ad33fe3b89af5a2a54ee1d25bfe6eaa5e",   GitTreeState:"clean", GoVersion:"go1.20.7"}

http://www.kler.cn/news/311902.html

相关文章:

  • Outlook如何归档?
  • Pandas 数据分析入门详解
  • 通用定时器捕获实验20240920
  • 【软件方案】智慧社区总体解决方案(PPT原件)
  • Docker安装以及简单使用
  • 在线安全干货|如何更改IP地址?
  • 基于单片机的风机故障检测装置的设计与实现(论文+源码)
  • 批量处理docker容器以及镜像的脚本
  • 一、Numpy使用
  • C语言从头学61——学习头文件signal.h
  • 什么是“云原生”
  • Mysql梳理6——order by排序
  • 在 VS Code 中调试 C++ 项目
  • 【数据结构】动态开点线段树
  • 基于Android Studio 蜜雪冰城(奶茶饮品点餐)—原创
  • Java ERP系统源码深度解析:Spring Cloud Alibaba和Spring Boot的微服务实战
  • 云WAF能做什么?看它如何帮你应对网络攻击
  • 武汉网站建设实施方案
  • 猫咪为什么不吃猫罐头?解决挑食小猫!美味主食罐推荐!
  • 2.4 数据库表字段约束
  • 水经微图PC版5.0.0即将内测
  • MATLAB数学规划:2.线性规划
  • 分享一个 在线拍卖系统 商品竞拍平台Java、python、php三个技术版本(源码、调试、LW、开题、PPT)
  • MATLAB系列03:分支语句和编程设计
  • 指挥中心操作台怎么布局更合理
  • Can‘t connect to local MySQL server through socket
  • 【线性规划求解系列】MATLAB中使用linprog解决线性规划问题
  • 【学术会议:中国杭州,机器学习和计算机应用面临的新的挑战问题和研究方向】第五届机器学习与计算机应用国际学术会议(ICMLCA 2024)
  • 大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解
  • Linux 环境永久更换国内pip镜像源地址