k8s:管理容器集群
k8s的组成和调用原理
cluster集群:控制平面和node共同构成一个cluster
服务调用流程
ingress控制器:让外部用户访问集群内部的服务
kubeprox转发
pod的容器中
Control plan控制平面组件:控制和管理多个node
1.api server:支持使用提供的api创建服务----kubectl执行命令调用api(6443)
2.scheduler:负责集群内部的资源调度和分配(10259)
3.Controller manager:创建,关闭服务(10257)
4.ctcd:存储上述数据(2379-2380)
node组件
1.kubelet:管理pod,包括创建,修改,容器监控,节点状态汇报和api server通信(10250)
2.Pod 组成:应用服务container,日志服务container,监控采集器
3.Container runtime:下载部署镜像(containerd)
4.kubeprox:负责pod的通信与负载均衡功能(10256)
部署服务工作流程:
1.执行命令kubectl解析yml文件(定义pod里面用到了哪些镜像占用多少内存等),将解析的文件发送给api server,api server根据要求驱使shecduler通过etcd提供的数据寻找合适的node
2.控制平面内的controller manager控制node节点去创建服务
3.kubelet收到指令后,通知container runtime去拉取镜像创建容器
kubernetes 安装
环境
harbor 192.168.88.240 2CPU,4G内存
master 192.168.88.50 2CPU,4G内存
node-0001 192.168.88.51 2CPU,2G内存
node-0002 192.168.88.52 2CPU,2G内存
node-0003 192.168.88.53 2CPU,2G内存
kubernetes 安装
一.安装控制节点
1、配置软件仓库
准备包
2、系统环境配置
(1)配置安装源
[root@master ~]# vim /etc/yum.repos.d/k8s.repo
[k8s]
name=Rocky Linux $releasever - Kubernetes
baseurl="ftp://192.168.88.240/rpms"
enabled=1
gpgcheck=0
(2)禁用 firewall 和 swap
[root@master ~]# sed '/swap/d' -i /etc/fstab
[root@master ~]# swapoff -a
[root@master ~]# dnf remove -y firewalld-*
3、安装软件包
kubeadm:集群配置管理工具
config:生成配置文件的模板,查看需要安装哪些镜像
kubeadm config print init-defaults > kubeadm-config.yaml
kubeadm config images list #查看需要安装哪些镜像
init:集群初始化
join:计算节点加入集群
reset:还原,删除集群配置
token:token凭证管理
create delete generate list
help:命令帮助信息
kubectl:集群进行交互的命令行工具
kubelet:管理pod
containerd.io(runtime):容器管理软件
ipvsadm:容器集群管理工具
ipset:
iproute-tc:网络流量管理工具
(1):域名映射 /etc/hosts
192.168.88.240 harbor
192.168.88.50 master
192.168.88.51 node-0001
192.168.88.52 node-0002
192.168.88.53 node-0003
(2)安装相关包
dnf install -y kubeadm kubelet kubectl containerd.io ipvsadm ipset iproute-tc
(3)修改containerd指向仓库地址
[root@master ~]# containerd config default >/etc/containerd/config.toml #生成默认配置文件
[root@master ~]# vim /etc/containerd/config.toml
61: sandbox_image = "harbor:443/k8s/pause:3.9"
125: SystemdCgroup = true
154 行新插入:
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://192.168.88.240:443"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor:443"]
endpoint = ["https://192.168.88.240:443"]
[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.88.240:443".tls]
insecure_skip_verify = true
(4)重启: systemctl enable --now kubelet containerd
4、配置内核参数
(1)加载内核模块
[root@master ~]# vim /etc/modules-load.d/containerd.conf
br_netfilter #网桥防火墙模块
xt_conntrack #链接跟踪表模块
[root@master ~]# systemctl start systemd-modules-load.service
(2)设置内核参数
[root@master ~]# vim /etc/sysctl.d/99-kubernetes-cri.conf
net.ipv4.ip_forward = 1 #路由转发
net.bridge.bridge-nf-call-iptables = 1 #开启ipv4桥流量监控
net.bridge.bridge-nf-call-ip6tables = 1 #开启ipv6桥流量监控
net.netfilter.nf_conntrack_max = 1000000 #设置连接跟踪表大小
[root@master ~]# sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf #刷新
5、导入 k8s 镜像
拷贝本阶段 kubernetes/init 目录到 master
rsync -av kubernetes/init 192.168.88.50:/root/
(1)安装部署 docker
[root@master ~]# dnf install -y docker-ce
[root@master ~]# vim /etc/docker/daemon.json
{
"registry-mirrors":["https://harbor:443"],
"insecure-registries":["harbor:443"]
}
[root@master ~]# systemctl enable --now docker
[root@master ~]# docker info
(2)上传镜像到 harbor 仓库
[root@master ~]# docker login harbor:443
Username: <登录用户>
Password: <登录密码>
Login Succeeded
[root@master ~]# docker load -i init/v1.29.2.tar.xz
[root@master ~]# docker images|while read i t _;do #打tag上传镜像
[[ "${t}" == "TAG" ]] && continue
[[ "${i}" =~ ^"harbor:443/".+ ]] && continue
docker tag ${i}:${t} harbor:443/k8s/${i##*/}:${t}
docker push harbor:443/k8s/${i##*/}:${t}
docker rmi ${i}:${t} harbor:443/k8s/${i##*/}:${t}
done
6、设置kubeadm和kubectl的Tab键,tab出子命令
[root@master ~]# source <(kubeadm completion bash|tee /etc/bash_completion.d/kubeadm)
[root@master ~]# source <(kubectl completion bash|tee /etc/bash_completion.d/kubectl)
7、安装主控制节点
(1)修改ip
[root@master ~]# vim /root/init/init.yaml
13: advertiseAddress: 192.168.88.50
(2)测试系统环境
[root@master ~]# kubeadm init --config=init/init.yaml --dry-run 2>error.log
[root@master ~]# cat error.log
(3)主控节点初始化
[root@master ~]# rm -rf error.log /etc/kubernetes/tmp
[root@master ~]# kubeadm init --config=init/init.yaml |tee init/init.log
# tee一般用于记录日志的
(4)管理授权
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
(5)验证安装结果
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady control-plane 19s v1.29.2
#config配置文件修改的部分
localAPIEndpoint:
advertiseAddress: 192.168.88.50 --
bindPort: 6443 --
nodeRegistration:
criSocket: unix:///run/containerd/containerd.sock --
imagePullPolicy: IfNotPresent
name: master --
taints: null
imageRepository: harbor:443/k8s --
kind: ClusterConfiguration
kubernetesVersion: 1.29.2 --#kubeadm version查看版本
networking:
dnsDomain: cluster.local #域名 --
podSubnet: 10.244.0.0/16 #pod的子网 --
serviceSubnet: 10.245.0.0/16 #服务的子网 --
---
kind: KubeProxyConfiguration --
apiVersion: kubeproxy.config.k8s.io/v1alpha1 --
mode: ipvs --
ipvs: --
strictARP: true --
---
kind: KubeletConfiguration --
apiVersion: kubelet.config.k8s.io/v1beta1 --
cgroupDriver: systemd --
二.安装网络插件calico:让容器可以跨节点通信,也可以设置访问策略
1.上传镜像
rsync -av kubernetes/plugins 192.168.88.50:/root/
[root@master ~]# cd plugins/calico
[root@master calico]# docker load -i calico.tar.xz
[root@master calico]# docker images|while read i t _;do
[[ "${t}" == "TAG" ]] && continue
[[ "${i}" =~ ^"harbor:443/".+ ]] && continue
docker tag ${i}:${t} harbor:443/plugins/${i##*/}:${t}
docker push harbor:443/plugins/${i##*/}:${t}
docker rmi ${i}:${t} harbor:443/plugins/${i##*/}:${t}
done
2.安装 calico
(1)修改配置文件的docker仓库
sed -ri 's,^(\s*image: )(.*/)?(.+),\1harbor:443/plugins/\3,' calico.yaml
(2)启动
[root@master calico]# kubectl apply -f calico.yaml
[root@master calico]# kubectl get nodes 和 ifconfig
三.安装计算节点
1、获取凭证
(1)查看,删除,创建 token
kubeadm token list
kubeadm token delete abcdef.0123456789abcdef
kubeadm token create --ttl=0 --print-join-command
#ttl:token的生命周期,#print-join-command:打印如何使用token
也可以计算hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt |openssl rsa -pubin -outform der |openssl dgst -sha256 -hex
(2)node加入control plan组成k8s集群
[root@node ~]#每台机器操作 控制节点 的2,3,4步骤
kubeadm join 192.168.88.50:6443 --token cdo4jl.9qmtqvhvti54k8vo --discovery-token-ca-cert-hash sha256:c2d96fc0ef5b813058eb51cf3ad805edfc5170415e5399d5f1c0083f3f36e14f #执行命令加入集群
k8s:管理容器集群
k8s的组成和调用原理
cluster集群:控制平面和node共同构成一个cluster
服务调用流程
ingress控制器:让外部用户访问集群内部的服务
kubeprox转发
pod的容器中
Control plan控制平面组件:控制和管理多个node
1.api server:支持使用提供的api创建服务----kubectl执行命令调用api(6443)
2.scheduler:负责集群内部的资源调度和分配(10259)
3.Controller manager:创建,关闭服务(10257)
4.ctcd:存储上述数据(2379-2380)
node组件
1.kubelet:管理pod,包括创建,修改,容器监控,节点状态汇报和api server通信(10250)
2.Pod 组成:应用服务container,日志服务container,监控采集器
3.Container runtime:下载部署镜像(containerd)
4.kubeprox:负责pod的通信与负载均衡功能(10256)
部署服务工作流程:
1.执行命令kubectl解析yml文件(定义pod里面用到了哪些镜像占用多少内存等),将解析的文件发送给api server,api server根据要求驱使shecduler通过etcd提供的数据寻找合适的node
2.控制平面内的controller manager控制node节点去创建服务
3.kubelet收到指令后,通知container runtime去拉取镜像创建容器
kubernetes 安装
环境
harbor 192.168.88.240 2CPU,4G内存
master 192.168.88.50 2CPU,4G内存
node-0001 192.168.88.51 2CPU,2G内存
node-0002 192.168.88.52 2CPU,2G内存
node-0003 192.168.88.53 2CPU,2G内存
kubernetes 安装
一.安装控制节点
1、配置软件仓库
准备包
2、系统环境配置
(1)配置安装源
root@master \~\]# vim /etc/yum.repos.d/k8s.repo \[k8s
name=Rocky Linux $releasever - Kubernetes
baseurl="ftp://192.168.88.240/rpms"
enabled=1
gpgcheck=0
(2)禁用 firewall 和 swap
root@master \~\]# sed '/swap/d' -i /etc/fstab \[root@master \~\]# swapoff -a \[root@master \~\]# dnf remove -y firewalld-\* 3、安装软件包 kubeadm:集群配置管理工具 config:生成配置文件的模板,查看需要安装哪些镜像 kubeadm config print init-defaults \> kubeadm-config.yaml kubeadm config images list #查看需要安装哪些镜像 init:集群初始化 join:计算节点加入集群 reset:还原,删除集群配置 token:token凭证管理 create delete generate list help:命令帮助信息 kubectl:集群进行交互的命令行工具 kubelet:管理pod containerd.io(runtime):容器管理软件 ipvsadm:容器集群管理工具 ipset: iproute-tc:网络流量管理工具 (1):域名映射 /etc/hosts 192.168.88.240 harbor 192.168.88.50 master 192.168.88.51 node-0001 192.168.88.52 node-0002 192.168.88.53 node-0003 (2)安装相关包 dnf install -y kubeadm kubelet kubectl containerd.io ipvsadm ipset iproute-tc (3)修改containerd指向仓库地址 \[root@master \~\]# containerd config default \>/etc/containerd/config.toml #生成默认配置文件 \[root@master \~\]# vim /etc/containerd/config.toml 61: sandbox_image = "harbor:443/k8s/pause:3.9" 125: SystemdCgroup = true 154 行新插入: \[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"
endpoint = ["https://192.168.88.240:443"]
plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor:443"
endpoint = ["https://192.168.88.240:443"]
plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.88.240:443".tls
insecure_skip_verify = true
(4)重启: systemctl enable --now kubelet containerd
4、配置内核参数
(1)加载内核模块
root@master \~\]# vim /etc/modules-load.d/containerd.conf br_netfilter #网桥防火墙模块 xt_conntrack #链接跟踪表模块 \[root@master \~\]# systemctl start systemd-modules-load.service (2)设置内核参数 \[root@master \~\]# vim /etc/sysctl.d/99-kubernetes-cri.conf net.ipv4.ip_forward = 1 #路由转发 net.bridge.bridge-nf-call-iptables = 1 #开启ipv4桥流量监控 net.bridge.bridge-nf-call-ip6tables = 1 #开启ipv6桥流量监控 net.netfilter.nf_conntrack_max = 1000000 #设置连接跟踪表大小 \[root@master \~\]# sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf #刷新 5、导入 k8s 镜像 拷贝本阶段 kubernetes/init 目录到 master rsync -av kubernetes/init 192.168.88.50:/root/ (1)安装部署 docker \[root@master \~\]# dnf install -y docker-ce \[root@master \~\]# vim /etc/docker/daemon.json { "registry-mirrors":\["https://harbor:443"\], "insecure-registries":\["harbor:443"
}
root@master \~\]# systemctl enable --now docker \[root@master \~\]# docker info (2)上传镜像到 harbor 仓库 \[root@master \~\]# docker login harbor:443 Username: \<登录用户\> Password: \<登录密码\> Login Succeeded \[root@master \~\]# docker load -i init/v1.29.2.tar.xz \[root@master \~\]# docker images\|while read i t _;do #打tag上传镜像 \[\[ "${t}" == "TAG" \]\] \&\& continue \[\[ "${i}" =\~ \^"harbor:443/".+ \]\] \&\& continue docker tag ${i}:${t} harbor:443/k8s/${i##\*/}:${t} docker push harbor:443/k8s/${i##\*/}:${t} docker rmi ${i}:${t} harbor:443/k8s/${i##\*/}:${t} done 6、设置kubeadm和kubectl的Tab键,tab出子命令 \[root@master \~\]# source \<(kubeadm completion bash\|tee /etc/bash_completion.d/kubeadm) \[root@master \~\]# source \<(kubectl completion bash\|tee /etc/bash_completion.d/kubectl) 7、安装主控制节点 (1)修改ip \[root@master \~\]# vim /root/init/init.yaml 13: advertiseAddress: 192.168.88.50 (2)测试系统环境 \[root@master \~\]# kubeadm init --config=init/init.yaml --dry-run 2\>error.log \[root@master \~\]# cat error.log (3)主控节点初始化 \[root@master \~\]# rm -rf error.log /etc/kubernetes/tmp \[root@master \~\]# kubeadm init --config=init/init.yaml \|tee init/init.log # tee一般用于记录日志的 (4)管理授权 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config (5)验证安装结果 \[root@master \~\]# kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady control-plane 19s v1.29.2 #config配置文件修改的部分 localAPIEndpoint: advertiseAddress: 192.168.88.50 -- bindPort: 6443 -- nodeRegistration: criSocket: unix:///run/containerd/containerd.sock -- imagePullPolicy: IfNotPresent name: master -- taints: null imageRepository: harbor:443/k8s -- kind: ClusterConfiguration kubernetesVersion: 1.29.2 --#kubeadm version查看版本 networking: dnsDomain: cluster.local #域名 -- podSubnet: 10.244.0.0/16 #pod的子网 -- serviceSubnet: 10.245.0.0/16 #服务的子网 -- --- kind: KubeProxyConfiguration -- apiVersion: kubeproxy.config.k8s.io/v1alpha1 -- mode: ipvs -- ipvs: -- strictARP: true -- --- kind: KubeletConfiguration -- apiVersion: kubelet.config.k8s.io/v1beta1 -- cgroupDriver: systemd -- 二.安装网络插件calico:让容器可以跨节点通信,也可以设置访问策略 1.上传镜像 rsync -av kubernetes/plugins 192.168.88.50:/root/ \[root@master \~\]# cd plugins/calico \[root@master calico\]# docker load -i calico.tar.xz \[root@master calico\]# docker images\|while read i t _;do \[\[ "${t}" == "TAG" \]\] \&\& continue \[\[ "${i}" =\~ \^"harbor:443/".+ \]\] \&\& continue docker tag ${i}:${t} harbor:443/plugins/${i##\*/}:${t} docker push harbor:443/plugins/${i##\*/}:${t} docker rmi ${i}:${t} harbor:443/plugins/${i##\*/}:${t} done 2.安装 calico (1)修改配置文件的docker仓库 sed -ri 's,\^(\\s\*image: )(.\*/)?(.+),\\1harbor:443/plugins/\\3,' calico.yaml (2)启动 \[root@master calico\]# kubectl apply -f calico.yaml \[root@master calico\]# kubectl get nodes 和 ifconfig 三.安装计算节点 1、获取凭证 (1)查看,删除,创建 token kubeadm token list kubeadm token delete abcdef.0123456789abcdef kubeadm token create --ttl=0 --print-join-command #ttl:token的生命周期,#print-join-command:打印如何使用token 也可以计算hash值 openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt \|openssl rsa -pubin -outform der \|openssl dgst -sha256 -hex (2)node加入control plan组成k8s集群 \[root@node \~\]#每台机器操作 控制节点 的2,3,4步骤 kubeadm join 192.168.88.50:6443 --token cdo4jl.9qmtqvhvti54k8vo --discovery-token-ca-cert-hash sha256:c2d96fc0ef5b813058eb51cf3ad805edfc5170415e5399d5f1c0083f3f36e14f #执行命令加入集群