K8s:kubeasz安装kubernetes集群

k8s二进制部署

1、环境

类型 服务器IP 主机名 VIP
K8S Master1 10.0.0.51 k8s-master1.jigaobo.net 10.0.0.188
K8S Master2 10.0.0.52 k8s-master2.jigaobo.net 10.0.0.188
K8S Master3 10.0.0.53 k8s-master3.jigaobo.net 10.0.0.188
Harbor1 10.0.0.54 k8s-harbor1.jigaobo.net
Harbor2 10.0.0.55 k8s-harbor2.jigaobo.net
etcd节点1 10.0.0.56 k8s-etcd1.jigaobo.net
etcd节点2 10.0.0.57 k8s-etcd2.jigaobo.net
etcd节点3 10.0.0.58 k8s-etcd3.jigaobo.net
Haproxy1 10.0.0.59 k8s-ha1.jigaobo.net
Haproxy2 10.0.0.60 k8s-deploy.jigaobo.net k8s部署节点
Node节点1 10.0.0.61 k8s-node1.jigaobo.net
Node节点2 10.0.0.62 k8s-node2.jigaobo.net
Node节点3 10.0.0.63 k8s-node3.jigaobo.net

优化

注意:1、主机名不能一样(master和node不能一样)、域名可以一样、主机位不能一样
	 2、serverid不能一样、下面两种方法执行
	 systemd-machine-id-setup
rm -rf   /etc/machine-id && dbus-uuidgen --ensure=/etc/machine-id && cat /etc/machine-id

2、安装haproxy和keepalived和harbor

Haproxy1	10.0.0.59	k8s-ha1.jigaobo.net
Haproxy2	10.0.0.60	k8s-deploy.jigaobo.net

2.1、配置keepalived
1、
apt install haproxy   keepalived		#两台节点

2、
find  查找keeplived文件、vrrp后缀、拷贝到/etc/keeplived/keeplived.conf
		find / -name keepalived.*
		
3、修改:1、保留一组vrrp_instance  VI_1
		  2、state初始角色	state MASTER
		  3、网卡接口		interface eth0
		  4、优先级	     priority 100
		  5、密码(同一组得一致)	auth_pass 123456
		  6、添加后端设备	10.0.0.188 dev eth0 label eth0:0  (这就是监听一个VIP、0代表一组)
	修改后如下图
	BACKUP: 然后拷贝到别备用节点主机
		     修改:state初始角色
			 优先级
4、操作步骤:
[root@k8s-ha1 ~]#apt update && apt install keepalived -y   #没有版本要求,能生成一个VIP就可以
[root@k8s-ha1 ~]#find / -name keepalived.*   #查找模板配置文件
[root@k8s-ha1 ~]#cp /usr/share/doc/keepalived/samples/keepalived.conf.vrrp /etc/keepalived/keepalived.conf
[root@k8s-ha1 ~]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    garp_master_delay 10
    smtp_alert
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.188 dev eth0 label eth0:0
        10.0.0.189 dev eth0 label eth0:1
        10.0.0.190 dev eth0 label eth0:2

    }
}

[root@k8s-ha1 ~]#systemctl restart keepalived.service
[root@k8s-ha1 ~]#systemctl enable keepalived.service  #将服务设置为开机自启
[root@k8s-ha1 ~]#scp /etc/keepalived/keepalived.conf 10.0.0.205:/etc/keepalived/keepalived.conf #拷贝到另一台
[root@k8s-ha2 ~]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    garp_master_delay 10
    smtp_alert
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.188 dev eth0 label eth0:0
        10.0.0.189 dev eth0 label eth0:1
        10.0.0.190 dev eth0 label eth0:2

    }
}

[root@k8s-ha2 ~]#systemctl restart keepalived.service
[root@k8s-ha2 ~]#systemctl enable keepalived.service  #将服务设置为开机自启

1715791347957

2.2、配置ha

1715791756023

1、安装
apt install haproxy   -y

2、直接在最后一行下面添加:
	1、监听组名称
	2、虚拟地址
	3、使用什么协议(tcp:模式一定要走tcp,走http报头会被替换掉)
	4、后端服务器组(检查性检查)
	 listen  k8s-master-6443
  	      bind    10.0.0.188:6443
  	      mode    tcp
  	      server  server1 10.0.0.51:6443  check inter 2000 fall 3 rise 5
  	      server  server2 10.0.0.52:6443  check inter 2000 fall 3 rise 5
  	      server  server3 10.0.0.53:6443  check inter 2000 fall 3 rise 5


注意:		1、拷贝到两台机器都启动后加入开机自启动
			systemctl 	restart haproxy.service 
			systemctl   enable --now    haproxy.service 
		  2、启动报错:是内核默认不允许监听本机没有的地址或(后端服务器组)

查看报错:  haproxy  -f  /etc/haproxy/haproxy.cfg

允许监听: shysctl  -a  | grep  bind 
		vim  /etc/sysctl.conf
		net.ipv4.ip_nonlocal_bind = 1
		sysctl  -p 
最后加入开机自启动
2.3、安装harbor
1、安装:	docker	harbor


	docker
			直接跑杰哥的containerd的脚本
           1、bash  脚本名  docker (传递参数)
	证书

	harbor
		1、拷贝文件到/apps/	需要提前创建目录
		2、tar  xvf  harbor-offline-installer-v2.10.2.tgz     #解压缩后创建
		3、创建证书文件  mkdir  /apps/harbor/certs
		4、拷贝文件   cp   /apps/harbor/harbor.yml.tmpl   /apps/harbor/harbor.yml
		5、修改配置文件	vim  /apps/harbor/harbor.yml
				修改如下:
				hostname: reg.mydomain.com	(适配证书的主机名)
				如果配置http的话就把https注释掉
				certificate: /your/certificate/path		#公钥
  				private_key: /your/private/key/path		#私钥
  				harbor_admin_password: 123456			#修改仓库密码
  				data_volume: /data						#数据存放目录(挂载一个单独数据盘)

		6、./install.sh    --with-trivy
		#执行脚本(传递三个参数:启用https、扫描漏洞、启用htlmchart)后面两个已经支持
		
		
2、使用nerdctl测试
		nerdctl  login   harbor.51lianlian.cn			#登录测试
		nerdctl  tag alpine:latest  harbor.51lianlian.cn/jigaobo/alpine:V1 #打标签测试
		nerdctl  rmi  -f  c5b1261d6d3e     #删除镜像测试
		nerdctl  pull  harbor.51lianlian.cn/jigaobo/alpine:V1	拉取镜像测试


3、打通ksy验证

执行节点:10.0.0.60
1、批量执行
[root@k8s-master1 ~]#apt install ansible -y   #安装ansible

2、配置免密钥认证,分发给每个master,node,etcd
[root@k8s-deploy:~]# ssh-keygen -t rsa-sha2-512 -b 4096 
[root@k8s-deploy:~]# apt install sshpass #安装sshpass命令⽤于同步公钥到各k8s服务器
[root@k8s-deploy:~]# cat key-scp.sh
#节点:master、ndoe、etcd
#!/bin/bash
#⽬标主机列表
IP="
10.0.0.51
10.0.0.52
10.0.0.53
10.0.0.56
10.0.0.57
10.0.0.58
10.0.0.61
10.0.0.62
10.0.0.63
"
REMOTE_PORT="22"
REMOTE_USER="root"
REMOTE_PASS="123456"
for REMOTE_HOST in ${IP};do
        REMOTE_CMD="echo ${REMOTE_HOST} is successfully!"
                #添加⽬标远程主机的公钥
        ssh-keyscan -p "${REMOTE_PORT}" "${REMOTE_HOST}" >> ~/.ssh/known_hosts
                #通过sshpass配置免秘钥登录、并创建python3软连接
        sshpass -p "${REMOTE_PASS}" ssh-copy-id "${REMOTE_USER}@${REMOTE_HOST}"
        ssh ${REMOTE_HOST} ln -sv /usr/bin/python3 /usr/bin/python
        echo ${REMOTE_HOST} 免秘钥配置完成!
       done

#执⾏脚本同步:x
[root@k8s-deploy:~]# bash key-scp.sh

3、为每个节点设置python软连接,只要是通过ansible管理的都要做软连接
	本机也需要python环境
[root@k8s-master1 ~]#ln -s /usr/bin/python3.10 /usr/bin/python

4、配置时间同步

4、./ezdown -D 执行初始化脚本

下面k8s版本需要对应的kubeasz

1715933250098

下载

部署节点:10.0.0.60
二制地址:https://github.com/easzlab/kubeasz

下载部署脚本:
export release=3.6.2
wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
wget https://github.com/easzlab/kubeasz/releases/download/3.6.2/ezdown


chmod +x ./ezdown
./ezdown  -D   修改下面后执行命令初始化环境、(修改文件中k8s版本、docker版本)看下面讲解:

./ezdown脚本文件讲解

1、脚本会先在本机安装docker
2、kubeasz版本
3、k8s版本(测试先不要安装最新、后面升级到最新) 1.28.1 (必须镜像仓库里面有)  后面升级到1.28.14

第3步骤重点:通过docker去pull镜像https://hub.docker.com/r/easzlab/kubeasz-k8s-bin/tags

需要修改

#########################可以直接在脚本中查看支持的变量
[root@k8s-master1 ~]#vim ./ezdown 

# BASE : 用于指定默认的下载路径(包括所有的镜像和二进制文件),默认为 /etc/kubeasz
BASE="/etc/kubeasz"

#########################在部署节点安装 docker 的版本,一般无需修改
DOCKER_VER=20.10.18

# KUBEASZ_VER : 使用的 kubeasz 版本,会使用 docker 进行下载构建
# dockerfile 下载的地址为:https://github.com/easzlab/dockerfile-kubeasz()
KUBEASZ_VER=3.6.0

#########################K8S_BIN_VER : 要下载的 kubernetes 版本,,会使用 docker 进行下载构建
#########################dockerfile 下载的地址为:https://github.com/easzlab/dockerfile-kubeasz-k8s-bin(这个默认要和kubeasz的对应、看上面图片、这个目的是使用docker下载镜像)
K8S_BIN_VER=v1.25.4

# EXT_BIN_VER : 指定 helm、containerd、cilium、etcd 等第三方软件版本,会使用 docker 进行下载构建
# dockerfile 下载的地址为:https://github.com/easzlab/dockerfile-kubeasz-ext-bin
# 详细的软件版本需要到对应 EXT_BIN_VER 版本指定的 dockerfile 中查看
EXT_BIN_VER=1.6.2

# SYS_PKG_VER : 指定 ipset、ipvsadm、socat 等第三方软件版本,会使用 docker 进行下载构建
# dockerfile 下载的地址为:https://github.com/easzlab/dockerfile-kubeasz-sys-pkg
# 详细的软件版本需要到对应 SYS_PKG_VER 版本指定的 dockerfile 中查看
SYS_PKG_VER=0.5.2

5、创建一个新集群

自定义集群文件、每个集群名字唯一。

主要文件

ls /etc/kubeasz/bin/  #可执行文件都放在本目录

自定义集群文件

[root@k8s-deploy:/etc/kubeasz]# ./ezctl  --help 			#查看帮助命令
[root@k8s-deploy:/etc/kubeasz]# ./ezctl   new k8s-cluster1	#创建新机器、指定名字
2024-05-17 09:14:23 DEBUG generate custom cluster files in /etc/kubeasz/clusters/k8s-cluster1				#集群目录
2024-05-17 09:14:23 DEBUG set versions
2024-05-17 09:14:23 DEBUG cluster k8s-cluster1: files successfully created.
2024-05-17 09:14:23 INFO next steps 1: to config '/etc/kubeasz/clusters/k8s-cluster1/hosts'				#当前集群主机配置
2024-05-17 09:14:23 INFO next steps 2: to config '/etc/kubeasz/clusters/k8s-cluster1/config.yml'		#集群配置文件

配置集群文件

https://github.com/easzlab/kubeasz/blob/master/example/hosts.multi-node

root@k8s-deploy:/etc/kubeasz# vim clusters/k8s-cluster1/config.yml

6、执行01创建证书和环境准备(修改配置)

需要修改配置列表

vim   /etc/kubeasz/clusters/k8s-cluster1/hosts
1、master、node、etcd、每个节点的ip和主机
	harbor和SLB用不到、就注释掉
2、k8s的APIserver的端口传递6443
3、早起支持docker、1.24之后就是containerd了
4、网络组件:calico
5、service类型:ipvs 
6、servece地址段和cluster(pod地址段)地址段
7、node节点让service监听哪些端口范围(3000-32767)
8、二进制文件bin_dir="/usr/local/bin"
9、工作目录:base_dir="/etc/kubeasz"
10、集群指定目录:cluster_dir=/etc/kubeasz/clusters/k8s-cluster1 
11、ca_dir="/etc/kubernetes/ssl/"	#证书存放目录
12、最默认node节点为空
6.1、修改hosts

注意:hosts主要就是环境地址和组件相关的配置

1716194322940

vim    /etc/kubeasz/clusters/k8s-cluster1/hosts
######################################## etcd地址
[etcd]
10.0.0.56
10.0.0.57
10.0.0.58
######################################## master地址、后期扩容一个
[kube_master]
10.0.0.51 k8s_nodename='10.0.0.51'
10.0.0.52 k8s_nodename='10.0.0.52'
#10.0.0.3 k8s_nodename='master-03'
######################################## node地址和nade的name、后期扩容一个
[kube_node]
10.0.0.61 k8s_nodename='10.0.0.61'
10.0.0.62 k8s_nodename='10.0.0.62'
######################################## k8s的APIserver的端口传递6443
SECURE_PORT="6443"
######################################## 早起支持docker、1.24之后就是containerd了
CONTAINER_RUNTIME="containerd"
######################################## 使用网络组件
CLUSTER_NETWORK="calico"
######################################## service类型
PROXY_MODE="ipvs"
######################################## servece地址段和cluster(pod地址段)地址段
SERVICE_CIDR="10.100.0.0/16"
CLUSTER_CIDR="10.200.0.0/16"
######################################## node节点让service监听哪些端口范围(3000-32767)
NODE_PORT_RANGE="30000-62767"
######################################## 
CLUSTER_DNS_DOMAIN="cluster.local"
######################################## 二进制文件
bin_dir="/opt/kube/bin"
######################################## 工作目录
base_dir="/etc/kubeasz"
######################################## 集群指定目录
cluster_dir="{{ base_dir }}/clusters/k8s-cluster1"
######################################## 证书文件默认
ca_dir="/etc/kubernetes/ssl"
######################################## 最默认node节点为空
k8s_nodename=''
######################################## Default python interpreter(ansible使用python)
ansible_python_interpreter=/usr/bin/python3
6.1、修改config.yml
vim  /etc/kubeasz/clusters/k8s-cluster1/config.yml

图一

1716195967918

图二

1716196664648

图四

1716197814510

1、

######################################## kubeconfig 配置参数(当前集群名字、会放在kubeconfig认证文件)(保存不同k8s认证、就是通过集群名字区分)
CLUSTER_NAME: "cluster1"
CONTEXT_NAME: "context-{{ CLUSTER_NAME }}"

######################################## k8s version(k8s版本)
K8S_VER: "1.28.1"


################################################### 会去hosts文件取nodename名称(用来指定当前节点名称)
K8S_NODENAME: "{%- if k8s_nodename != '' -%} \
                    {{ k8s_nodename|replace('_', '-')|lower }} \
               {%- else -%} \
                    {{ inventory_hostname }} \
               {%- endif -%}"

########################################
# role:etcd
######################################## 
######################################## 设置不同的wal目录,可以避免磁盘io竞争,提高性能(尽量是SSD固态盘)、私有云:最好高性能固态盘
ETCD_DATA_DIR: "/var/lib/etcd"
ETCD_WAL_DIR: ""


########################################
# role:runtime [containerd,docker]
########################################
######################################## [.]启用拉取加速镜像仓库
ENABLE_MIRROR_REGISTRY: true

######################################## [.]添加信任的私有仓库
INSECURE_REG:
  - "http://easzlab.io.local:5000"
  - "https://{{ HARBOR_REGISTRY }}"

######################################## [.]基础容器镜像
######################################## 为k8s中每个镜像初始化网络底层环境(可以拉取下来换成自己的) 阿里云:registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9 
SANDBOX_IMAGE: "harbor.51lianlian.cn/baseimages/pause:3.9"

######################################## [containerd]容器持久化存储目录(挂载SSD固态盘提高性能)
CONTAINERD_STORAGE_DIR: "/var/lib/containerd"

2、

######################################## k8s 集群 master 节点证书配置,可以添加多个ip和域名(比如增加公网ip和域名)
MASTER_CERT_HOSTS:
  - "10.0.0.188"
  - "api.myserver.com"
  #- "www.test.com"

######################################## node 节点上 pod 网段掩码长度(决定每个节点最多能分配的pod ip地址)
######################################## 如果flannel 使用 --kube-subnet-mgr 参数,那么它将读取该设置为每个节点分配pod网段
######################################## https://github.com/coreos/flannel/issues/847
NODE_CIDR_LEN: 24


########################################
# role:kube-node
########################################
######################################## Kubelet 根目录
KUBELET_ROOT_DIR: "/var/lib/kubelet"

######################################## node节点最大pod 数
MAX_PODS: 200

# 配置为kube组件(kubelet,kube-proxy,dockerd等)预留的资源量
# 数值设置详见templates/kubelet-config.yaml.j2
# 公有云上面都是预留资源的、会导致每个主机都会消耗内存、 (长时间监控、了解资源情况、可以打开)
KUBE_RESERVED_ENABLED: "no"

# k8s 官方不建议草率开启 system-reserved, 除非你基于长期监控,了解系统的资源占用状况;
# 并且随着系统运行时间,需要适当增加资源预留,数值设置详见templates/kubelet-config.yaml.j2
# 系统预留设置基于 4c/8g 虚机,最小化安装系统服务,如果使用高性能物理机可以适当增加预留
# 另外,集群安装时候apiserver等资源占用会短时较大,建议至少预留1g内存
SYS_RESERVED_ENABLED: "no"


########################################
# role:network [flannel,calico,cilium,kube-ovn,kube-router]
########################################
# ------------------------------------------- flannel
# [flannel]设置flannel 后端"host-gw","vxlan"等
# 打开之后跨主机通信就是直接路由过去的、不再通过私有封装、vxlan是做私有封装、打开之后会有资源损耗(node节点都得在同一个子网之内)
FLANNEL_BACKEND: "vxlan"
DIRECT_ROUTING: false

3、

 ------------------------------------------- calico
# [calico] IPIP隧道模式可选项有: [Always, CrossSubnet, Never],跨子网可以配置为Always与CrossSubnet(公有云建议使用always比较省事,其他的话需要修改各自公有云的网络配置,具体可以参考各个公有>云说明)
# 其次CrossSubnet为隧道+BGP路由混合模式可以提升网络性能,同子网配置为Never即可.
CALICO_IPV4POOL_IPIP: "Always"

# [calico]设置 calico-node使用的host IP,bgp邻居通过该地址建立,可手工指定也可以自动发现
IP_AUTODETECTION_METHOD: "can-reach={{ groups['kube_master'][0] }}"

# [calico]设置calico 网络 backend: bird, vxlan, none
CALICO_NETWORKING_BACKEND: "bird"

# [calico]设置calico 是否使用route reflectors
# 如果集群规模超过50个节点,建议启用该特性
CALICO_RR_ENABLED: false

4、

# role:cluster-addon
############################
######################################## coredns 自动安装(可以自己手动安装、)
dns_install: "no"
corednsVer: "1.11.1"
  #请求过域名之后可以缓存、下次请求直接走缓存、提高域名解析性能、(反向效果:修改域名后还在走缓存、就会报错)
ENABLE_LOCAL_DNS_CACHE: false
dnsNodeCacheVer: "1.22.23"
######################################## 设置 local dns cache 地址
LOCAL_DNS_CACHE: "169.254.20.10"

######################################## metric server 自动安装
metricsserver_install: "no"
metricsVer: "v0.6.4"

######################################## dashboard 自动安装
dashboard_install: "no"
dashboardVer: "v2.7.0"
dashboardMetricsScraperVer: "v1.0.8"

######################################## prometheus 自动安装
prom_install: "no"
prom_namespace: "monitor"
prom_chart_ver: "45.23.0"

######################################## kubeapps 自动安装,如果选择安装,默认同时安装local-storage(提供storageClass: "local-path")
kubeapps_install: "no"
kubeapps_install_namespace: "kubeapps"
kubeapps_working_namespace: "default"
kubeapps_storage_class: "local-path"
kubeapps_chart_ver: "12.4.3"

######################################## local-storage (local-path-provisioner) 自动安装
local_path_provisioner_install: "no"
local_path_provisioner_ver: "v0.0.24"
######################################## 设置默认本地存储路径
local_path_provisioner_dir: "/opt/local-path-provisioner"

######################################## nfs-provisioner 自动安装 (NFS存储类)
nfs_provisioner_install: "no"
nfs_provisioner_namespace: "kube-system"
nfs_provisioner_ver: "v4.0.2"
nfs_storage_class: "managed-nfs-storage"
nfs_server: "192.168.1.10"
nfs_path: "/data/nfs"

7、执行01(集群所有初始化环境)

执行后会在节点上面安装需要的包

./ezctl  setup  k8s-cluster1  01 

8、执行02(部署Etcd集群)

./ezctl  setup  k8s-cluster1  02

1、相当于在etcd节点上执行主任务、通过ansible的role部署etcd  
	/etc/kubeasz/roles/etcd/tasks/main.yml 
	
	
2、/etc/kubeasz/roles/etcd/templates/etcd-csr.json.j2 	###辅助配置:可以自定义证书信息

验证etcd集群

验证集群
export NODE_IPS="10.0.0.56 10.0.0.57 10.0.0.58"
注意:etcdctl文件可能在别的位置
for ip in ${NODE_IPS}; do ETCDCTL_API=3   /opt/kube/bin/etcdctl     --endpoints=https://${ip}:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem endpoint  health; done

9、摧毁集群

2、摧毁集群、然后可以重新部署
./ezctl  destroy  k8s-cluster1
注意:如果01和02执行失败执行此步骤后重新来、生产环境慎之又慎执行此命令!!!

10、修改pause镜像和证书分发

本地安装后

contained

拷贝信任
然后修改containerd文件(pause基础镜像、)
vim /etc/containerd/config.toml
sandbox_image = "harbor.51lianlian.cn/baseimages/pause:3.9"	###里面变量直接写pause镜像也行
SystemdCgroup = true							###修该为true(自动打开systemd和pause镜像)
docker官网的和google的							 ###镜像仓库加速

nerdctl

3、vim   /etc/nerdctl/nerdctl.toml
namespace		= "k8s.io"
debug			= "false"
debug_full		= "false"
insecure_registry	= true
1、修改pause
2、分发证书
3、修改hosts中的harbor仓库解析记录
4、修改containerd的配置文件
5、本机安装nerdctl工具、(安装到本地的配置目录)
	通过ansible分发(1、定义配置目录。)
					2、拷贝nerdctl相关命令
					3、neerdctl配置文件创建

1、修改pause

1、建议修改镜像地址:
步骤:修改pause镜像、重新打tag、上传到本地harbor、然后修改集群配置里面引用地址信息

2、证书分发

第一种方式:shell脚本分发
deploy节点执行:分发node节点和master节点
#将证书从harbor节点scp到部署节点,稍后从部署节点分发证书
root@k8s-deploy:~# mkdir -pv /etc/containerd/certs.d/harbor.51lianlian.cn/
root@k8s-harbor1:/apps/harbor# scp 51lianlian.cn.crt 10.0.0.60:/etc/kubeasz/
root@k8s-harbor1:/apps/harbor# scp certs/51lianlian.cn.crt 10.0.0.60:/etc/containerd/certs.d/harbor.51lianlian.cn/
#同步docker证书脚本:
root@k8s-deploy:/etc/kubeasz# cat harbor-crt-scp.sh
#!/bin/bash
# 目标主机地址
IP="
10.0.0.51
10.0.0.52
10.0.0.53
10.0.0.61
10.0.0.62
10.0.0.63
"
for node in ${IP}; do
  sshpass -p 123456 ssh-copy-id ${node} -o StrictHostKeyChecking=no
  if [ $? -eq 0 ]; then
    echo "${node} 秘钥copy完成,准备环境初始化....."
    ssh ${node} "mkdir /etc/containerd/certs.d/harbor.51lianlian.cn -p"
    echo "Harbor 证书目录创建成功!"
    scp /etc/kubeasz/51lianlian.cn.crt ${node}:/etc/containerd/certs.d/harbor.51lianlian.cn/51lianlian.cn.crt
    echo "Harbor 证书拷贝成功!"
    echo '10.0.0.54   harbor.51lianlian.cn  harbor.51lianlian.cn' >> /etc/hosts"
  else
    echo "${node} 秘钥copy失败"
  fi
done
#分发harbor客户端证书
root@k8s-deploy:/etc/kubeasz# bash harbor-crt-scp.sh


第二种方式:ansible分发(通过修改配置文件)


3、添加一行解析记录

就是使用ansible往/etc/hosts文件里面添加域名解析记录

vim  /etc/kubeasz/roles/containerd/tasks/main.yml
	复制一行:添加执行脚本命令
	 - name: 添加 仓库域名解析
      shell: "echo '10.0.0.54   harbor.515lianlian.cn  harbor.515lianlian.cn' >> /etc/hosts"

4、修改containerd的配置文件

vim /etc/kubeasz/roles/containerd/templates/config.toml.j2

sandbox_image = "{{ SANDBOX_IMAGE }}"			###里面变量直接写pause镜像也行
SystemdCgroup = true							###修该为true(自动打开systemd和pause镜像)
docker官网的和google的							 ###镜像仓库加速

5、安装nerdctl和修改添加nerdctl和contained配置

安装nedctl

1、安装nerctl
2、拷贝到目录 /etc/nerdctl

创建nedctl配置文件(创建后ansible引用文件位置、然后实现分发)

3、vim /etc/kubeasz/roles/containerd/templates/nerdtctl.toml.j2
namespace		= "k8s.io"
debug			= "false"
debug_full		= "false"
insecure_registry	= true

添加到ansible分发

7-4-43---35分钟

1、先确保/etc/kubeasz/bin有三个可执行文件
2、添加分发规则(注意:这一步有点绕和复杂、需要有ansible基础)
	ansible分发证书、contained、nerdctl

然后执行03

11、执行03(分发containerd和nerdctl)

注意:执行03不重要、主要是能使用containerd运行容器和nerdctl工具来调用命令

./ezctl  setup  k8s-cluster1  03

执行03主要就是安装容器运行时:如果不熟悉ansible、直接master和node节点手动安装containerd和nerdctl

12、执行04(向master分发文件)

主要:向master分发二进制、配置文件、签发证书。(证书签发、文件同步)

cd /etc/kubeasz
执行04
./ezctl  setup  k8s-cluster1  04

ansible执行对应文件
vim /etc/kubeasz/playbooks/04.kube-master.yml
vim /etc/kubeasz/roles/kube-master/tasks/main.yml

这个时候执行完、master节点已经有容器运行起来了

13、执行05 (node节点)

主要:分发二进制、然后把service文件跑起来(kube-let kube-proxy)

./ezctl  setup  k8s-cluster1  05

vim /etc/kubeasz/playbooks/05.kube-node.yml		###配置文件
注意:可以添加集中式的VIP、都走自己配置的haproxy中的ip(会增加VIP的压力)
	 使用默认的LB、每一个node都会在本机监听一个转发(转发到后端master组里面)

14、网络组件calico(镜像)

为什么部署calico: /etc/kubeasz/clusters/k8s-cluster1/config.yml 文件中写明了部署calico

注意版本:3.24.6、和杰哥的(3.24.5)不一样

docker registry
镜像:下载下来————>打标签————>传达到公司内网
镜像仓库:registry
本地镜像修改tag、然后上传到私有harbor仓库
	 /etc/kubeasz/clusters/k8s-cluster1/config.yml
版本:/etc/kubeasz/roles/calico/templates/calico-v3.24.yaml.j2 

1、修改:地址(kubectl  apply  -f  需要修改)、(这个不用修改、是提前在hsots里面定义好的)

2、修改镜像(上传到公司内部的harbor服务器上)(替换)(一共三个镜像、其中一个被引用两次)
[root@k8s-deploy:/etc/kubeasz]# grep image: roles/calico/templates/calico-v3.24.yaml.j2 
          image: easzlab.io.local:5000/calico/cni:{{ calico_ver }}
          image: easzlab.io.local:5000/calico/node:{{ calico_ver }} 
          image: easzlab.io.local:5000/calico/node:{{ calico_ver }}
          image: easzlab.io.local:5000/calico/kube-controllers:{{ calico_ver }}


先替换版本号、本地修改tag后上传到内部、


3、最后把yml文件修改:把镜像指向harbor服务器的镜像名称
	/etc/kubeasz/roles/calico/templates/calico-v3.24.yaml.j2 
	最后确保文件中是本地镜像

15、最后执行06

./ezctl  setup  k8s-cluster1  06
posted @ 2024-05-27 23:35  姬高波  阅读(92)  评论(0)    收藏  举报