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

相关推荐
回忆2012初秋11 小时前
【Nginx】原理、配置与运维实战(2)
运维·nginx·策略模式
Urbano12 小时前
工装外套全制作流程、工序痛点及自动化设备升级方案
运维·自动化
映翰通朱工12 小时前
工业4G网关无公网IP远程运维实战(内网终端异地访问方案)
运维·服务器·网络·安全·智能路由器
洪晓露13 小时前
将 rke2 集群证书延长至 10 年
运维·服务器·数据库
谢平康13 小时前
解决用 rm 报bash: /usr/bin/rm: Argument list too long错
linux·运维·运维开发
IP老炮不瞎唠13 小时前
Python 价格监控如何实现?思路与实用方法分享
运维·服务器·网络
GIS数据转换器13 小时前
城市排水生命线安全运行监测平台深度解析
java·运维·人工智能·python·安全·数据挖掘·无人机
Tokai_Teio_114 小时前
第四届黄河流域 misc
运维·服务器
开发者联盟league14 小时前
使用k8s安装Sonarqube
云原生·容器·kubernetes
hj28625115 小时前
Linux 网络服务综合笔记(概念 + 命令 + 实操案例)2
linux·运维·网络