k8s基础以及kubeadm安装部署

目录

一、什么是k8s?

二、k8s的特性

三、核心组件以及工作流程

核心组件: 

工作流程:

四、k8s网络

五、kubeadm部署


一、什么是k8s?

K8S 的全称为 Kubernetes,用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。

二、k8s的特性

1、弹性伸缩:使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。

2、自我修复:在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检査失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。

3、服务发现和负载均衡:K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。

4、自动发布(默认滚动发布模式)和回滚:K8S采用滚动更新策略更新应用,一次更新一个或者部分Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不影响业务。

5、集中化配置管理和密钥管理:管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在K8S中,方便应用程序使用。

6、存储编排,支持外挂存储并对外挂存储资源进行编排:挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS、Glusterfs、Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。

7、任务批处理运行:提供一次性任务,定时任务;满足批量数据处理和分析的场景。

三、核心组件以及工作流程

核心组件: 

Kube-apiserver:用于暴露 Kubernetes API,任何资源请求或调用操作都是通过 kube-apiserver 提供的接口进行。它具有调度所有组件的权限。

Kube-controller-manager:运行管理控制器,是 K8S 集群中处理常规任务的后台线程,是 K8S 集群里所有资源对象的自动化控制中心。

Kube-scheduler:是负责资源调度的进程,根据预选策略和优选策略为新创建的 Pod 选择一个合适的 Node 节点。

etcd:K8S 的存储服务。etcd 是分布式键值存储系统,存储了 K8S 的关键配置和用户配置,K8S 中仅 API Server 才具备读写权限,其他组件必须通过 API Server 的接口才能读写数据。

Kubelet:Node 节点的监视器,以及与 Master 节点的通讯器。Kubelet 是 Master 节点安插在 Node 节点上的“眼线”,它会定时向 API Server 汇报自己 Node 节点上运行的服务的状态,并接受来自 Master 节点的指示采取调整措施。

Kube-Proxy:在每个 Node 节点上实现 Pod 网络代理,是 Kubernetes Service 资源的载体,负责维护网络规则和四层负载均衡工作。 负责写入规则至iptables、ipvs实现服务映射访问的。

工作流程:

用户通过客户端发送创建Pod的请求到master节点上的apiserver,apiserver会先把请求信息写入到etcd中保存,再找controller-manager根据预设的资源配置模板创建Pod资源,然后controller-manager会通过apiserver去找scheduler为新创建的Pod选择最合适的node节,scheduler通过调度算法的预选策略和优选策略筛选出最合适的node节点进行调度,其中预选策略是淘汰不符合条件的,而优选策略是选出一个或者几个最优的,然后再通过apiserver找到对应的node节点上的kubelet去创建和管理Pod,kubelet会跟容器引擎交互来管理Pod/容器的生命周期,用户还可通过apiserver在kube-proxy上写入网络规则,创建service资源,实现对Pod的服务发现和负载均衡。

四、k8s网络

  1. Node网络:Node网络是指Kubernetes集群中各个节点之间的网络通信。Node网络用于节点之间的互相通信和数据传输,确保集群中的各个节点可以相互访问和交换数据。

  2. Pod网络:Pod网络是指Kubernetes集群中Pod之间的网络通信。Pod是Kubernetes中最小的调度单元,一个Pod中可以包含一个或多个容器。Pod网络用于Pod内部容器之间的通信,同一个Pod中的容器可以通过localhost进行通信。

  3. Cluster网络:Cluster网络是指整个Kubernetes集群内的网络通信。Cluster网络提供了跨节点的Pod通信、Service发现和负载均衡等功能,确保集群中各个组件可以相互通信并协同工作。常见的Cluster网络方案包括Flannel、Calico、Weave Net等。

五、kubeadm部署

环境:

master01:192.168.246.10

node01:192.168.246.11

node02:192.168.246.12

//所有节点,关闭防火墙规则,关闭selinux,关闭swap交换

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
swapoff -a                        #交换分区必须要关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab        #永久关闭swap分区,&符号在sed命令中代表上次匹配的结果
#加载 ip_vs 模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

//修改主机名

hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02

//所有节点修改hosts文件

vim /etc/hosts
192.168.246.10 master01
192.168.246.11 node01
192.168.246.12 node02

//调整内核参数

cat > /etc/sysctl.d/kubernetes.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF

//生效参数

sysctl --system  


所有节点安装docker

yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.iomkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"}
}
EOF


#使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。
#日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。

systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service docker info | grep "Cgroup Driver"
Cgroup Driver: systemd


所有节点安装kubeadm,kubelet和kubect
//定义kubernetes源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOFyum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11

//开机自启kubelet

systemctl enable kubelet.service


#K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启


 部署K8S集群
//查看初始化需要的镜像

kubeadm config images list

//在 master 节点上传 v1.20.11.zip 压缩包至 /opt 目录

unzip v1.20.11.zip -d /opt/k8s
cd /opt/k8s/v1.20.11
for i in $(ls *.tar); do docker load -i $i; done

//复制镜像和脚本到 node 节点,并在 node 节点上执行脚本加载镜像文件

scp -r /opt/k8s root@node01:/opt
scp -r /opt/k8s root@node02:/opt

//初始化kubeadm

kubeadm init \
--apiserver-advertise-address=192.168.246.10 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.20.11 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--token-ttl=0

初始化后需要修改 kube-proxy 的 configmap,开启 ipvs

kubectl edit cm kube-proxy -n=kube-system

修改mode: ipvs

提示:
......
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.246.10:6443 --token rc0kfs.a1sfe3gl4dvopck5 \
    --discovery-token-ca-cert-hash sha256:864fe553c812df2af262b406b707db68b0fd450dc08b34efb73dd5a4771d37a2

(先将生成的紫色的这一长句先复制下来!以免忘记找不到)
//设定kubectl
kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl 通过默认的 “$HOME/.kube/config” 的路径进行加载。

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

//如果 kubectl get cs 发现集群不健康,更改以下两个文件
vim /etc/kubernetes/manifests/kube-scheduler.yaml 
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
# 修改如下内容
把--bind-address=127.0.0.1变成--bind-address=192.168.246.10        #修改成k8s的控制节点master01的ip
把httpGet:字段下的hosts由127.0.0.1变成192.168.246.10(有两处)
#- --port=0                    # 搜索port=0,把这一行注释掉

systemctl restart kubelet


//所有节点部署网络插件flannel
方法一:
//所有节点上传flannel镜像 flannel.tar 到 /opt 目录,master节点上传 kube-flannel.yml 文件

cd /opt
docker load < flannel.tar

//在 master 节点创建 flannel 资源

kubectl apply -f kube-flannel.yml 


方法二:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

//在 node 节点上执行 kubeadm join 命令加入群集

kubeadm join 192.168.246.10:6443 --token rc0kfs.a1sfe3gl4dvopck5 \--discovery-token-ca-cert-hash sha256:864fe553c812df2af262b406b707db68b0fd450dc08b34efb73dd5a4771d37a2
(上面紫色的长句粘贴,是你自己生成的)

//在master节点查看节点状态

kubectl get nodeskubectl get pods -n kube-system//看看是否都为running状态

//测试 pod 资源创建

kubectl create deployment nginx --image=nginxkubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-554b9c67f9-zr2xs   1/1     Running   0          14m   10.244.1.2   node01   <none>           <none>

//暴露端口提供服务

kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        25h
nginx        NodePort    10.96.15.132   <none>        80:32698/TCP   4s

//测试访问

curl http://node01:32698

//扩展3个副本

kubectl scale deployment nginx --replicas=3
kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-554b9c67f9-9kh4s   1/1     Running   0          66s   10.244.1.3   node01   <none>           <none>
nginx-554b9c67f9-rv77q   1/1     Running   0          66s   10.244.2.2   node02   <none>           <none>
nginx-554b9c67f9-zr2xs   1/1     Running   0          17m   10.244.1.2   node01   <none>           <none>

 部署 Dashboard
//在 master01 节点上操作
#上传 recommended.yaml 文件到 /opt/k8s 目录中

cd /opt/k8s
vim recommended.yaml
#默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:
kind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:ports:- port: 443targetPort: 8443nodePort: 30001     #添加type: NodePort          #添加selector:k8s-app: kubernetes-dashboardkubectl apply -f recommended.yaml

#创建service account并绑定默认cluster-admin管理员集群角色

kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

#使用输出的token登录Dashboard

https://NodeIP:30001

进去之后直接打thisisunsafe,不用管光标在哪儿。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2810049.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【牛客】2024牛客寒假算法基础集训营6ABCDEGHIJ

文章目录 A 宇宙的终结题目大意主要思路代码 B 爱恨的纠葛题目大意主要思路代码 C 心绪的解剖题目大意主要思路代码 D 友谊的套路题目大意主要思路代码 E 未来的预言题目大意主要思路代码 G 人生的起落题目大意主要思路代码 I 时空的交织题目大意主要思路代码 J 绝妙的平衡题目…

Linux7.9环境源码编译安装ffmpeg6.x

1.官网ffmpeg下载源码 https://ffmpeg.org/download.html#build-windows 2.未安装x264库则先安装配置 可以先查询x264库: whereis libx264 安装编译工具和依赖库&#xff1a; sudo yum install gcc make cmake mercurial git yasm pkgconfig autoconf automake libtool sudo…

DC-DC升压模块变换器微型SIP小体积5v12v15v24v转100V110V150V180V200V250V300V500V800VDC

0.2~2W&#xff0c;微型SIP&#xff0c;单/双输出DC/DC变换器 F特征 效率高达88%1000VDC/3000VDC隔离MTBF>2,000,000小时低成本输入5、12、15和24VDC输出100,110,150,180,200,250,300,500,800 VDC 50,55,75,90,100,125,150,250和400 VDC 温度性能-40℃~85℃UL 94V-0封装…

多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型

多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型 目录 多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.多维时序 | Matlab实现GRU-MATT门控循环单元融…

AIGC实战——扩散模型(Diffusion Model)

AIGC实战——扩散模型 0. 前言1. 去噪扩散概率模型1.1 Flowers 数据集1.2 正向扩散过程1.3 重参数化技巧1.4 扩散规划1.5 逆向扩散过程 2. U-Net 去噪模型2.1 U-Net 架构2.2 正弦嵌入2.3 ResidualBlock2.4 DownBlocks 和 UpBlocks 3. 训练扩散模型4. 去噪扩散概率模型的采样5. …

2D目标检测正负样本分配集合

一&#xff1a;CenterNet Center point based正负样本分配方式&#xff1a;中心像素分配为当前目标。 如果同类的两个高斯核具有交叠的情况&#xff0c;我们逐元素【像素】的选取最大值。Center point based 正样本分配方式的缺点&#xff1a;如果两个不同的物体完美匹配&…

喜讯!爱基百客荣获“适用于高淀粉果实的ATAC-seq方法”专利

喜讯来啦&#xff01; 爱基百客荣获ATAC-seq的技术专利~ ATAC-seq技术的相关研究很多&#xff0c;特别是在细胞系和动物组织中的应用较广&#xff0c;而植物样本由于存在细胞壁结构&#xff0c;且代谢物质较多&#xff0c;抽核相对困难。因此&#xff0c;限制了该技术的应用。…

Elasticsearch入门-环境安装ES和Kibana

Elasticsearch入门-环境安装ES和Kibana 安装 ES Windows安装Kibana 安装 安装 ES Windows安装 ① 下载压缩包并解压官网链接&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch ② 启动 ES ,切换到bin目录下&#xff0c;点击elasticsearch.bat文件 启动报错&#…

C++ //练习 8.13 重写本节的电话号码程序,从一个命名文件而非cin读取数据。

C Primer&#xff08;第5版&#xff09; 练习 8.13 练习 8.13 重写本节的电话号码程序&#xff0c;从一个命名文件而非cin读取数据。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /***************************************…

Vue.js+SpringBoot开发大学兼职教师管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 学生教师管理3.3 课程管理模块3.4 授课管理模块3.5 课程考勤模块3.6 课程评价模块3.7 课程成绩模块3.8 可视化图表 四、免责说明 一、摘要 1.1 项目介绍 大学兼职教师管理系统&#xff0c;旨…

基于YOLOv8深度学习+Pyqt5的电动车头盔佩戴检测系统

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;225头盔 获取完整源码源文件已标注的数据集&#xff08;1463张&#xff09;源码各文件说明配置跑通说明文档 若需要一对一远程操作在你电脑跑通&#xff0c;有偿89yuan 效果展示 基于YOLOv8深度学习PyQT5的电动车头盔佩戴检…

高效项目计划的关键因素:制定前必须要考虑的事项

制定项目计划前需要考虑哪些因素&#xff1f;项目计划是一份重要的文件&#xff0c;它概述了项目的范围、目标、时间表、资源和预算。它作为项目团队和涉众的路线图&#xff0c;帮助每个人在整个项目生命周期中保持一致。在本文中我们将概述如何制定合理的项目计划。 1、定义项…

恒峰森林应急消防泵:守护绿色生命线的重要装备

随着城市化进程的加快&#xff0c;人们对于生态环境的保护意识日益增强。森林作为地球上重要的生态系统&#xff0c;承担着净化空气、调节气候、保护水源等诸多功能。然而&#xff0c;由于自然灾害和人为因素&#xff0c;森林火灾时有发生&#xff0c;给生态环境带来严重破坏。…

Kotlin多线程

目录 线程的使用 线程的创建 例一&#xff1a;创建线程并输出Hello World Thread对象的用法 start() join() interrupt() 线程安全 原子性 可见性 有序性 线程锁 ReentrantLock ReadWriteLock 线程的使用 Java虚拟机中的多线程可以1:1映射至CPU中&#xff0c;即…

《Docker 简易速速上手小册》第7章 高级容器管理(2024 最新版)

文章目录 7.1 容器监控与日志7.1.1 重点基础知识7.1.2 重点案例&#xff1a;监控 Flask 应用7.1.3 拓展案例 1&#xff1a;使用 ELK Stack 收集和分析日志7.1.4 拓展案例 2&#xff1a;使用集成监控工具 7.2 性能调优与资源限制7.2.1 重点基础知识7.2.2 重点案例&#xff1a;Fl…

【福建游戏业:低调崛起的区域力量】

在前面的文章中&#xff0c;我们已经依次介绍了上海、北京、广州、深圳、成都、杭州等地的游戏行业发展现状。本文要向大家介绍的最后一个地区--福建。 尽管福建省的经济总体实力相对较弱&#xff0c;但近年游戏业焕发出勃勃生机&#xff0c;涌现出几家优秀游戏企业&#xff0c…

airserver2024mac苹果手机电脑投屏工具下载

AirServer的稳定性如磐石般坚固&#xff0c;当提及投屏软件的核心要素时&#xff0c;稳定性无疑是用户最为关心的方面之一。在这方面&#xff0c;AirServer堪称投屏领域的佼佼者&#xff0c;其稳定性表现足以让用户放心依赖。 首先&#xff0c;AirServer采用了先进的投屏技术&…

文件夹批量字符串检索工具

文件夹 文件夹批量字符串检索工具是一种使用于在指定文件夹中批量搜索指定字符串的工具。它可以帮助用户快速找到包含特定字符串的文件&#xff0c;并提供相应的搜索结果。 这种工具通常具有以下功能&#xff1a; 批量搜索&#xff1a;用户可以指定一个文件夹&#xff0c;在该…

HTML(待完善)

typora-copy-images-to: img 前端api: https://www.w3school.com.cn/ 1.前端知识介绍(了解) 4天内容比较细 碎 多。 小结&#xff1a; 前端知识点不需要单独安装特有的软件。只需要浏览器即可。谷歌 、火狐、IE. 网站后台前端网页 2.HTML的概述(了解) 1.HTML应用场景 各大…

ChatRTX安装教程

介于本人一直想将现有的智慧城市的文档结合大模型RAG实现知识库问答助手&#xff0c;借着Chat With RTX的风潮正好将机器人和知识库合二为一&#xff0c;方便以后对众多文件进行查阅。 一、概要 Chat With RTX 是一个 Demo&#xff0c;用来将您自己的资料&#xff08;文档、笔…