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

相关推荐
2301_14725836924 分钟前
7月2日作业
java·linux·服务器
格调UI成品1 小时前
预警系统安全体系构建:数据加密、权限分级与误报过滤方案
大数据·运维·网络·数据库·安全·预警
xuanzdhc5 小时前
Linux 基础IO
linux·运维·服务器
愚润求学5 小时前
【Linux】网络基础
linux·运维·网络
bantinghy5 小时前
Linux进程单例模式运行
linux·服务器·单例模式
小和尚同志6 小时前
29.4k!使用 1Panel 来管理你的服务器吧
linux·运维
帽儿山的枪手6 小时前
为什么Linux需要3种NAT地址转换?一探究竟
linux·网络协议·安全
shadon1789 天前
回答 如何通过inode client的SSLVPN登录之后,访问需要通过域名才能打开的服务
linux
小米里的大麦9 天前
014 Linux 2.6内核进程调度队列(了解)
linux·运维·驱动开发
退役小学生呀9 天前
三、kubectl使用详解
云原生·容器·kubernetes·k8s