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 #执行命令加入集群