k8s的原理和,k8s的安装

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

相关推荐
shida_csdn15 分钟前
client-go 的 QPS 和 Burst 限速
kubernetes·qps·client-go·burst
fly_vip18 分钟前
ubuntu 20.04 安装docker--小白学习之路
学习·ubuntu·docker
AI探索先锋20 分钟前
Ubuntu 20.04下MySQL 8.4.3 LTS离线安装全攻略
linux·服务器·mysql·ubuntu
喵先生!1 小时前
ubuntu NVIDIA 驱动程序安装指南
linux·chrome·ubuntu
大小先生1 小时前
CentOS 系统中防火墙相关命令
linux·centos
勉强勉强1 小时前
centos systemd方式配置jar开机自启
linux·centos·jar
知识鱼丸1 小时前
【杂记】qt
linux·运维·windows
xiaopzi1231232 小时前
宝塔安装mongodb后,写脚本监控运行状态,关闭后自动重启
linux·运维·服务器
大象机器人2 小时前
自动化机械臂视觉跟踪和手眼校准
运维·python·机器人·自动化·硬件工程·制造
朝九晚五ฺ2 小时前
【Linux探索学习】第二十五弹——动静态库:Linux 中静态库与动态库的详细解析
linux·运维·学习