kubernetes:简称k8s,是管理Docker集群的工具

核心:

master:管理节点
node:计算节点
image:镜像仓库

master由以下4个服务组成:

Api server:统一管理接口
是整个系统的对外接口,供客户端和其它组件调用,相当"于营业厅"
scheduler:调度器
负责对集群内部的资源进行调度,相当于"调度室"
controller manager:大总管
负责管理控制器,相当于 "大总管"
etcd:键值数据库(数据存储节点)
是一个键值存储数据库,存储集群的状态

node节点也是由4部分组成:

docker:node节点的容器
容器管理工具
kubelet:node节点的控制服务
主要负责监视指派到它所在的Pod对象,包括创建,修改,监控,删除等
kube-proxy:代理
主要负责为Pod对象提供代理
其它附加服务Pod:
master发来一个指令给kubelet,kubelet收到指令后回创建一个Pod组(组里可以放多个容器)

准备实验用到的机器:

在node1,node2,node3中安装docker并设置可以使用私有仓库

在repo中安装私有仓库

主机名           ip地址        角色           备注
m01_Master 10.0.0.61 kube-master 管理节点
web01_Node1 10.0.0.7 kube-node 计算节点
web02_Node2 10.0.0.8 kube-node 计算节点
lb01_Node3 10.0.0.5 kub-node 计算节点
nfs_Repo 10.0.0.31

步骤:

1修改所有的主机名(方便练习)

[root@m01 ~]#hostnamectl set-hostname m01_Master
[root@web01 ~]#hostnamectl set-hostname web01_Node1
[root@web02 ~]#hostnamectl set-hostname web02_Node2
[root@lb01 ~]#hostnamectl set-hostname lb01_Node3
[root@nfs01 ~]#hostnamectl set-hostname nfs_Repo

2在处理master之外的所有主机中安装docker,下面仅以node3为例:

1)安装docker

#安装依赖:
yum install -y yum-utils device-mapper-persistent-data lvm2
#添加yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#安装docker
yum install docker-ce docker-ce-cli containerd.io --allowerasing
#启动并设置开机启动
systemctl start docker
systemctl enable docker
#验证安装是否成功
docker version

2)开启路由转发(目的是让docker和其它的容器可以互相通信)

#开启路由转发
[root@lb01_Node3 ~]#vim /etc/sysctl.conf
[root@lb01_Node3 ~]#tail -1 /etc/sysctl.conf
net.ipv4.ip_forward=1
#让命令生效:
[root@lb01_Node3 ~]#sysctl -p
net.ipv4.ip_forward = 1
#重启docker

3)修改docker启动文件,将通讯规则设置成允许

[root@lb01_Node3 ~]#vim /usr/lib/systemd/system/docker.service
[Service]
....
ExecStartPost=/sbin/iptables -P FORWARD ACCEPT
ExecReload=/bin/kill -s HUP $MAINPID

4)重新加载docker配置文件:

[root@lb01_Node3 ~]#systemctl daemon-reload
[root@web01 ~]#systemctl restart docker

5)验证:

[root@lb01_Node3 ~]#ifconfig

6)卸载防火墙:

[root@lb01_Node3 ~]#yum remove firewalld-*

3在repo中搭建私有仓库

1)拉取镜像

[root@nfs_Repo ~]#docker pull registry

2)在服务器nfs_Repo上运行docker私有仓库镜像,创建容器my-registry。

#启动容器
docker run -d -p 5000:5000 --restart=always --name my-registry \
-v /registry:/registry \
-e REGISTRY_STORAGE_DELETE_ENABLED=true \
-e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
registry:latest

#查看仓库内容:
[root@nfs_Repo ~]#curl http://10.0.0.31:5000/v2/_catalog
{"repositories":[]}

4.1在客户端配置私有仓库ip和端口并重启docker

[root@m01_Master ~]#cat  /etc/docker/daemon.json
{
"registry-mirrors": [ "http://hub-mirror.c.163.com" ],
"insecure-registries": ["10.0.0.31:5000"]
}
[root@m01_Master ~]#systemctl restart docker

4.2给镜像打新标签并将新镜像上传至仓库

[root@m01_Master ~]#docker tag registry:latest 10.0.0.31:5000/registrytest
[root@m01_Master ~]#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.31:5000/registrytest latest b8604a3fe854 7 weeks ago 26.2MB
registry latest b8604a3fe854 7 weeks ago 26.2MB
[root@m01_Master ~]#docker push 10.0.0.31:5000/registrytest
Using default tag: latest
The push refers to repository [10.0.0.31:5000/registrytest]
aeccf26589a7: Pushed
f640be0d5aad: Pushed
aa4330046b37: Pushed
ad10b481abe7: Pushed
69715584ec78: Pushed
latest: digest: sha256:36cb5b157911061fb610d8884dc09e0b0300a767a350563cbfd88b4b85324ce4 size: 1363
[root@m01_Master ~]#curl http://10.0.0.31:5000/v2/_catalog
{"repositories":["registrytest"]}

4在其它几台机器中配置镜像仓库的ip和端口并下载测试

#配置仓库的端口和ip
[root@web01_Node1 ~]#vim /etc/docker/daemon.json
{
"registry-mirrors": [ "http://hub-mirror.c.163.com" ],
"insecure-registries": ["10.0.0.31:5000"]
}
#重启docker
[root@web01_Node1 ~]#systemctl restart docker
#拉取镜像测试
[root@web01_Node1 ~]#docker pull 10.0.0.31:5000/registrytest
Using default tag: latest
latest: Pulling from registrytest
Digest: sha256:36cb5b157911061fb610d8884dc09e0b0300a767a350563cbfd88b4b85324ce4
Status: Downloaded newer image for 10.0.0.31:5000/registrytest:latest
10.0.0.31:5000/registrytest:latest
#查看镜像
[root@web01_Node1 ~]#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.31:5000/registrytest latest b8604a3fe854 7 weeks ago 26.2MB

[root@web01_Node1 ~]

四,在服务端配置镜像仓库管理web界面

1下载web界面管理工具docker-registry-web镜像

[root@m01_Master ~]#docker pull hyper/docker-registry-web
[root@m01_Master ~]#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hyper/docker-registry-web latest 0db5683824d8 5

2设置私有仓库只读参数为false,创建启动容器registry-web

docker run -itd -p 8080:8080 --restart=always --name registry_web --link my-registry \
-e REGISTRY_URL=http://10.0.0.31:5000/v2 \
-e REGISTRY_NAME=10.0.0.31:5000 \
-e REGISTRY_READONLY=false \
hyper/docker-registry-web:latest

3查看配置文件是否配置了私有仓的ip和端口

[root@nfs_Repo ~]#cat  /etc/docker/daemon.json
{
"registry-mirrors": [ "http://hub-mirror.c.163.com" ],
"insecure-registries": ["10.0.0.31:5000"]
}

4重启docker后访问网址​​http://10.0.0.31:8080/​