Kubernetes (K8S)
1 Kubernetes-组件介绍
一、K8S发展经历
1)云计算分类
2)发展
Docker Swarm:适合中小型企业
$ docker swarm init #设置节点
$ docker swarm join #加入节点
Apache Mesos:Twitter Marathon
2019.0502.19点:Mesos 全面转向 Kubernetes
Kubernetes:CNCF(云计算基金会)
前身:Borg(google内部大规模的集群管理系统)
Borg架构:
3)Kubernetes 优势
限制要求:
二、组件说明
1、组件
1)ETCD
数据存储核心
Raft:
共识算法、最终一致算法(ETCD的底层算法支持)(Paxos 算法的简化版)
Leader(领导者)、Follow(跟随着)、Candidate(竞争者)
每一个 Raft 集群中都包含多个服务器,在任意时刻,每一台服务器只可能处于 Leader、Follower 以及 Candidate 三种状态;在处于正常的状态时,集群中只会存在一个 Leader,其余的服务器都是 Follower
原理图:ETCD节点之间关系
ETCD高可用集群:
ETCD版本:(V2、v3)
ETCD 框架:
2)api server
应用程序编程接口
Kubernetes 系统的入口,封装了核心对象(功能)的增删改查操作
RESTful API 接口提供给内、外组件调用(同一接口列表,实现不同功能的调用)
维护REST对象,持久化到 ETCD 中存储
3)scheduler
调度(调度员)
4)replication controler
(controller manager)
控制管理器(管家)
5)Kubelet
监听组件(监听 api 中是否有自己 node 的容器可创建)
6)Container runtime
7)Kube-proxy
2、插件
官方组件中,必须预留好接口,从而插件与之对应
3、附件
详细解释:点击查看图片详细
三、Pod
1、概念
kubernetes 集群由内部部署的最基本单位:Pod(豆荚)
Pod 中有一个 pause 容器:
与其他容器共享:网络、存储卷、PID、IPC(**注意 Pod 中不能出现网络冲突的服务**)
位于其他所有容器运行前启动
负责初始化网络栈、挂载可能存在的存储卷、僵尸进程的处理(回收僵尸进程的资源)
启动后就睡眠,减轻不必要的资源消耗(也不易挂)
注意:只有pause 容器和剩下的一个容器,也能叫做 Pod
2、实验:pod 模拟创建
1、导入
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)浏览器访问测试:
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













