菜单
本页目录

Kubernetes (K8S)

1 Kubernetes-组件介绍

一、K8S发展经历

1)云计算分类

IAAS		Infrastructure as a Service
PAAS		platform as a service
SAAS		Software as a Service

2)发展

image-20230109160009972

Docker Swarm:适合中小型企业
		$ docker swarm init			#设置节点
		$ docker swarm join			#加入节点


Apache Mesos:Twitter  Marathon
				2019.0502.19点:Mesos 全面转向 Kubernetes

Kubernetes:CNCF(云计算基金会)
			前身:Borg(google内部大规模的集群管理系统)

Borg架构:

image-20230109162046401

3)Kubernetes 优势

- 轻量级
		代码生成器
- 开源

- 弹性伸缩

- 负载均衡

限制要求:

每个节点的 Pod 数量不超过 110
节点数不超过 5000
Pod 总数不超过 150000
容器总数不超过 300000

image-20230109161516639

二、组件说明

k8s架构

image-20230109195908002

1、组件

1)ETCD

数据存储核心

Raft:

共识算法、最终一致算法(ETCD的底层算法支持)(Paxos 算法的简化版)
        Leader(领导者)、Follow(跟随着)、Candidate(竞争者)
        每一个 Raft 集群中都包含多个服务器,在任意时刻,每一台服务器只可能处于 Leader、Follower 以及 Candidate 三种状态;在处于正常的状态时,集群中只会存在一个 Leader,其余的服务器都是 Follower

**原理图:**ETCD节点之间关系

ETCD节点之间关系

ETCD高可用集群:

建议 3、5、7、9个高可用节点
        3个高可用节点只能有一次损坏
        ETCD-CLUSTER:搭建高可用集群的方式

ETCD版本:(V2、v3)

image-20230109185923909

ETCD 框架:

基于http协议的 C/S 架构,实现数据的上传、下载
透过 Raft 算法,将数据写入:
					WAL(预写入日志):
								entry(版本确认)
								snapshot(快照)
					store(真实的底层存储)

image-20230109190806260

2)api server

应用程序编程接口

Kubernetes 系统的入口,封装了核心对象(功能)的增删改查操作

RESTful API 接口提供给内、外组件调用(同一接口列表,实现不同功能的调用)
维护REST对象,持久化到 ETCD 中存储

3)scheduler

调度(调度员)

新建立的 Pod 进行节点 (node) 选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器

4)replication controler

(controller manager)

控制管理器(管家)

负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;

5)Kubelet

监听组件(监听 api 中是否有自己 node 的容器可创建)

在各个 node 节点中,负责维护容器的生命周期,同时也负责 Volume(CSI)和网络(CNI)的管理;

6)Container runtime

负责镜像管理以及 Pod 和容器的真正运行(CRI);

7)Kube-proxy

负责为 Service 提供 cluster 内部的服务发现和负载均衡

监听 api (是否有 ipvs , netfilter 修改,从而进行管理),其中有netlinks接口

2、插件

官方组件中,必须预留好接口,从而插件与之对应

image-20230109193326407

3、附件

image-20230109193429499

详细解释:点击查看图片详细

Kubernetes

三、Pod

1、概念

kubernetes 集群由内部部署的最基本单位:Pod(豆荚)

Pod 是一种逻辑概念,不是实体
	kubelet > Docker > pod
		pod 就是一组容器的逻辑概念
		
	RH podman
		创建 pod

Pod 中有一个 pause 容器:

与其他容器共享:网络、存储卷、PID、IPC(**注意 Pod 中不能出现网络冲突的服务**)
位于其他所有容器运行前启动
负责初始化网络栈、挂载可能存在的存储卷、僵尸进程的处理(回收僵尸进程的资源)
启动后就睡眠,减轻不必要的资源消耗(也不易挂)

注意:只有pause 容器和剩下的一个容器,也能叫做 Pod

image-20230109195232799

2、实验:pod 模拟创建

1、导入

image-20230109194533371

2、解压、导入镜像

[root@localhost ~]# tar -xf pod.tar.gz 
[root@localhost ~]# ls
pod.tar.gz  pod实验 
[root@localhost ~]# cd pod实验/

[root@localhost pod实验]# docker load -i ghost.tar 

[root@localhost pod实验]# docker load -i nginx.tar 

[root@localhost pod实验]# docker load -i pause.tar 

3、pod 模拟创建

$ cat <<EOF>> nginx.conf
error_log stderr;
events { worker_connections 1024;}
http {
    access_log /dev/stdout combined;
    server {
        listen 80 default_server;
        server_name example.com www.example.com;
        location / {
            proxy_pass http://127.0.0.1:2368;
        }
    }
}
EOF
 
#创建 pause 容器
$ docker run --name pause -p 8080:80 -d k8s.gcr.io/pause:3.1

#创建 nginx 容器(与 pause 容器共享:网络、存储卷、PID、IPC)
$ docker run --name nginx -v `pwd`/nginx.conf:/etc/nginx/nginx.conf  --net=container:pause --ipc=container:pause --pid=container:pause -d nginx


#创建 ghost 容器(与 pause 容器共享:网络、存储卷、PID、IPC)
$ docker run -d --name ghost --net=container:pause --ipc=container:pause --pid=container:pause ghost

4、测试

1)浏览器访问测试:

image-20230109195431302

2)新建一个容器((与 pause 容器共享:网络、存储卷、PID、IPC)),进入查看进程

[root@localhost pod实验]# docker run -d --name 163 --net=container:pause --ipc=container:pause --pid=container:pause 163

[root@localhost pod实验]# docker exec -it 163 /bin/bash

[root@8280fdb89013 /]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.0   1012     4 ?        Ss   17:16   0:00 /pause
root          5  0.0  0.1   8848  3440 ?        Ss   17:16   0:00 nginx: master process nginx -g daemon off;
101          33  0.0  0.1   9296  1984 ?        S    17:16   0:00 nginx: worker process
1000         34  1.8  6.0 959904 112216 ?       Ssl  17:16   0:08 node current/index.js
root        122  1.4  0.7 115256 14876 ?        Ss   17:24   0:00 /usr/bin/python /usr/bin/supervisord
root        128  0.0  0.1  82540  3588 ?        S    17:24   0:00 /usr/sbin/sshd -D
root        129  0.7  0.0  11764  1844 ?        Ss   17:24   0:00 /bin/bash
root        143  0.0  0.0  35880  1476 ?        R+   17:24   0:00 ps -aux