k8s的组件以及安装

目录

概念

k8s的使用场景

k8s的特点

核心组件

master主组件

1.kube-apiserver

2.etcd

3.kube-controller-manager

控制器

4.kube-scheduler

node从节点组件

1.kubelet

2.kube-proxy

3.docker

总结

k8s的核心概念

安装k8s

架构

安装步骤

实验:创建pod


概念

全写:Kubernets

k8s作用:用于自动部署、拓展、管理容器化部署的应用程序。它是半开源的,核心是在谷歌里面,它的底层是由go语言开发的。可以理解成负责自动化运维管理多个容器化的应用的集群。也可以理解为容器编排框架的工具。

k8s的主流版本:1.20

假设用docerk部署了一个nginx,但没有做资源限制,如果一旦访问量增大,nginx有可能占满系统资源,就会出现内存和cpu告警,此时就可以使用自动化运维管理k8s

k8s的使用场景

1.可以多节点部署,不再是单机部署

2.可以自动完成更新和部署

3.解决了跨节点容器之间的通信问题

4.k8s有自我修复机制,使得整个容器集群可以在用户的期望状态下运行

k8s的特点

1.自我修复:在节点故障时,它会自动把该节点上的容器重新部署到其他节点;在容器启动失败时,它会自动的重新启动容器,一般会启动3次,如果3次都失败,就会认为服务不可用。在容器启动时,也会有检测机制(探针),检测容器启动是否正常。以此来确保集群内部的服务能够正常工作。

2.弹性伸缩:在一个容器占用机器的资源比较高时,k8s会自动的增加pod的数量;在资源占用下降的时候,会自动释放pod的数量。就是可以以最小的成本运行服务。

3.自动发布:默认模式是滚动发布模式。同时也可以回滚。也就是k8s在更新的时候不是一次性的更新所有,而是更新一部分,然后再更新剩余的部分。如果有问题,可以随时回滚。

4.服务发现和负载均衡

服务发现:多个容器有一个统一的访问入口,有内部地址和统一的对外地址。会自动负载均衡所有管理的容器,无需考虑容器的ip地址。

5.存储编排:支持外挂存储,分为两种:内部挂载,用的是内部存储卷;外部挂载,可以是本地存储,也可以是公有云(阿里云、百度云、华为云等等),也可以支持网络存储:NFS,ceph。

6.集中化配置和密钥管理:k8s所有的配置可以以加密的形式保存在集群信息中,可以提高集群的安全性。

7.任务的批量处理

核心组件

架构:主从架构,也就是master slave模式,也就是我们所有的操作、管理、运维都是在主节点完成的。从节点:我们一般叫做node节点,就是工作节点,就是用来负载工作的节点。

master主组件

1.kube-apiserver

这是整个集群的大脑,每个组件之间的资源请求和调用操作都是通过apiserver完成的,就是通过api接口发送到各个组件。也就是每个组件之间都和apiserver都有一个api接口。

api接口:作用就是内部的组件和组件之间通信的接口,或者是内部调用方法(代码)的接口。

端口:应用和应用之间,客户端和服务端之间的通信。

内部之间所有资源对象的增删改查和监听也都是由apiserver来完成的,处理完之后再交给etcd进行存储。

2.etcd

它是k8s内部的存储服务,是分布式的键值存储系统,存储了k8s集群的配置和用户配置,以及集群内部服务的信息。只有apiserver可以和etcd通信(读写权限),其他组件要想往etcd存储信息或者读取信息,就必须要通过apiserver。在部署etcd时分布式必须是奇数。

3.kube-controller-manager

又叫运行管理控制器,是k8s集群当中处理常规任务的后台的线程,是k8s集群当中所有资源对象自动化控制的中心。在k8s集群当中,一个资源对应一个控制器。controller-manager就是来管理这些控制器的。

控制器

node controller 节点控制器:节点出现故障时,发现和响应

replication controller 副本控制器:我们创建资源对象时,可以选择创建的个数(pod的数量),需要保证资源对象声明的副本数和创建的数量保持一致。

endpoint controller 端点控制器:指的就是service对应的pod。service用来匹配对应的pod,同时也监听pod的变化,端点就是暴露出来用于对外访问的。

resourcequota controller 资源配额控制器:就是用来确保创建的资源对象不会超过设定的系统资源量

namespace controller  命名空间控制器:作用就是对项目上进行区分,每个命名空间都是独立的,它是用来管理命名空间的生命周期(增删改查)

4.kube-scheduler

它根据调度算法为pod选择一个合适的node节点。

node节点的资源越富裕,负载越小的node节点部署pod的排名就越高

注:以上几个都是在master主节点上完成的

node从节点组件

1.kubelet

它相当于主节点在node节点的监控器,还可以与master节点通信。会定时向apiserver报告服务在node节点上的运行情况,同时还可以接受来自master的调整措施。

kubelet负责节点上pod的生命周期(增删改查)

总结:master的指令传给kubelet,kubelet完成之后传给apiserver,apiserver把node的节点的更新信息保存到etcd

2.kube-proxy

作用是在每个node节点上实现pod的网络代理。它是service的具体载体。负责网络规划和四层负载均衡工作。它也是靠iptables和ipvs来实现服务的映射和访问。

apiserver通过监控kube-proxy来完成对pod的更新和端点的维护,把变化的结果保存在etcd。

内部服务的负载均衡是四层代理,实现内部pod的负载均衡,也就是k8s的每个节点上都有kube-proxy

内部的ip地址依靠flanner 、calico 这两个插件提供内部pod的ip地址

3.docker

是整个集群的最底层,分布式

总结

分为主节点和node节点,主节点就是核心,kube-apiserver大脑:所有的一切都要通过kube-apiserver来调用,所有的一切最终都要保存到etcd中,etcd就是保存集群信息的数据库,怎么部署都是靠kube-controller-manager,往哪里部署靠kube-scheduler。到了node节点上,kubelet负责真正部署、控制容器,跨主机网络之间通信通过kube-proxy,服务是由底层docker来启动的。

流程图

kube-apiserver先接受信息,kube-apiserver传给kube-controller-manager创建资源对象和副本数,kube-apiserver再传给kube-scheduler把pod部署到哪个node上,然后kube-apiserver再传给kubelet根据调度算法,先pull拉取镜像,然后run跑容器,kube-apiserver再传给kube-proxy网络代理和四层负载均衡,最后kubelet把创建的信息传给kube-apiserver,kube-apiserver把信息保存到etcd中。

k8s的核心概念

pod:k8s里面的最小单位,一个pod就是一个正在运行的进程。但是pod的里面包含着容器,可以是一个容器,也可以是多个容器。部署在同一pod当中的容器,它们可以共享网络、存储和计算资源。不同pod之间只能通过集群分配的ip地址进行通信。

Label:标签,它是k8s的特色管理方式,对资源对象进行分类。

简单来说就是:通过标签把pod、service 以及资源对象、控制器进行关联。

service:在集群当中,每个pod都会设定一个ip地址,可能会因为pod的消失,导致ip也随之消失,那么service就是来解决这个问题的核心概念。这个service不是服务,更像一个网关。service用于集群内部访问。

ingress:用于集群外部访问,是整个k8s集群的接入层,是整个集群的外部通信。

service是四层负载均衡,只能是ip+端口

ingress是七层转发

namespace:是资源隔离的方式,是逻辑上的隔离。项目越来越多,集群也会越来越大,此时可以通过命名空间把资源分配到各个命名空间,每个命名空间之间资源不共享,使用的是分配的资源。命名空间在集群当中是唯一的,名字不能重复。

default 是默认命名空间,不做特殊声明,所有的资源都在默认空间

kube-system 系统应用的命名空间

注:如果要查询特定的资源,一定要加上命名空间。

安装k8s

架构

master01 192.168.233.31 安装docker kubeadm kubelet kubectl flannel

node01 192.168.233.32  安装docker kubeadm kubelet kubectl flannel

node02 192.168.233.33  安装docker kubeadm kubelet kubectl flannel

安装步骤

1.三台主机同时操作

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X   清空所有的iptables策略

sed -ri 's/.*swap.*/#&/' /etc/fstab     关闭swap交换分区

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

加载ipvs的模块

hostnamectl set-hostname master01

hostnamectl set-hostname node01

hostnamectl set-hostname node02

vim /etc/hosts

注:这里修改主机名和映射关系可以不做

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

2.安装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-24.0.1 docker-ce-cli-24.0.1 containerd.io

mkdir /etc/docker

cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://hub.littlediary.cn/"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF

systemctl daemon-reload

systemctl restart docker

systemctl enable docker

docker info | grep "Cgroup Driver"   看一下是不是systemd

3.安装kubelet组件:

三台主机同时操作

yum install -y kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15

systemctl enable kubelet    注:所有的组件都是以pod运行的,必须要设置开机自启

kubeadm config images list --kubernetes-version 1.20.15

解释: pause是镜像,也是特殊容器,这个容器的作用就是保持pod当中其他的容器的运行。

我们创建pod,首先是拉取镜像,pod当中会有一个pause,pause会在每个pod中创建一个命名空间。pod的生命周期结束,pause容器也会退出,释放该pod的网络命名空间。

coredns:域名解析

4.在master01上操作

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

注:apiserver-advertise-address是内部通信的ip地址,指向的是主,也可以用0.0.0.0表示任意主机

image-repository registry.aliyuncs.com/google_containers 指定镜像的仓库(k8s组件的仓库)

kubernetes-version=v1.20.15 k8s的版本 1.20.15

service-cidr=10.96.0.0/16   service的网段

pod-network-cidr=10.244.0.0/16  pod分配的网段,其中10.244.0.0/16是flannel的默认网段,calico

:192.168.0.0/16

token-ttl=0 表示token永不过期,默认有效期是24小时

然后复制最下面的一段话到node01和node02(根据自己的上面复制)

注:如果不知道,可以再生成 只要执行 kubeadm token create --print-join-command 

5.设置节点的kubelet

三台主机同时操作

mkdir -p $HOME/.kube

cd /etc/kubernetes/

其中admin.conf是kubeadm为集群配置的一个具有管理员权限的认证文件,apiserver需要通过admin的认证,kubelet才能和apiserver进行交互

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

chown $(id -u):$(id -g) $HOME/.kube/config

systemctl restart kubelet

回到master01主机上

kubectl edit cm kube-proxy -n=kube-system   编辑它的yaml文件   注:这里操作跟vim一样 

在下面输入 /mode

然后在mode中间添加ipvs然后保存即可

kubectl get node

kubectl get cs

检查集群的状态

vim /etc/kubernetes/manifests/kube-scheduler.yaml

vim /etc/kubernetes/manifests/kube-controller-manager.yaml

kubectl get cs

两个都要是ok

kubectl get pod -n kube-system

这里必须要1/1

systemctl status kubelet  查看kubelet是否开启

6.安装flannel网络插件

三台主机上面同时操作

拖入flannel.tar和cni-plugins-linux-amd64-v0.8.6以及kube-flannel.yml

docker load < flannel.tar

mv /opt/cni /opt/cni_bak

cd cni_bak/

mkdir -p /opt/cni/bin

cd /opt/

tar -xf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin/

在master01上面操作

kubectl apply -f kube-flannel.yml

kubectl get pod -n kube-system

kubectl get node

7.添加kubelet自动补齐功能

在master01 主机上操作

vim /etc/profile

在最后添加source <(kubectl completion bash)

source /etc/profile

kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

8.k8s证书认证

在master01主机上操作

把update-kubeadm-cert拖入master01主机上

chmod 777 update-kubeadm-cert.sh

./update-kubeadm-cert.sh all

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep Not    查看还有多少年命令

注:以上就是k8s的基本安装

实验:创建pod

kubectl get deployments.apps 查看资源对象

deployments.apps 就是资源对象

kubectl create deployment test1 --image=nginx:1.22 --replicas=3 创建资源对象

kubectl get pod

kubectl get pod -o wide

kubectl expose deployment test1 --port=30000 --target-port=80

kubectl get svc

kubectl edit svc test1

最后的修改为

kubectl get svc

进入:

kubectl exec -it        最后加bash

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux学习笔记(4)----Debian压力测试方法

使用命令行终端压力测试需要两个实用工具&#xff1a;s-tui和stress sudo apt install s-tui stress 安装完成后&#xff0c;在终端中启动 s-tui实用工具&#xff1a; s-tui 执行后如下图&#xff1a; 你可以使用鼠标或键盘箭头键浏览菜单&#xff0c;然后点击“压力选项(Str…

Leetcode Day14排序算法

动态git可以看 :https://leetcode.cn/problems/sort-an-array/solutions/179370/python-shi-xian-de-shi-da-jing-dian-pai-xu-suan-fa/ 选择排序 def selection_sort(nums):n len(nums)for i in range(n):for j in range(i, n):if nums[i] > nums[j]:nums[i], nums[j] …

甲基化组学全流程生信分析教程

甲基化组学全流程分析和可视化教程 读取数据目录下的idat文件的甲基化全流程一键分析 功能简介 甲基化分析模块可以实现甲基化芯片450K, 870kEPIC数据的自动读取&#xff0c;可以读取idat文件&#xff0c;也可以读取beta甲基化矩阵文件甲基化数据的缺失值插值甲基化数据的质…

python测试框架之Pytest

初识Pytest Pytest1.Pytest的特点&#xff1a;2.Pytest的基本使用规则3.pytest安装1&#xff09;使用编译器安装2&#xff09;使用命令安装 4.pytest规则 Pytest Pytest是python的一个第三方单元测试库&#xff0c;它的目的是让单元测试变得容易&#xff0c;并且也能扩展到支持…

解析云上实时数仓的挑战与实践 | Databend @DTCC 2024 演讲回顾

8 月 22 日 ~ 24 日&#xff0c;由 IT168 联合旗下 ITPUB、ChinaUnix 两大技术社区主办的第 15 届中国数据库技术大会&#xff08;DTCC2024&#xff09;在北京朗丽兹西山花园酒店成功召开。本次大会以“自研创新 数智未来”为主题&#xff0c;通过深度交流与探讨&#xff0c;推…

如何在手机上设置国内代理IP地址:详细指南

在某些情况下&#xff0c;我们可能需要在手机上设置国内代理IP地址&#xff0c;以便访问特定的网络服务或提高网络连接的稳定性。本文将详细介绍如何在Android和iOS设备上设置代理IP地址。 在Android设备上设置代理IP地址 在Android设备上设置代理IP地址非常简单&#xff0c;只…

MYSQL:简述对B树和B+树的认识

MySQL的索引使用B树结构。 1、B树 在说B树之前&#xff0c;先说说B树&#xff0c;B树是一个多路平衡查找树&#xff0c;相较于普通的二叉树&#xff0c;不会发生极度不平衡的状况&#xff0c;同时也是多路的。 B树的特点是&#xff1a;他会将数据也保存在非叶子节点。而这个…

C语言典型例题55

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 题目&#xff1a; 例题4.7 兔子的繁殖。这是一个有趣的古典问题&#xff1a;有一对兔子&#xff0c;从出生后的第3个月开始起每个月都生一对兔子。小兔子长到第3个月又生一对兔子。假设所有兔子都不死&#xff0c;…

二叉搜索树进阶之红黑树

前言&#xff1a; 在上文我们已经学习了AVL树的相关知识以及涉及的四种旋转的内容&#xff0c;但是AVL树追求平衡导致旋转操作过多&#xff0c;一些情况下影响性能&#xff0c;由此我们就来了解一下二叉搜索树的另外一个分支&#xff0c;红黑树。 &#xff08;倘若对旋转知识…

2024版Assimp配置教程

最近想看看图形学&#xff0c;选择速通LearnOpenGL&#xff0c;不出意外最耗时间的依然是配置环境。按照教程上的把GLFW等等配置的没有问题&#xff0c;但是在Assimp这里卡住了。原因是教程上说的不详细&#xff0c;而网上查的又和现在的版本相去甚远&#xff0c;导致捣鼓了好一…

从web.xml动态读取sunspringmvc.xml文件

文章目录 1.问题分析1.SunWebApplicationContext.java 中sunspringmvc.xml是写死的2.但是web.xml已经配置了init-param&#xff0c;所以应该是可以读取的 2.具体实现1.SunDispatcherServlet.java 得到ServletConfig传递给Spring容器完成初始化2.SunWebApplicationContext.java …

【C++从小白到大牛】C++的隐式和显示类型转换基础知识讲解

目录 1、C语言中的类型转换 2、C语言和C中可以相互转换的类型总结 C语言&#xff1a; CPP&#xff1a; 3. 为什么C需要四种类型转换 4、C四大强制类型转换 4.1static_cast 4.2 reinterpret_cast 4.3 const_cast 4.4dynamic_cast 注…

基于x86 平台opencv的图像采集和seetaface6的性别识别功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.3 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的性别识别功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的性别识别模块从而实现…

谓词和量词

一、个体词和谓词 命题是一句陈述句&#xff0c;命题由个体词和谓词组成。 个体词是句子中的主语部分&#xff0c;比如这里的王童。 谓词是句子里的剩余部分&#xff0c;比如是一个三好学生 个体词用小写字母表示&#xff0c;谓词用大写字母&#xff0b;&#xff08;&#…

数据库(专业存储数据)

数组、链表、变量----->内存&#xff1a;程序运行结束&#xff0c;数据丢失 文件-------------->硬盘 数据库&#xff1a;专业存储数据&#xff0c;大量数据----------->硬盘 一、数据库文件与普通文件区别: 1.普通文件对数据管理(增刪改查)效率低 2.数据库对数据…

算法: 双指针

题目&#xff1a;环形链表 题目讲解&#xff1a; 判断环 要判断链表是否有环&#xff0c;可以使用快慢指针的方法。快指针每次走两步&#xff0c;慢指针每次走一步。如果链表有环&#xff0c;快慢指针最终会相遇&#xff1b;如果没有环&#xff0c;快指针会先到达链表末尾。 …

MySQL:简述对事务的认识

浅谈对Spring事务的认识&#xff1a;https://xiaoer.blog.csdn.net/article/details/80849971 一、事务的特性 事务是数据库永恒不变的话题&#xff0c; ACID&#xff1a;原子性&#xff0c;一致性&#xff0c;隔离性&#xff0c;持久性。 &#xff08;1&#xff09;原子性&am…

基于麒麟信安操作系统的光伏发电功率预测系统完成大规模部署建设

麒麟信安操作系统&#xff0c;作为行业数智化建设的安全根基&#xff0c;为电力业务系统提供了稳定可靠的底层平台&#xff0c;在全球能源结构转型大潮中扮演着至关重要的角色。某光伏电站项目中&#xff0c;基于麒麟信安操作系统的光伏发电功率预测系统完成大规模部署建设&…

手机游玩植物大战僵尸杂交版V2.3.7最新版教程(文章末尾免费直接下载链接)

最新版植物大战僵尸杂交版V2.3.7手机游玩教程 【V2.3.7全面升级】植物大战僵尸杂交版&#xff1a;跨平台终极安装指南 - 苹果、安卓、电脑、电视兼容&#xff0c;界面革新&#xff0c;16卡槽扩展&#xff0c;高分辨率支持&#xff0c;BUG修复&#xff0c;畅享游戏乐趣 前言 …

Java Web —— 第九天(事务)

事务管理 & AOP 事务回顾 概念 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;这些操作 要么同时成功&#xff0c;要么同时失败 操作 开启事务(一组操作开始前&#xff0c;开启事务): start transaction / begin 提交事务(这组操作全部成功…