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

相关推荐
鹤落晴春12 小时前
【K8s】从 ConfigMap 到 Argo CD:Kubernetes 配置管理链路
运维·云原生·容器·kubernetes
汇智信科12 小时前
基于 Jmis 框架的制度与流程管控系统设计与应用|项目全生命周期管理
大数据·人工智能·微服务·云原生·汇智信科
名字还没想好☜16 小时前
Docker 镜像瘦身进阶:用 distroless/scratch 把 Go 服务打到 10MB,以及没 shell 怎么调试
运维·docker·容器·golang·kubernetes
JavaPub-rodert16 小时前
Docker 深入理解:从容器原理到生产环境最佳实践
运维·docker·容器
陈聪.17 小时前
Kubernetes 集群网络插件迁移:从 Flannel 到 Calico 实战总结
云原生·kubernetes
暖核18 小时前
Docker 入门|吃透容器生态与底层原理
运维·docker·容器
滕州市燕猫虎计算机科技工作室个体工商户18 小时前
Docker常用命令
运维·docker·容器
wdfk_prog19 小时前
lely-canopen-rtt:为什么推荐在 RT-Thread 上使用 Lely CANopen 构建主站
java·运维·缓存·docker·容器
33三 三like20 小时前
安装并启动Docker
运维·docker·容器
滕州市燕猫虎计算机科技工作室个体工商户20 小时前
进入Docker容器内的命令行界面
运维·docker·容器