基于rocky linux 9.7 Kubernetes-1.34.1基于kubeasz-3.6.8安装二进制高可用集群

 

 

高可用集群所需节点配置如下

角色数量描述
部署节点 1 运行ansible/ezctl命令,一般复用第一个master节点
     
master节点 3 高可用集群至少2个master节点
node节点 3 运行应用负载的节点,可根据需要提升机器配置/增加节点数

 

 

确保各节点时区设置一致、时间同步。 如果你的环境没有提供NTP 时间同步

确保在干净的系统上开始安装,不要使用曾经装过kubeadm或其他k8s发行版的环境

建议操作系统升级到新的稳定内核

 

机器配置:

  • master节点:2c/3g内存/200g硬盘
  • worker节点:2c/2g内存/200g硬盘以上

注意:默认配置下容器运行时和kubelet会占用/var的磁盘空间

 

 

基础系统配置

  • 2c/3g内存/200g硬盘(该配置仅测试用)
  • 最小化安装rocky linux 9.7
  • 配置基础网络、更新源、SSH登录等

2.在每个节点安装依赖工具

推荐使用ansible in docker 容器化方式运行,无需安装额外依赖。

 

 

部署构架说明
本次所有主机均采用 rocky linux 9.7 系统,主机角色以下

 

192.168.3.60 master1.org K8s 集群主节点 1,Master和etcd
192.168.3.61 master2.org K8s 集群主节点 2,Master和etcd
192.168.3.62 master3.org K8s 集群主节点 3,Master和etcd
192.168.3.63 node1.org K8s 集群工作节点 1
192.168.3.64 node2.org K8s 集群工作节点 2
192.168.3.65 node3.org K8s 集群工作节点 3
192.168.3.59 ansible.org 部署服务器
     

 

 

3.准备ssh免密登陆

 1 实现从部署主机到其它主机的基于ssh-key验证

hostname -I
192.168.3.59

 

ssh-keygen

ssh-copy-id 192.168.3.60

ssh-copy-id 192.168.3.61

ssh-copy-id 192.168.3.62

ssh-copy-id 192.168.3.63

ssh-copy-id 192.168.3.64

ssh-copy-id 192.168.3.65

 

 

 下载工具脚本ezdown

 

export release=3.6.8

wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
#下载如果失败,使用代理下载

wget https://githubfast.com/easzlab/kubeasz/releases/download/${release}/ezdown

 wget https://mirror.ghproxy.com/https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown

#添加权限

chmod +x ./ezdown

 

下载kubeasz代码、二进制、默认容器镜像

下载kubeasz代码、二进制、默认下载容器镜像到/etc/kubeasz目录并同时安装Docker,(更多关于
ezdown的参数,运行./ezdown 查看)

./ezdown -D

 

#上面脚本执行,第一次失败,因为官方镜像从国内无法访问,需要修改docker配置
#默认使用清华源,如果禁用可以修改指向其它源,如阿里

 

./ezdown -D

 

grep mirrors.tuna.tsinghua.edu.cn ezdown 

 

sed -i "s/mirrors.tuna.tsinghua.edu.cn/mirrors.aliyun.com/" ezdown

#执行上面脚本

./ezdown -D

 

##3.6.8默认已经做docker-hub官方代理配置,无需修改

镜像拉取慢 修改

vim /etc/docker/daemon.json

cat /etc/docker/daemon.json        
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.xuanyuan.me",
    "https://docker.1ms.run",
    "https://hub1.nat.tf",
    "https://docker.1panel.live",
    "https://proxy.1panel.live",
    "https://hub.rat.dev",
    "https://docker.amingg.com"
  ],
  "insecure-registries": ["http://easzlab.io.local:5000"],
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
  "data-root": "/var/lib/docker"
}

 

systemctl restart docker.service 

#再次执行上面脚本

./ezdown -D

 

 

#查看下载的文件

du -sh /etc/kubeasz/

ls /etc/kubeasz/

 

#查看下载启动的镜像和容器

docker ps

docker images

 

 

#容器化运行kubeasz,用于安装k8s集群工具

./ezdown -S

docker ps

#自动生成别名

tail -n1 .bashrc

. .bashrc

docker exec -it kubeasz ezctl 

#创建集群的初始的配置信息,指定集群名称k8s-mycluster-01

dk ezctl new k8s-mycluster-01

docker exec -it kubeasz ezctl new k8s-mycluster-01

 

#生成集群相关配置文件

tree /etc/kubeasz/clusters/

#按规划修改配置

vim /etc/kubeasz/clusters/k8s-mycluster-01/hosts

 

 cat /etc/kubeasz/clusters/k8s-mycluster-01/hosts
# 'etcd' cluster should have odd member(s) (1,3,5,...)
[etcd]
192.168.3.60
192.168.3.61
192.168.3.62

# master node(s), set unique 'k8s_nodename' for each node
# CAUTION: 'k8s_nodename' must consist of lower case alphanumeric characters, '-' or '.',
# and must start and end with an alphanumeric character
[kube_master]
192.168.3.60 k8s_nodename='master-01'
192.168.3.61 k8s_nodename='master-02'
192.168.3.62 k8s_nodename='master-03'

# work node(s), set unique 'k8s_nodename' for each node
# CAUTION: 'k8s_nodename' must consist of lower case alphanumeric characters, '-' or '.',
# and must start and end with an alphanumeric character
[kube_node]
192.168.3.63 k8s_nodename='worker-01'
192.168.3.64 k8s_nodename='worker-02'
192.168.3.65 k8s_nodename='worker-03'

# [optional] harbor server, a private docker registry
# 'NEW_INSTALL': 'true' to install a harbor server; 'false' to integrate with existed one
[harbor]
#192.168.3.8 NEW_INSTALL=false

# [optional] loadbalance for accessing k8s from outside
[ex_lb]
#192.168.3.6 LB_ROLE=backup EX_APISERVER_VIP=192.168.3.250 EX_APISERVER_PORT=8443
#192.168.3.7 LB_ROLE=master EX_APISERVER_VIP=192.168.3.250 EX_APISERVER_PORT=8443

# [optional] ntp server for the cluster
[chrony]
#192.168.3.1

[all:vars]
# --------- Main Variables ---------------
# Secure port for apiservers
SECURE_PORT="6443"

# Cluster container-runtime supported: docker, containerd
# if k8s version >= 1.24, docker is not supported
CONTAINER_RUNTIME="containerd"

# Network plugins supported: calico, flannel, kube-router, cilium, kube-ovn
CLUSTER_NETWORK="calico"

# Service proxy mode of kube-proxy: 'iptables' or 'ipvs'
PROXY_MODE="ipvs"

# K8S Service CIDR, not overlap with node(host) networking
SERVICE_CIDR="10.96.0.0/12"

# Cluster CIDR (Pod CIDR), not overlap with node(host) networking
CLUSTER_CIDR="10.244.0.0/16"

# NodePort Range
NODE_PORT_RANGE="30000-32767"

# Cluster DNS Domain
CLUSTER_DNS_DOMAIN="cluster.local"

# -------- Additional Variables (don't change the default value right now) ---
# Binaries Directory
bin_dir="/opt/kube/bin"

# Deploy Directory (kubeasz workspace)
base_dir="/etc/kubeasz"

# Directory for a specific cluster
cluster_dir="{{ base_dir }}/clusters/k8s-mycluster-01"

# CA and other components cert/key Directory
ca_dir="/etc/kubernetes/ssl"

# Default 'k8s_nodename' is empty
k8s_nodename=''

# Default python interpreter
ansible_python_interpreter=/usr/bin/python3

 

#根据需要修改Service网络配置,默认为10.96.0.0/12,修改此
处,不要和节点网络冲突

#根据需要修改Pod网络配置,默认为10.244.0.0/16 ,修改此处,
不要和节点网络冲突

 

创建集群

#方法1:一键安装,等价于执行docker exec -it kubeasz ezctl setup k8s-mycluster-01 all
#all 相当于01 02 ...... 07

bash

dk ezctl setup k8s-mycluster-01 all

 

验证集群

 #在Master节点上执行验证集群

kubectl get nodes

[root@master-01 ~]# kubectl get node
NAME        STATUS                     ROLES    AGE     VERSION
master-01   Ready,SchedulingDisabled   master   9m17s   v1.34.1
master-02   Ready,SchedulingDisabled   master   9m17s   v1.34.1
master-03   Ready,SchedulingDisabled   master   9m17s   v1.34.1
worker-01   Ready                      node     7m3s    v1.34.1
worker-02   Ready                      node     7m2s    v1.34.1
worker-03   Ready                      node     7m3s    v1.34.1

 

[root@master-01 ~]# kubectl get pod -A
NAMESPACE     NAME                                       READY   STATUS             RESTARTS      AGE
kube-system   calico-kube-controllers-78dcb7b647-q7qvv   1/1     Running            0             8m58s
kube-system   calico-node-bgtfr                          1/1     Running            0             8m59s
kube-system   calico-node-djspd                          1/1     Running            1             8m58s
kube-system   calico-node-jlfzn                          1/1     Running            0             8m58s
kube-system   calico-node-mnjzv                          1/1     Running            0             8m58s
kube-system   calico-node-mw498                          1/1     Running            0             8m57s
kube-system   calico-node-rr7pt                          1/1     Running            0             8m57s
kube-system   coredns-6746f4cb74-pzwxl                   1/1     Running            0             4m40s
kube-system   metrics-server-55c56cb875-j5jfr            1/1     Running            0             4m18s
kube-system   node-local-dns-75fwc                       1/1     Running            0             4m36s
kube-system   node-local-dns-b9n55                       1/1     Running            0             4m36s
kube-system   node-local-dns-j96xc                       1/1     Running            0             4m36s
kube-system   node-local-dns-lpkrb                       1/1     Running            0             4m36s
kube-system   node-local-dns-mvtx4                       0/1     CrashLoopBackOff   5 (73s ago)   4m36s
kube-system   node-local-dns-qcdbs                       1/1     Running            0             4m36s

 

 

每个Node节点基于Nginx实现反向代理至Master节点

ls /etc/kube-lb/

ls /etc/kube-lb/
conf  logs  sbin

 

/etc/kube-lb/sbin/kube-lb -v

/etc/kube-lb/sbin/kube-lb -v
nginx version: nginx/1.24.0

 

cat /etc/kube-lb/conf/kube-lb.conf

cat /etc/kube-lb/conf/kube-lb.conf
user root;
worker_processes 1;

error_log  /etc/kube-lb/logs/error.log warn;

events {
    worker_connections  3000;
}

stream {
    upstream backend {
        server 192.168.3.60:6443    max_fails=2 fail_timeout=3s;
        server 192.168.3.61:6443    max_fails=2 fail_timeout=3s;
        server 192.168.3.62:6443    max_fails=2 fail_timeout=3s;
    }

    server {
        listen 127.0.0.1:6443;
        proxy_connect_timeout 1s;
        proxy_pass backend;
    }
}

 

ss -ntlp|grep kube-lb

ss -ntlp|grep kube-lb
LISTEN 0      511        127.0.0.1:6443       0.0.0.0:*    users:(("kube-lb",pid=7933,fd=5),("kube-lb",pid=7932,fd=5

 

 

 

 

 

 

 

 

 

 

 
 
 
 
 
 
 
 
posted @ 2026-05-09 16:53  minger_lcm  阅读(70)  评论(0)    收藏  举报