当服务器的容器有几百几千个时,手动管理已经不太现实了,我们就需要有一个能管理容器的工具。
kubernetes是一个开源的容器编排平台,当服务器有一大堆容器要管理的时候他就是自动帮你管理好的总调度。例如:Docker 是乐手,Kubernetes 是指挥家。乐手负责演奏,指挥家负责让整个乐团协调演出、有人缺席就立刻补位、曲目切换不能停。
主要功能:
自我修复:一旦容器崩溃了,能在1秒内启动新的容器。
弹性伸缩:可以根据需要,自动对集群内的容器数量进行调整。
服务发现:服务可以通过自动发现的形式找到他所依赖的服务。
负载均衡:如果一个服务启动了多个容器,能够自动实现请求的负载均衡。
版本回退:如果发现新的版本有问题,可以马上回退到旧的版本。
存储编排:可以根据容器的需求自动创建存储卷。
一、集群搭建
部署kubernetes需要的主机
|------------|---------------|----------|
| 主机名 | IP | 角色 |
| harbor | 172.25.25.250 | harbor仓库 |
| k8s-master | 172.25.25.100 | master |
| k8s-node1 | 172.25.25.10 | node1 |
| k8s-node2 | 172.25.25.20 | node2 |
1、建立harbor仓库
(1)建立docker仓库
root@harbor \~# vim /etc/yum.repos.d/docker.repo

下载docker安装包到/mnt/docker并不安装
yum install docker-ce --downloadonly --destdir /mnt/docker
再下载http和createrepo服务为创建发布docker仓库做准备
root@harbor \~# yum install httpd createrepo -y
将下好的docker安装包放到http服务的发布目录底下
root@harbor \~# mv /mnt/docker/* /var/www/html/docker/
把 /var/www/html/docker/ 这个文件夹里的所有 RPM 安装包,整理成一个可以通过 YUM 安装的软件仓库
root@harbor \~# createrepo /var/www/html/docker/

修改http服务的监听端口
root@harbor \~# vim /etc/httpd/conf/httpd.conf

再次修改docker仓库
root@harbor \~# vim /etc/yum.repos.d/docker.repo

验证docker仓库能不能用

2、安装docker仓库在harbor
root@harbor \~# yum install docker-ce -y
root@harbor \~# echo br_netfilter > /etc/modules-load.d/docker_mod.conf
root@harbor \~# modprobe -a br_netfilter #加载内核模块
root@harbor \~# vim /etc/sysctl.d/docker.conf

root@harbor \~# systemctl restart systemd-modules-load.service #重新加载内核模块自动加载服务
root@harbor \~# vim /lib/systemd/system/docker.service

root@harbor \~# systemctl daemon-reload #重新加载服务配置文件
root@harbor \~# systemctl enable --now docker.service #开机自启动
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
3、生成key
root@harbor \~# mkdir /data/certs -p #存放key文件
root@harbor \~# openssl req -newkey rsa:4096 -nodes -sha256 -keyout /data/certs/timinglee.org.key -addext "subjectAltName = DNS:reg.timinglee.org" -x509 -day 365 -out /data/certs/timinglee.org.crt

4、配置harbor仓库
root@harbor \~# tar zxf harbor-offline-installer-v2.5.4.tgz -C /opt/
root@harbor \~# ls
anaconda-ks.cfg harbor harbor-offline-installer-v2.5.4.tgz vm vmset.sh vmset.sh~
root@harbor \~# cd /opt/harbor/
root@harbor harbor# cp harbor.yml.tmpl harbor.yml
root@harbor harbor# vim harbor.yml
修改三个参数


root@harbor harbor# ./install.sh --with-chartmuseum 安装镜像仓库和ChartMuseum组件
编写harbor的启动脚本
root@harbor harbor# vim /lib/systemd/system/harbor.service

root@harbor harbor# systemctl daemon-reload
root@harbor harbor# systemctl enable --now harbor.service
Created symlink /etc/systemd/system/multi-user.target.wants/harbor.service → /usr/lib/systemd/system/harbor.service.
5、启动并验证docker仓库
Docker 客户端配置自签名证书的信任
root@harbor harbor# mkdir /etc/docker/certs.d/reg.timinglee.org/ -p
root@harbor harbor# cp /data/certs/timinglee.org.crt /etc/docker/certs.d/reg.timinglee.org/ca.crt
写本地解析
root@harbor harbor# vim /etc/hosts

root@harbor harbor# systemctl restart docker.service
登录仓库

二、构建kubernetes
在所有主机上关闭swap

1、使用harbor中的docker仓库安装docker
root@harbor \~# for i in 10 20 100 ;do scp /etc/yum.repos.d/docker.repo 172.25.25.$i:/etc/yum.repos.d/docker.repo;done
在所有主机上做
安装docker
root@node1 \~# yum install docker-ce -y
root@node1 \~# systemctl enable --now docker.service
配置docker加速器
root@node1 \~# vim /etc/docker/daemon.json

root@node1 \~# docker info
重启docker

主机之间彼此建立解析

配置kubernetes安装源
root@node1 \~# vim /etc/yum.repos.d/kubernetes.repo

三、部署kubetnetes
1、用二进制方式安装cri-dockerd
root@harbor \~# wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.4.4/cri-dockerd-0.4.4.amd64.tgz
root@harbor \~# tar zxf cri-dockerd-0.4.4.amd64.tgz
root@harbor \~# cd cri-dockerd/
root@harbor cri-dockerd# ls
cri-dockerd cri-docker.service cri-docker.socket
root@harbor cri-dockerd# install -o root -m 0755 cri-dockerd /usr/local/bin/cri-dockerd
root@harbor cri-dockerd# cp cri-docker.s* /lib/systemd/system
root@master \~# chmod +x /lib/systemd/system/cri-docker.s*
root@harbor cri-dockerd# mv cri-docker.service /lib/systemd/system/cri-doker.service
root@master \~# vim /lib/systemd/system/cri-docker.service

root@harbor \~# systemctl daemon-reload
root@master \~# systemctl enable --now cri-docker.service
root@master \~# systemctl status cri-docker.service

2、安装kubernetes集群需要的软件
master节点
root@master \~# dnf install kubelet kubeadm kubectl -y
root@master \~# systemctl enable --now kubelet.service
node节点
root@node1 \~# dnf install kubelet kubeadm -y
root@node1 \~# systemctl enable --now kubelet.service
master上命令补齐
root@master \~# echo "source <(kubectl completion bash)" >> ~/.bashrc
root@master \~# echo "source <(kubeadm completion bash)" >> ~/.bashrc
root@master \~# source ~/.bashrc
3、下载kubernetes镜像
查看并下载镜像
上传镜像到本地仓库
登录 仓库
root@master \~# docker login reg.timinglee.org
Username: admin
Password:
WARNING! Your credentials are stored unencrypted in '/root/.docker/config.json'.
Configure a credential helper to remove this warning. See
https://docs.docker.com/go/credential-store/、
镜像打包
root@master \~# docker images --format "{{.Repository}}:{{.Tag}}" | awk -F "/" '/google/{system("docker tag "0" reg.timinglee.org/k8s/"3)}'
上传镜像
root@master \~# docker images --format "{{.Repository}}:{{.Tag}}" | awk -F "/" '/timinglee/{system("docker push "$0)}'
四、初始化kubernetes集群
root@master \~# kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.timinglee.org/k8s --kubernetes-version v1.35.7 --cri-socket=unix:///var/run/cri-dockerd.sock

root@master \~# vim ~/.bash_profile

root@master \~# source ~/.bash_profile
node节点加入到kubernetes环境

5、安装网络插件
root@master \~# tar zxf kube-flannel-v0.28.9.tar.gz
root@master \~# cd flannel/
修改参数

上传镜像
root@master flannel# docker load -i kube-flannel-v0.28.9.tar
在harbor仓库中新建一个项目


root@master flannel# kubectl apply -f kube-flannel.yml
namespace/kube-flannel created
serviceaccount/flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
