2022-04-10K8S基础
云原生特点:1、容器化:以docker、contained为代表的容器运行技术2、服务网格:比如service mesh等3、微服务:在微服务体系结构中,一个项目是由多个松耦合且可独立部署的较小组件或者服务组成4、不可变基础设施:不可变的基础设施可以理解为一个应用运行所需要的基础运行需求,不可变最基本就是指运行服务的服务器在完成部署后,就不在进行更改,比如镜像等5、声明式API:描述应用程序的运行
云原生特点:
1、容器化:以docker、contained为代表的容器运行技术
2、服务网格:比如service mesh等
3、微服务:在微服务体系结构中,一个项目是由多个松耦合且可独立部署的较小组件或者服务组成
4、不可变基础设施:不可变的基础设施可以理解为一个应用运行所需要的基础运行需求,不可变最基本就是指运行服务的服务器在完成部署后,就不在进行更改,比如镜像等
5、声明式API:描述应用程序的运行状态,并且由系统来决定如何创建这个环境,例如声明一个pod,会有k8s执行创建并维持副本。
12因素应用:
1、基准代码:一份基准代码,多份部署(用同一个代码库进行版本控制,并可进行多次部署).
2、依赖:、显式地声明和隔离相互之间的依赖。
3、配置:在环境中存储配置.
4、后端服务:把后端服务当作一种附加资源。
5、构建,发布,运行:对程序执行构建或打包,并严格分离构建和运行.
6、进程:以一个或多个无状态进程运行应用.
7、端口绑定:通过端口绑定提供服务。
8、并发:通过进程模型进行扩展。
9、易处理:快速地启动,优雅地终止,最大程度上保持健壮性。
10、开发环境与线上环境等价:?4尽可能的保特甲发河预发布,线上环境相同。
11、日志:将所有运行中进程和后端服务的输出流按照时间顺序统一收集存储和展示.
12、管理进程:一次性管理进程(数据备份等)应该和正常的常驻进程使用同样的运行环境.
Kubernetes 特性
自动化上线和回滚
Kubernetes 会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。如果出现问题,Kubernetes 会为你回滚所作更改。你应该充分利用不断成长的部署方案生态系统。
服务发现与负载均衡
无需修改你的应用程序即可使用陌生的服务发现机制。Kubernetes 为容器提供了自己的 IP 地址和一个 DNS 名称,并且可以在它们之间实现负载均衡。
存储编排
自动挂载所选存储系统,包括本地存储、诸如 GCP 或 AWS 之类公有云提供商所提供的存储或者诸如 NFS、iSCSI、Gluster、Ceph、Cinder 或 Flocker 这类网络存储系统。
Secret 和配置管理
部署和更新 Secrets 和应用程序的配置而不必重新构建容器镜像,且 不必将软件堆栈配置中的秘密信息暴露出来。
自动装箱
根据资源需求和其他约束自动放置容器,同时避免影响可用性。 将关键性的和尽力而为性质的工作负载进行混合放置,以提高资源利用率并节省更多资源。
批量执行
除了服务之外,Kubernetes 还可以管理你的批处理和 CI 工作负载,在期望时替换掉失效的容器。
IPv4/IPv6 双协议栈
为 Pod 和 Service 分配 IPv4 和 IPv6 地址
水平扩缩
使用一个简单的命令、一个 UI 或基于 CPU 使用情况自动对应用程序进行扩缩。
自我修复
重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器,并且在它们准备好服务之前不会将它们公布给客户端。
为扩展性设计
无需更改上游源码即可扩展你的 Kubernetes 集群。
K8S Master 组件简介
Kube-ApiServer(默认端口6443)
一个访问入口,提供了K8S各类资源对象的增删改查以及watch等HTTP Rest接口,这些对象包括pods、services、replicationtrollers等,API Server为REST提供服务,并为集群的共享状态提供前端,所以其他组件都通过该前端进行交互。
用户访问k8s先访问apiserver,apiserver只负责鉴权和请求准入,不负责执行命令,创建pod。apiserver将数据存到etcd中。
请求过程:接收到请求apiserver先鉴权用户权限,然后验证请求合法性(语法和参数),最后返回执行结果。
#apiserver地址
[root@k8s-master1 ~]# grep server /root/.kube/config
server: https://192.168.226.131:6443
总结:
- 默认IP地址为非本地网络端口,通过启动参数“--bind-address”修改
- 默认端口6443,可通过启动参数"--secure-port"修改
- 该端口用于接收客户端、dashboard等外部https请求
- 用于基于策略的授权
- 用于基于tocken文件或者客户端证书以及HTTP Base认证
Kube-Scheduler
K8S调度器是一个控制面进程,负责将Pods指派到节点上。调度器基于约束和可用资源为调度队列中每个Pod确定其可合法放置的节点。调度器之后对所有合法节点进行排序,将Pod绑定在一个合适的节点。在同一个集群可以使用多个不同的调度器。
Pod创建流程:
- 通过调度算法(先根据指定策略选择,否则默认)为待调度Pod列表的每个Pod从可用Node列表中选择一个合适的Node(先过滤不符合条件节点,在选择资源多的节点),并通过api server将信息写入etcd中。
- node节点上的kubelet通过API server监听到scheduler产生的Pod绑定信息,然后获取对应的Pod清单,下载镜像,并启动容器
策略:
- LeastRequestPriority:优先从备选节点列表中选择资源消耗最小的节点(CPU+内存)
- CalculateNodeLabelPriority:优先选择含有指定Label的节点
- BalancedResourceAllocation:优先从备选节点列表中选择各项资源使用率最均衡的节点(先排除不符合条件的节点,在剩余可用选出最符合条件的节点
Kube-Controller-Manager
K8S控制器管理器是一个守护进程,内嵌随K8S一起发布的核心控制回路。在机器人和自动化应用中,控制回路是一个永不休止的循环,用于调节系统状态。在K8S中,每个控制器是一个控制回路,通过API服务器监视集群的共享状态,并尝试进行更改以将当前状态改为期望状态。
目前,K8S自带的控制器包括副本控制器、节点控制器、命名空间控制器和服务账号控制器,控制器作为集群内部的管理控制中心,负责集群内Node、Pod副本、服务断电、命名空间、服务账号、资源定额的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群中pod副本始终处于预期的工作状态。
Kube-Controller-Manager高可用机制:
- Controller Manager控制器每间隔5秒(节点监视周期)检查一次节点的状态
- 如果Controller Manager没有收到节点的心跳,则将该node节点标记为不可达
- Controller Manager将在标记为无法访问状态前等待40秒(节点监视器宽限期)
- 如果该node节点被标记为无法访问后5分钟(默认pod驱逐超时时间,可修改)内还没恢复,Controller Manager会删除当前故障节点的所有pod并在其他可用节点重建pod
K8S Node 组件简介
Kube-Proxy
为了保证通信,master节点也会启动proxy和kubelet,也会创建pod
K8S的node节点的网络代理。网络代理反应每个节点上的K8S API中定义的服务,并且可以执行简单的TCP、UDP和SCTP流转发,或者在一组后端进行循环TCP、UDP和SCTP转发。当前可通过Docker-links-compatible环境变量找到服务集群和端口,这些环境变量指定了服务代理打开的端口。有一个可选的插件为这些集群IP提供集群DNS,用户必须使用apiserver API创建服务才能配置代理。
Kube-Proxy 运行在每个节点上,监听API Server中服务对象的变化,在通过管理iptables或者ipvs规则来实现网络转发。其实就是Kube-Proxy通过在主机上维护网络规则并执行链接转发实现K8S服务访问。
K8S网络类型:宿主机网络、pod网络、service网络。overlay 叠加网络
iptables和ipvs区别
- IPVS相对IPtables效率会更高一些,使用IPVS模式需要在运行 Kube-Proxy 的节点上安装ipvsadm、ipset工具包和加载ip_vs内核模块,当Kube-Proxy 以 IPVS代理模式启动时,。Kube-Proxy将验证节点上是否安装了IPVS模块,如果未安装,则Kube-Proxy将回退到lPtables代理模式。
- 使用IPVS模式, Kube-Proxy会监视Kubernetes Service对象和Endpoints,调用宿主机内核Netlink接口以相应地创建IPVS规则并定期与Kubernetes Service对象 Endpoints对象同步IPVS规则,以确保IPVS状态与期望一致,访问服务时,流量将被重定向到其中一个后端Pod,IPVS使用哈希表作为底层数据结构并在内核空间中工作,这意味着IPVS可以更快地重定向流量,并且在同步代理规则时具有更好的性能,此外,IPVS为负载均衡算法提供了更多选项,例如: rr(轮询调度)、lc(最小连接数)、dh(目标哈希)、sh(源哈希)、sed(最短期望延迟)、nq(不排队调度)等。
Kubelet
Kubelet是运行在每个worker节点的代理组件,他会监视已分配的节点pod:1、向master汇报node节点状态信息,2、接受指令并在Pod中创建docker容器,3、准备Pod所需的数据卷,4、返回Pod的运行状态,5、在node节点执行容器健康检查。
其实就是运行在node节点客户端,接受api server的指令并调docker创建容器,统计资源和健康状态汇报给api server
K8S管理组件
Kubectl
Kubectl是通过命令行对K8S集群管理的客户端工具。
在使用Kubectl执行命令时会加载/root/.kube/config文件,通过读取api server地址并访问进行认证
K8S数据库
ETCD
目前是K8S默认使用的key-value数据存储系统,用户保存K8S所有的集群数据,ectd支持分布式集群功能,生产环境使用时需要为etcd数据提供定期备份机制。
K8S DNS
目前使用的CoreDNS,主要是用来服务之间的访问,通过service名称解析到pod的IP地址
K8S 前端
Dashbord
K8S高可用集群 部署
使用Kubeadm部署的集群apiserver、kubescheduler和controllermanager时使用容器进行运行,后期环境变更比较麻烦。Kubeadm默认证书有效期一年,到期修改只能改源码。
现网高可用集群可选规格
注意:
- 3台etcd就可以保证高可用,服务器越多写的效率越低,只有在读多的情况下才体现服务器数量优势
- harbor保证高可用,可以通过复制管理来实现,也可以通过共享存储实现
1、负载均衡器 部署
为保证高可用,部署keepalived主备节点,haproxy进行负载均衡
keepalived 安装
yum install keepalived -y #安装keepalived
配置主节点keepalived
vrrp_instance VI_1 {
state MASTER #指定instance初始状态,实际根据优先级决定.backup节点不一样
interface ens33 #虚拟IP所在网,根据实际配置
virtual_router_id 51 #VRID,相同VRID为一个组,决定多播MAC地址
priority 100 #优先级,另一台改为90.backup节点不一样
advert_int 1 #检查间隔
authentication {
auth_type PASS #认证方式,可以是pass或ha
auth_pass 1111 #认证密码
}
virtual_ipaddress {
192.168.226.201 dev ens33 label ens33:0 #浮动IP
192.168.226.202 dev ens33 label ens33:1
192.168.226.203 dev ens33 label ens33:2
}
}
配置备节点
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.226.201 dev ens33 label ens33:0
192.168.226.202 dev ens33 label ens33:1
192.168.226.203 dev ens33 label ens33:2
}
}
systemctl stop keepalived
systemctl start keepalived
Haproxy 安装
yum install haproxy -y #安装haproxy
/etc/haproxy/haproxy.cfg #修改配置项
listen k8s_api_6443
bind 192.168.226.201:6443 #绑定vip的443端口
mode tcp
server master1 192.168.226.136:6443 check inter 2000 fall 3 rise 5 #设置健康检查,检查间隔2000ms,失败3次,成功5次恢复
server master2 192.168.226.138:6443 check inter 2000 fall 3 rise 5
2、Harbor部署
2.1、部署docker和docker-compose
#docker部署
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
#安装docker-compose
apt install docker-compose
部署Harbor
生成https证书
openssl genrsa -out /opt/harbor/certs/harbor-pri.key
openssl req -x509 -new -nodes -key ./harbor-pri.key -subj "/CN=k8s-harbor.com" -days 71200 -out ./harbor-ca.crt
./install.sh --with-trivy --with-chartmuseum
登录harbor
以haobor域名创建目录
mkdir -p /etc/docker/certs.d/k8s-harbor.com
#将公钥拷贝到创建的目录
scp harbor-ca.crt ip:/etc/docker/certs.d/k8s-harbor.com
#配置dns解析
[root@k8s-master1 k8s-harbor.com]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
180.76.172.110 k8s-harbor.com
如果登录报以下错误,因为 go 1.15 版本开始废弃 CommonName,因此推荐使用 SAN 证书。 如果想兼容之前的方式,需要设置环境变量 GODEBUG 为 x509ignoreCN=0。
#解决方法
#重新生成san证书
openssl req -x509 -out harbor-ca.crt -keyout harbor-pri.key -days 7825 \
-newkey rsa:2048 -nodes -sha256 \
-subj '/CN=k8s-harbor.com' -extensions EXT -config <( \
printf "[dn]\nCN=k8s-harbor.com\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:k8s-harbor.com\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
#生成后将证书拷贝到master指定目录,并重新部署harbor
[root@k8s-master1 k8s-harbor.com]# docker login k8s-harbor.com
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
二进制部署K8S集群
分支和tag区别
tag代表了当前的提交点,是个点,tag是当前提交点的一个记录,tag名字是不能重复的,就代表了唯一的这个点
branch代表里新的支线,是个线,可以继续延展
当在某个分支上打了个tag,那么这个tag就代表了当前这个分支的这个点
当回滚或者检出到这个tag的时候,代码就会回到这个点
tag是静态的,branch要向前走;
稳定版本备份用tag,新功能多人开发用branch(开发完成后merge到master)。
准备工作
#安装校时工具保证所有节点时区和时间一致,部署配置中也有这一项,可选操作
#安装ansible
yum install -y epel-release
yum install -y ansible
#设置部署机器到其他机器免密登录
ssh-keygen
ssh-copy-id 192,168,226,136 #本机也要设置
ssh-copy-id 192.168.226.137
ssh-copy-id 192.168.226.138
ssh-copy-id 192.168.226.139
#docker部署
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
kubeasz 批量部署K8S集群
下载项目源码、二进制及离线镜像
# 下载工具脚本ezdown,使用kubeasz版本3.2.0
export release=3.2.0
curl -C- -fLO --retry 3 https://github.com/easzlab/kubeasz/releases/download/3.2.0/ezdown
chmod +x ./ezdown
# 使用工具脚本下载
./ezdown -D
# 下载最新版本
./ezdown -P
创建集群配置实例
ezctl new k8s-cluster1
cat hosts
# 'etcd' cluster should have odd member(s) (1,3,5,...)
[etcd]
192.168.226.136
192.168.226.138 #配置etcd地址
# master node(s)
[kube_master]
192.168.226.136
192.168.226.138 #配置master地址
# work node(s)
[kube_node]
192.168.226.137
192.168.226.139 #配置node节点地址
# [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.226.201 EX_APISERVER_PORT=6443
192.168.1.7 LB_ROLE=master EX_APISERVER_VIP=192.168.226.201 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公有云选择flannel,私有云选择calico
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网段
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-60000"
# Cluster DNS Domain
CLUSTER_DNS_DOMAIN="k8s.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"
[root@k8s-master1 k8s-cluster1]# cat config.yml
############################
# prepare
############################
# 可选离线安装系统软件包 (offline|online)
INSTALL_SOURCE: "online"
# 可选进行系统安全加固 github.com/dev-sec/ansible-collection-hardening
OS_HARDEN: false
# 设置时间源服务器【重要:集群内机器时间必须同步】可在初始化配置中修改 /etc/kubeasz/playbooks/01.prepare.yml
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: "438000h"
# kubeconfig 配置参数 k8s集群名称
CLUSTER_NAME: "k8s-cluster1"
CONTEXT_NAME: "context-{{ CLUSTER_NAME }}"
# k8s version k8s版本
K8S_VER: "1.23.1"
############################
# role:etcd
############################
# 设置不同的wal目录,可以避免磁盘io竞争,提高性能 etcd存储目录,没有自己创建
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","124.222.192.66"]'
############################
# role:kube-master
############################
# k8s 集群 master 节点证书配置,可以添加多个ip和域名(比如增加公网ip和域名)
MASTER_CERT_HOSTS:
- "192.168.226.201"
- "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: 110
# 配置为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包/etc/kubeasz/down
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 #开启会通过缓存减轻dns负载,生产环境建议打开
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
#通过执行命令分步骤安装
root@k8s-master1 kubeasz]# ezctl help setup
Usage: ezctl setup <cluster> <step>
available steps:
01 prepare to prepare CA/certs & kubeconfig & other system settings
02 etcd to setup the etcd cluster
03 container-runtime to setup the container runtime(docker or containerd)
04 kube-master to setup the master nodes
05 kube-node to setup the worker nodes
06 network to setup the network plugin
07 cluster-addon to setup other useful plugins
90 all to run 01~07 all at once
10 ex-lb to install external loadbalance for accessing k8s from outside
11 harbor to install a new harbor server or to integrate with an existed one
examples: ./ezctl setup test-k8s 01 (or ./ezctl setup test-k8s prepare)
./ezctl setup test-k8s 02 (or ./ezctl setup test-k8s etcd)
./ezctl setup test-k8s all
./ezctl setup test-k8s 04 -t restart_master
验证K8S集群状态
#验证节点状态,确认都是Ready
[root@k8s-master1 kubeasz]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
192.168.226.136 Ready,SchedulingDisabled master 22h v1.23.1
192.168.226.137 Ready node 22h v1.23.1
192.168.226.138 Ready,SchedulingDisabled master 22h v1.23.1
192.168.226.139 Ready node 22h v1.23.1
#创建pod并确认能够启动
kubectl run net-test1 --image=centos sleep 3600000
kubectl run net-test2 --image=centos sleep 3600000
[root@k8s-master1 kubeasz]# kubectl get pods
NAME READY STATUS RESTARTS AGE
net-test1 1/1 Running 1 (133m ago) 21h
net-test2 1/1 Running 1 (133m ago) 21h
验证网络组件calico是否正常
[root@k8s-master1 kubeasz]# calicoctl node status
Calico process is running.
IPv4 BGP status
+-----------------+-------------------+-------+----------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+-----------------+-------------------+-------+----------+-------------+
| 192.168.226.138 | node-to-node mesh | up | 11:21:39 | Established |
| 192.168.226.137 | node-to-node mesh | up | 11:21:40 | Established |
| 192.168.226.139 | node-to-node mesh | up | 11:22:16 | Established |
+-----------------+-------------------+-------+----------+-------------+
IPv6 BGP status
No IPv6 peers found.
#验证容器能够相互访问且能访问外网
[root@k8s-master1 kubeasz]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
net-test1 1/1 Running 1 (134m ago) 21h 10.200.166.132 192.168.226.137 <none> <none>
net-test2 1/1 Running 1 (134m ago) 21h 10.200.166.131 192.168.226.137 <none> <none>
[root@k8s-master1 kubeasz]# kubectl exec -it net-test1 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
[root@net-test1 /]# ping 10.200.166.131
PING 10.200.166.131 (10.200.166.131) 56(84) bytes of data.
64 bytes from 10.200.166.131: icmp_seq=1 ttl=63 time=0.293 ms
64 bytes from 10.200.166.131: icmp_seq=2 ttl=63 time=0.053 ms
^C
--- 10.200.166.131 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.053/0.173/0.293/0.120 ms
[root@net-test1 /]# ping 223.6.6.6
PING 223.6.6.6 (223.6.6.6) 56(84) bytes of data.
64 bytes from 223.6.6.6: icmp_seq=1 ttl=127 time=13.6 ms
64 bytes from 223.6.6.6: icmp_seq=2 ttl=127 time=14.0 ms
64 bytes from 223.6.6.6: icmp_seq=3 ttl=127 time=12.9 ms
^C
--- 223.6.6.6 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 12.862/13.502/14.018/0.489 ms
更多推荐
所有评论(0)