kubernetes

当服务器的容器有几百几千个时,手动管理已经不太现实了,我们就需要有一个能管理容器的工具。

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

相关推荐
Csxyzj2 小时前
kubernetes集群部署方法
java·linux·kubernetes
wish3662 小时前
K8S 免镜像部署:通过 API 上传文件动态创建服务(以 Ollama 为例)
人工智能·云原生·容器·kubernetes·local llm
小小克2 小时前
k8s集群部署的方法
云原生·容器·kubernetes
kobeyyl2 小时前
K8s集群部署核心原理与主流部署方法全解析
云原生·容器·kubernetes
IT大白鼠3 小时前
Kubernetes Goat:云原生安全靶场实践指南
安全·云原生·kubernetes
无望__wsk4 小时前
k8s部署
云原生·容器·kubernetes
万里侯16 小时前
GitOps 2026年演进趋势:从配置管理到环境即代码的范式转移及Pull vs Push模型的再思考
微服务·容器·k8s
acd1200917 小时前
一次线上OOM排查实录:从jmap到代码重构,我踩过的坑全在这了
容器·重构·kubernetes
易番番ERP17 小时前
以销定采模式下,ERP如何帮助贸易企业管住订单真实利润
大数据·低代码·微服务·云原生·成本核算·易番番erp·以销定采