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 registry yum安装源,私有仓库
步骤:
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 years ago 599MB
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/