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 #将服务设置为开机自启
2.2、配置ha
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
下载
部署节点: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主要就是环境地址和组件相关的配置
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
图一
图二
图四
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

浙公网安备 33010602011771号