一、组件介绍
- Kube-Apiserver
- Kubernetes API server提供了k8s各类资源对象的增删改查及watch等HTTP Rest接口,这些对象包括Pods、services、replicationcontrollers等
API Sercer为REST操作提供服务,并为集群的共享状态提供前端,所有其他组件都通过该前端进行交互。 - RESTful API:是REST风格的网络接口,REST描述的是在网络中client和server的一种交互形式 - RSET:是一种软件架构风格,或者说是一种规范,其强调HTTP应当以资源为中心,并且规范了URI的风格,规范了HTTP请求动作(GET/PUT/PST/DELETE/HEAD/OPTIONS)的使用,具有对应语义 - apiserver默认端口:6443 - 当有一个操作到来时,会先由apiserver进行认证、鉴权、准入控制 - kubectl如何知道自己访问哪个apiserver?在/root/.kube/config 中指定了api-server地址及访问令牌 API版本: Alpha:预览版,可能包含bug或错误,后期版本会修复且不兼容之前版本 Beta:测试版。如storage.k8s.io/v1beta1,可能存在不稳定或潜在bug,不建议生产 v1:稳定版。如apps/v1 经过验证的stable版本,可以生产环境使用
2.Kube-Controller-manager
负责容器的副本管理 - 包括一些子控制器(副本控制器、节点控制器、命名空间控制器、和服务账号控制器等),控制器作为集群内部的管理控制中,负责集群内Node、Pod副本、服务端点、命名空间、服务账号、起源定额的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群中的Pod副本始终处于预期工作状态。 注意:及时发现不是立即发现! - controller-manager会周期性的检查系Node的状态,如果Node挂了,会重建该Node上所有的Pod - controller-manager控制器每间隔5s检查一次节点的状态 - 如果controller-manager没有收到来自节点的心跳,则将该node节点标记为不可达(标记为不可达之前等待40s) - 如果该Node节点被标记为不可达后5分钟内还没有恢复,那么controller-manager会删除该Node上的所有Pod并在其他可用节点重建这些Pod node monitor period: 节点监视周期 5s nide monitor grace period: 节点监视器宽限,40s pod eviction timeout: pod驱逐超时时间,5s kube-controller以守护进程启动时有很多默认启动参数(可启动指定或在.service中增删改) 如: --pod-eviction-timeout=5min ##node宕机时pod驱逐时间
3.Kube-Schedule
Kubernetes调度器是一个控制面进程,负责讲Pods指派到节点上 主要任务:把我们要创建的Pod分配到指定的Node上,由Node节点上的kubelet接收任务并调用当前的运行时去创建容器 - 通过调度算法为待调度Pod列表的每个Pod从可用Node列表中选择一个最合适的Node,并将信息返回api-server中,apiserver将信息存储到etcd上 注意:Pod列表中有时候是多个Pod,调度Pod时为一个一个调度。调度时会根据节点的信息,如先排除不可用或不符合条件的节点,如果有指定范围的节点,就从指定范围中选,然后根据资源给节点进行打分,最终选择分数高的node进行调度,将结果返回apiserver,apiserver存储入etcd。 - node节点上的kubelet通过API Sercer监听到Kubernetes Scheduler产生的Pod绑定信息,然后获取对应的Pod清单,下载image,并启动容器。 # 策略 - LeastRequestedPriority 优先从备选节点列表中选择资源消耗最少的节点 - CalculateNodeLabelPriority 优先选择含指定Label的节点 - BalancedResourceAllocation 优先从备选节点列表中选择各项资源使用率最均衡的节点 - 具体为使用yaml文件或一个POST请求去创建pod
4.Kube-Proxy
运行在每个节点上,指定服务的访问规则,可以通过一组后端进行简单的tcp、udp、sctp(功能更强)流转发或在一组后端进行循环TCP、UDP和SCTP转发,用户必须使用apiserver API 创建一个服务来配置代理,其实就是kube-proxy通过在主机上维护网络规则并执行连续转发来实现Kubernetes服务访问。 - kube-proxy运行在每个节点上,监听API Server中服务对象的变化,再通过管理IPtables或者ipvs来实现网络的转发 - kube-proxy不同的版本可支持三种工作模式 - USERSpace:k8s v1.1之前使用,k8s1.2以后就已被淘汰 - IPtables:k8s 1.1版本开始支持 1.2版本为默认 - IPVS k8s 1.9引入 1.11为正式版本,需要安装ipvsadm(不装也能用,主要使用ipvsadm命令查看ipvs规则)、ipset工具包和加载ip_vs内核模块 - 还可根据报文的匹配,来决定是否允许用户的访问,或拒绝用户的访问,加了策略可以说只有当前ns服务能够访问,其他ns服务无法访问 overlay:有三个网络 node、svc、pod (均为独立子网) 使用IPVS模式,Kube-Proxy会监视Kubernetes Service对象和Endpoints,调用宿主机内核Netlink接口以相应地创建IPVS规则并定期与Kubernetes Service对象Endpoints对象同步IPVS规则,
以确保IPVS状态与期望一致,访问服务时,流量将被重定向到其中一个后端Pod,IPVS使用哈希表作为底层数据结构并在内核空间中工作,这意味着IPVS可以更快地重定向流量,
并且在同步代理规则时具有更好的性能,此外,IPVS为负载均衡算法提供了更多选项,例如:rr(轮询调度)、Ic (最小连接数)、dh (目标哈希)、sh (源哈希)、sed (最短期望延迟)、nq(不排队调度)等。
5.Kubelet
kubelet是运行在每个worker节点的代理组件,他会监视已分配给节点的Pod,具体功能: - 向master汇报node节点的状态信息 - 接收指令并在Pod中创建docker容器 - 准备Pod所需的数据卷 - 返回Pod的运行状态 - 在node节点执行容器健康检查 - Node上的kubelet会跟apiserver有长连接 - 每个节点的kubelet会不断向api-server汇报当前节点的容器的状态,会不断更新,当Pod出现什么事件,如Pod挂了,都会汇报给api-server
6.etcd
etcd是CoreOS公司开发,目前是Kubernetes默认使用的key-value数据存储系统,用于保存kunernetes所有集群数据,etcd支持分布式集群功能,生产环境使用需要为etcd提供定期备份机制 etcd是兼具一致性和高可用性的兼职数据库,可作为保存kubernetes所有集群数据库的后台数据库。通常需要有个备份计划。 https://etcd.io/ #官网 https://github.com/etcd-io/etcd ##github # 写数据过程 主库写了,复制到从库,3个节点要复制两次,才能完成一份数据的写入,如果是5个节点,要复制4次,这就是写放大,写的性能直线下降但读性能有很大提升,5个库都可以读 复制集群或者镜像集群:每个节点的数据都是完全一样的时间,备份数据从哪个etcd节点上复制都行
7.coredns
dns发展:skydns、kube-dns、coredns
主要作用:在k8s中负责域名的解析,有了dns就可在容器内部通过svc名去访问其他容器的服务,规则为 pod名.svc名.namespace名.svc.cluster.local (一般都是通过svc去访问,所以一般不加pod名)
8.dashboard
功能相对较少,只有一些管理的操作,一般通过命令行去管理操作
pod调度流程
0、controllermanager、scheduler、kubelet发起watch分Replicaset 、pod(destNode="") pod(destNode="myNode")
1、kubectl创建Replicaset,由apiserver接收
2、apiserver将该信息存入etcd
3、etcd上报事件到apiserver
4、apiserver上报事件replicaset create,
5、controllermanager获得事件,创建出pod,并返回apiserver
6、apiserver将该创建pod信息返回ETCD
7、etcd上报pod create事件到apiserver
8、apiserver上报 pod create 事件
9、scheduler订阅该事件,收到后将调度结果(pod bound node)返回apiserver
10、apiserver将更新的pod信息返回etcd
11、etcd收到事件后,上报pod bound node 事件到apiserver
12、kubelet订阅apiserver,收到该pod调度到自己节点上的信息
13、kubelet调用底层容器服务(如docker)将容器创建出来
二、K8S集群搭建
1、集群资源规划
系统选用ubuntu-server_20.04.3
由于是在自己的虚拟机上搭建,给的资源相对较少,可根据自己的需要提升机器资源配置
角色 | IP | 内存 | CPU |
master-01 etcd-01 | 192.168.1.10 | 3 | 2 |
master-02 etcd-02 | 192.168.1.11 | 3 | 2 |
master-03 etcd-03 | 192.168.1.12 | 3 | 2 |
harbor-01 | 192.168.1.13 | 1 | 1 |
haproxy-01 | 192.168.1.15 | 1 | 1 |
haproxy-02 | 192.168.1.16 | 1 | 1 |
worker-01 | 192.168.1.20 | 2 | 2 |
worker-02 | 192.168.1.21 | 2 | 2 |
vip | 192.168.1.22 192.168.1.23 192.168.1.24 |
集群图示
2.安装keepalived+haproxy
1、将所有的https源改为http源
sed -i 's/https/http/g' /etc/apt/sources.list apt update
2、安装keepalived
1、在haproxy-01、haproxy-02中安装keepalived root@haproxy-01:/etc/keepalived# apt install -y keepalived 2、拷贝配置文件 root@haproxy-01:~# cd /etc/keepalived/ root@haproxy-01:/etc/keepalived# ls /usr/share/doc/keepalived/samples/keepalived.conf.vrrp root@haproxy-01:/etc/keepalived# cp !$ ./ root@haproxy-01:/etc/keepalived# cp keepalived.conf.vrrp keepalived.conf 3、修改配置文件 vim /etc/keepalived/keepalived.conf
keepalived配置文件
! 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 ##拷贝到另一台主机位BACKUP 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 { 192.168.1.22 dev eth0 label eth0:0 192.168.1.23 dev eth0 label eth0:1 192.168.1.24 dev eth0 label eth0:2 # optional label. should be of the form "realdev:sometext" for # compatibility with ifconfig. } } }
4、复制到haproxy-02,修改两处配置
state BACKUP
priority 80
5、测试keepalived的vip漂移
# 手动关闭haproxy-01上的keepalived
systemctl stop keepalived.service
6、查看haproxy-01与haproxy-02的IP状态
测试成功!
7、手动恢复haproxy-01的keepalived
systemctl start keepalived.service
8、查看vip是否回来
9、在两台机器上设置开启自启动
systemctl enable keepalived
systemctl enable haproxy
3.安装haproxy
1、在haproxy-01、haproxy-02上安装haproxy
apt install -y haproxy
2、备份配置文件
root@haproxy-01:/etc/haproxy# cp haproxy.cfg haproxy.cfg.bak
3、修改配置文件(在最后添加)
listen k8s-api-6443 bind 192.168.1.22:6443 mode tcp server master1 192.168.1.10:6443 check inter 3s fall 3 rise 1 server master2 192.168.1.11:6443 check inter 3s fall 3 rise 1 server master3 192.168.1.12:6443 check inter 3s fall 3 rise 1
4、重启haproxy服务
root@haproxy-01:/etc/haproxy# systemctl restart haproxy
systemctl status haproxy.service
5、查看地址是否监听
root@haproxy-01:/etc/haproxy# ss -tln
6、将配置文件拷贝过去haproxy-02
7、重启haproxy-02上的haproxy服务
发现启动失败:原因为该节点没有vip,而linux默认不监听自身没有的ip
8、查看日志
9、解决,开启内核中的一个参数
sysctl -a |grep load_bind
net.ipv4.ip_nonlocal_bind = 0 #为0是不允许应用程序监听在本机没有的地址上去,需要改为1
10、修改(注意,两台主机都要改,防止vip飘走时另一主机无法使用)
echo net.ipv4.ip_nonlocal_bind = 1 >> /etc/sysctl.conf
11、生效
sysctl -p #内核参数生效
12、重启没有vip的节点上的haproxy
systemctl restart haproxy.service
13、在两台机器上设置开机自启动
4.安装harbor
1、安装docker及docker-compose (通过已有安装包进行安装)
2、从github下载harbor安装包
harbor-offline-installer-v2.4.2.tgz
3、解压
root@harbor-01:/usr/local/harbor# tar xf harbor-offline-installer-v2.4.2.tgz
4、进入harbor目录
root@harbor-01:/usr/local/harbor# cd harbor/
5、使用自签名证书部署https的harbor
root@harbor-01:/usr/local/harbor/harbor# mkdir certs
root@harbor-01:/usr/local/harbor/harbor# cd certs/
root@harbor-01:/usr/local/harbor/harbor/certs# openssl genrsa -out ./harbor-ca.key
root@harbor-01:/usr/local/harbor/harbor/certs# openssl req -x509 -new -nodes -key ./harbor-ca.key -subj "/CN=harbor.mageedu.local" -days 7120 -out ./harbor-ca.crt
6、备份配置文件
root@harbor-01:/usr/local/harbor/harbor# cp harbor.yml.tmpl harbor.yml
7、修改配置文件(部分修改记录)
hostname: 192.168.1.13 certificate: /usr/local/harbor/harbor/certsharbor-ca.crt private_key: /usr/local/harbor/harbor/certs/harbor-ca.key harbor_admin_password: 123456 data_volume: /data
8、安装
root@harbor-01:/usr/local/harbor/harbor# ./install.sh --help Note: Please set hostname and other necessary attributes in harbor.yml first. DO NOT use localhost or 127.0.0.1 for hostname, because Harbor needs to be accessed by external clients. Please set --with-notary if needs enable Notary in Harbor, and set ui_url_protocol/ssl_cert/ssl_cert_key in harbor.yml bacause notary must run under https. Please set --with-trivy if needs enable Trivy in Harbor Please set --with-chartmuseum if needs enable Chartmuseum in Harbor ## --with-notary ##是否验证请求,强制验证你的请求是不是ssl,会验证你的key,可以不开 ## --with-trivy ##扫描镜像组件,一定打开 ## --with-chartmuseum ##支持helm使用,一定打开 root@harbor-01:/usr/local/harbor/harbor# ./install.sh --with-trivy --with-chartmuseum
5.kubeasz安装k8s集群准备工作--安装ansible
## 以master-01为部署节点
1、安装ansible
root@master-01:~# apt install -y ansible
2、生成密钥
root@master-01:~# ssh-keyge
3、设置ansible的配置文件
host_key_checking = False ##开启这个参数,在未验证过的主机不需要yes确认
4、、设置好被控制的机器
5、、下发密钥(需配置好hosts,并将第3步完成才可使用下面命令,否则使用ssh-copy-id手动传到各个节点)
ansible all -m authorized_key -k -a "user=root key='{{ lookup('file', '/root/.ssh/id_rsa.pub') }}' path='/root/.ssh/authorized_keys' manage_dir=no"
6、给python3.8做软连接
root@master-01:/etc/ansible# ansible all -m shell -a 'ln -sv /usr/bin/python3.8 /usr/bin/python'
6.kubeasz安装k8s集群准备工作--下载kubeasz并配置
1、修改要下载的ezdown的版本(版本跟k8s对应)
root@master-01:/etc/ansible# export release=3.2.0
2、下载ezdown
root@master-01:/etc/ansible# wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
3、可在脚本文件中修改需要安装的k8s版本,这里将docker版本改为19.03.15
4、给脚本加执行泉下
chmode +x ezdown
5、查看参数
./ezdown --help
6、下载包到/etc/kubeasz
./ezdown -D
原理:使用docker去下载镜像,用此镜像启动一个容器,将容器里面的东西拷贝到本地 docker安装,下载完后解压,将二进制放到指定位置,再将docker.service复制到/etc/systemd/system/docker.service 下载完成后,在/etc/kubeasz/bin 下,已经有很多可执行程序,到时候安装会直接从该目录下拷贝
7、创建一个集群环境
cd /etc/kubeasz root@master-01:/etc/kubeasz# ./ezctl new clustername root@master-01:/etc/kubeasz# ./ezctl new k8s-cluster1
创建完成后会生成该集群名的目录(./cluster/k8s-cluster1),会将./example/hosts.multi.node ./example/config.yml拷贝到这个目录下,前者是ansible所需要的文件,后者是集群的配置文件(集群有效期,网络参数等)
8、下载完成后,需要修改东西(进行集群规划)
进入你的集群目录
root@master-01:/etc/kubeasz# cd clusters/k8s-cluster1/
9、修改hosts
注意:此时master只有两台,是为了后期学习如何在集群加入master节点。
vim hosts
# 'etcd' cluster should have odd member(s) (1,3,5,...) [etcd] 192.168.1.10 ##修改 192.168.1.11 ##修改 192.168.1.12 ##修改 # master node(s) [kube_master] 192.168.1.10 ##修改 192.168.1.11 ##修改 # work node(s) [kube_node] 192.168.1.20 ##修改 192.168.1.21 ##修改 # [optional] harbor server, a private docker registry # 'NEW_INSTALL': 'true' to install a harbor server; 'false' to integrate with existed one [harbor] #192.168.1.8 NEW_INSTALL=false # [optional] loadbalance for accessing k8s from outside [ex_lb] 192.168.1.6 LB_ROLE=backup EX_APISERVER_VIP=192.168.1.22 EX_APISERVER_PORT=6443 ##修改 192.168.1.7 LB_ROLE=master EX_APISERVER_VIP=192.168.1.22 EX_APISERVER_PORT=6443 ##修改 # [optional] ntp server for the cluster [chrony] #192.168.1.1 [all:vars] # --------- Main Variables --------------- # Secure port for apiservers SECURE_PORT="6443" # Cluster container-runtime supported: docker, containerd CONTAINER_RUNTIME="docker" ##修改 # 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.100.0.0/16" ##修改 # Cluster CIDR (Pod CIDR), not overlap with node(host) networking CLUSTER_CIDR="10.200.0.0/16" ##修改 # NodePort Range NODE_PORT_RANGE="30000-40000" ##修改。默认30000-32767 # Cluster DNS Domain CLUSTER_DNS_DOMAIN="cluster.local" # -------- Additional Variables (don't change the default value right now) --- # Binaries Directory bin_dir="/usr/local/bin" ##修改,将第三方与系统命令区分开 # Deploy Directory (kubeasz workspace) base_dir="/etc/kubeasz" # Directory for a specific cluster cluster_dir="{{ base_dir }}/clusters/k8s-cluster1" # CA and other components cert/key Directory ca_dir="/etc/kubernetes/ssl"
- 启用仓库镜像(ENABLE_MIRROR_REGISTRY: true),会加一些mirrors,加速镜像下载,启动之后,有些配置是可以改的
在 /etc/kubeasz/playbooks/03.runtime.yml中
当你想修改docker安装的daemon.json,可以直接改 /etc/kubeasz/roles/docker/templates/daemon.json.j2
10.修改config.yml
############################ # prepare ############################ # 可选离线安装系统软件包 (offline|online) INSTALL_SOURCE: "online" # 可选进行系统安全加固 github.com/dev-sec/ansible-collection-hardening OS_HARDEN: false # 设置时间源服务器【重要:集群内机器时间必须同步】 ntp_servers: - "ntp1.aliyun.com" - "time1.cloud.tencent.com" - "0.cn.pool.ntp.org" # 设置允许内部时间同步的网络段,比如"10.0.0.0/8",默认全部允许 local_network: "0.0.0.0/0" ############################ # role:deploy ############################ # default: ca will expire in 100 years # default: certs issued by the ca will expire in 50 years CA_EXPIRY: "876000h" CERT_EXPIRY: "876000h" # kubeconfig 配置参数 CLUSTER_NAME: "k8s-cluster1" # 改 CONTEXT_NAME: "context-{{ CLUSTER_NAME }}" # k8s version K8S_VER: "1.23.1" ############################ # role:etcd ############################ # 设置不同的wal目录,可以避免磁盘io竞争,提高性能 ETCD_DATA_DIR: "/var/lib/etcd" ETCD_WAL_DIR: "" ############################ # role:runtime [containerd,docker] ############################ # ------------------------------------------- containerd # [.]启用容器仓库镜像 ENABLE_MIRROR_REGISTRY: true # [containerd]基础容器镜像 SANDBOX_IMAGE: "easzlab/pause:3.6" # [containerd]容器持久化存储目录 CONTAINERD_STORAGE_DIR: "/var/lib/containerd" # ------------------------------------------- docker # [docker]容器存储目录 DOCKER_STORAGE_DIR: "/var/lib/docker" # [docker]开启Restful API ENABLE_REMOTE_API: false # [docker]信任的HTTP仓库 INSECURE_REG: '["127.0.0.1/8","192.168.1.14"]' # 改 ############################ # role:kube-master ############################ # k8s 集群 master 节点证书配置,可以添加多个ip和域名(比如增加公网ip和域名) MASTER_CERT_HOSTS: - "192.168.1.22" # 改 - "k8s.test.io" #- "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: 500 # 配置为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" # haproxy balance mode BALANCE_ALG: "roundrobin" ############################ # role:network [flannel,calico,cilium,kube-ovn,kube-router] ############################ # ------------------------------------------- flannel # [flannel]设置flannel 后端"host-gw","vxlan"等 FLANNEL_BACKEND: "vxlan" DIRECT_ROUTING: false # [flannel] flanneld_image: "quay.io/coreos/flannel:v0.10.0-amd64" flannelVer: "v0.15.1" flanneld_image: "easzlab/flannel:{{ flannelVer }}" # [flannel]离线镜像tar包 flannel_offline: "flannel_{{ flannelVer }}.tar" # ------------------------------------------- calico # [calico]设置 CALICO_IPV4POOL_IPIP=“off”,可以提高网络性能,条件限制详见 docs/setup/calico.md CALICO_IPV4POOL_IPIP: "Always" # [calico]设置 calico-node使用的host IP,bgp邻居通过该地址建立,可手工指定也可以自动发现 IP_AUTODETECTION_METHOD: "can-reach={{ groups['kube_master'][0] }}" # [calico]设置calico 网络 backend: brid, vxlan, none CALICO_NETWORKING_BACKEND: "brid" # [calico]更新支持calico 版本: [v3.3.x] [v3.4.x] [v3.8.x] [v3.15.x] calico_ver: "v3.19.3" # [calico]calico 主版本 calico_ver_main: "{{ calico_ver.split('.')[0] }}.{{ calico_ver.split('.')[1] }}" # [calico]离线镜像tar包 calico_offline: "calico_{{ calico_ver }}.tar" # ------------------------------------------- cilium # [cilium]CILIUM_ETCD_OPERATOR 创建的 etcd 集群节点数 1,3,5,7... ETCD_CLUSTER_SIZE: 1 # [cilium]镜像版本 cilium_ver: "v1.4.1" # [cilium]离线镜像tar包 cilium_offline: "cilium_{{ cilium_ver }}.tar" # ------------------------------------------- kube-ovn # [kube-ovn]选择 OVN DB and OVN Control Plane 节点,默认为第一个master节点 OVN_DB_NODE: "{{ groups['kube_master'][0] }}" # [kube-ovn]离线镜像tar包 kube_ovn_ver: "v1.5.3" kube_ovn_offline: "kube_ovn_{{ kube_ovn_ver }}.tar" # ------------------------------------------- kube-router # [kube-router]公有云上存在限制,一般需要始终开启 ipinip;自有环境可以设置为 "subnet" OVERLAY_TYPE: "full" # [kube-router]NetworkPolicy 支持开关 FIREWALL_ENABLE: "true" # [kube-router]kube-router 镜像版本 kube_router_ver: "v0.3.1" busybox_ver: "1.28.4" # [kube-router]kube-router 离线镜像tar包 kuberouter_offline: "kube-router_{{ kube_router_ver }}.tar" busybox_offline: "busybox_{{ busybox_ver }}.tar" ############################ # role:cluster-addon ############################ # coredns 自动安装 dns_install: "no" # 改 corednsVer: "1.8.6" ENABLE_LOCAL_DNS_CACHE: false ##生产环境可以打开 dnsNodeCacheVer: "1.21.1" # 设置 local dns cache 地址 LOCAL_DNS_CACHE: "169.254.20.10" # metric server 自动安装 metricsserver_install: "no" # 改 metricsVer: "v0.5.2" # dashboard 自动安装 dashboard_install: "no" # 改 dashboardVer: "v2.4.0" dashboardMetricsScraperVer: "v1.0.7" # ingress 自动安装 ingress_install: "no" ingress_backend: "traefik" traefik_chart_ver: "10.3.0" # prometheus 自动安装 prom_install: "no" prom_namespace: "monitor" prom_chart_ver: "12.10.6" # nfs-provisioner 自动安装 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" ############################ # role:harbor ############################ # harbor version,完整版本号 HARBOR_VER: "v2.1.3" HARBOR_DOMAIN: "harbor.yourdomain.com" HARBOR_TLS_PORT: 8443 # if set 'false', you need to put certs named harbor.pem and harbor-key.pem in directory 'down' HARBOR_SELF_SIGNED_CERT: true # install extra component HARBOR_WITH_NOTARY: false HARBOR_WITH_TRIVY: false HARBOR_WITH_CLAIR: false HARBOR_WITH_CHARTMUSEUM: true
11.由于我们自己安装了负载均衡器,所以不需要帮我们初始化负载均衡器
/etc/kubeasz/playbooks/01.prepare.yml
# [optional] to synchronize system time of nodes with 'chrony' - hosts: - kube_master - kube_node - etcd # - ex_lb 注释 # - chrony 注释 roles: - { role: os-harden, when: "OS_HARDEN|bool" } - { role: chrony, when: "groups['chrony']|length > 0" } # to create CA, kubeconfig, kube-proxy.kubeconfig etc. - hosts: localhost roles: - deploy # prepare tasks for all nodes - hosts: - kube_master - kube_node - etcd roles: - prepare
至此,准备工作完毕
7.使用kubeasz安装k8s集群
1、第一步,基础环境准备
root@master-01:/etc/kubeasz# ./ezctl setup k8s-cluster1 01 这些会执行/etc/kubeasz/roles/prepare/tasks/ 下定义的任务 /etc/kubeasz/roles/prepare/templates/95-k8s-sysctl.conf.j2 ##内核参数配置
基础环境部署的yaml文件位置
2、安装etcd
root@master-01:/etc/kubeasz# ./ezctl setup k8s-cluster1 02
3、安装docker,当机器安装过docker不会再次安装
root@master-01:/etc/kubeasz# ./ezctl setup k8s-cluster1 03
4、安装master
root@master-01:/etc/kubeasz# ./ezctl setup k8s-cluster1 04
5、安装node
root@master-01:/etc/kubeasz# ./ezctl setup k8s-cluster1 05
6、安装calico
root@master-01:/etc/kubeasz# ./ezctl setup k8s-cluster1 06
至此,基本的k8s高可用集群已经部署完毕!