k8s的部署

k8s的介绍

虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境

  • 优点:程序环境不会相互产生影响,提供了一定程度的安全性

  • 缺点:增加了操作系统,浪费了部分资源

容器化部署:与虚拟化类似,但是共享了操作系统

容器化部署方式给带来很多的便利,但是也会出现一些问题,比如说:

  • 一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器

  • 当并发访问量变大的时候,怎么样做到横向扩展容器数量

2 容器编排应用

为了解决这些容器编排问题,就产生了一些容器编排的软件:

  • Swarm:Docker自己的容器编排工具

  • Mesos:Apache的一个资源统一管控的工具,需要和Marathon结合使用

  • Kubernetes:Google开源的的容器编排工具

kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

  • 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器

  • 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整

  • 服务发现:服务可以通过自动发现的形式找到它所依赖的服务

  • 负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡

  • 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本

  • 存储编排:可以根据容器自身的需求自动创建存储卷

k8s的架构

一个kubernetes集群主要是由控制节点(master)工作节点(node)构成,每个节点上都会安装不同的组件

1 master:集群的控制平面,负责集群的决策

  • ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制

  • Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上

  • ControllerManager : 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等

  • Etcd :负责存储集群中各种资源对象的信息

2 node:集群的数据平面,负责为容器提供运行环境

  • kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理

  • Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)

  • kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡

常用名词介绍

  • Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控

  • Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的

  • Pod:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器

  • Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等

  • Service:pod对外服务的统一入口,下面可以维护者同一类的多个pod

  • Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签

  • NameSpace:命名空间,用来隔离pod的运行环境

部署

需要三台虚拟机,和一台以及配置了hub仓库的虚拟机

说明

一台虚拟机做master,IP为172.25.254.100

两台为node节点,IP为172.25.254.10和172.25.254.20

hub仓库的IP为172.25.254.200

这是hub仓库搭建好的样子

前提关闭虚拟机的selinx和防火墙

禁用三台虚拟机的swap和本地解析

[root@k8smaster ~]# vim /etc/fstab 

[root@k8smaster ~]# systemctl mask swap.target 
[root@k8smaster ~]# swapoff -a

安装docker

配置软件仓库,下载地址可以在阿里云上找

[root@k8smaster ~]# cd /etc/yum.repos.d/

[root@k8smaster yum.repos.d]# vim docker.repo

下载并安装docker

[root@k8smaster yum.repos.d]# dnf install docker-ce -y

正在更新 Subscription Management 软件仓库。
无法读取客户身份

本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。

上次元数据过期检查:0:02:44 前,执行于 2024年10月06日 星期日 16时57分04秒。
依赖关系解决。
========================================================================
 软件包                     架构    版本               仓库        大小
========================================================================
安装:
 docker-ce                  x86_64  3:27.3.1-1.el9     docker-ce   27 M
安装依赖关系:
 containerd.io              x86_64  1.7.22-3.1.el9     docker-ce   43 M
 docker-ce-cli              x86_64  1:27.3.1-1.el9     docker-ce  7.9 M
安装弱的依赖:
 docker-buildx-plugin       x86_64  0.17.1-1.el9       docker-ce   14 M
 docker-ce-rootless-extras  x86_64  27.3.1-1.el9       docker-ce  4.4 M
 docker-compose-plugin      x86_64  2.29.7-1.el9       docker-ce   13 M

事务概要
========================================================================
安装  6 软件包

总下载:109 M
安装大小:426 M
下载软件包:
(1/6): docker-buildx-plugin-0.17.1-1.el 4.6 MB/s |  14 MB     00:02    
(2/6): docker-ce-27.3.1-1.el9.x86_64.rp 6.2 MB/s |  27 MB     00:04    
(3/6): containerd.io-1.7.22-3.1.el9.x86 5.4 MB/s |  43 MB     00:07    
(4/6): docker-ce-rootless-extras-27.3.1 1.2 MB/s | 4.4 MB     00:03    
(5/6): docker-ce-cli-27.3.1-1.el9.x86_6 1.5 MB/s | 7.9 MB     00:05    
(6/6): docker-compose-plugin-2.29.7-1.e 7.0 MB/s |  13 MB     00:01    
------------------------------------------------------------------------
总计                                     11 MB/s | 109 MB     00:09     
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
  准备中  :                                                         1/1 
  安装    : docker-compose-plugin-2.29.7-1.el9.x86_64               1/6 
  运行脚本: docker-compose-plugin-2.29.7-1.el9.x86_64               1/6 
  安装    : docker-buildx-plugin-0.17.1-1.el9.x86_64                2/6 
  运行脚本: docker-buildx-plugin-0.17.1-1.el9.x86_64                2/6 
  安装    : docker-ce-cli-1:27.3.1-1.el9.x86_64                     3/6 
  运行脚本: docker-ce-cli-1:27.3.1-1.el9.x86_64                     3/6 
  安装    : containerd.io-1.7.22-3.1.el9.x86_64                     4/6 
  运行脚本: containerd.io-1.7.22-3.1.el9.x86_64                     4/6 
  安装    : docker-ce-rootless-extras-27.3.1-1.el9.x86_64           5/6 
  运行脚本: docker-ce-rootless-extras-27.3.1-1.el9.x86_64           5/6 
  安装    : docker-ce-3:27.3.1-1.el9.x86_64                         6/6 
  运行脚本: docker-ce-3:27.3.1-1.el9.x86_64                         6/6 
  验证    : containerd.io-1.7.22-3.1.el9.x86_64                     1/6 
  验证    : docker-buildx-plugin-0.17.1-1.el9.x86_64                2/6 
  验证    : docker-ce-3:27.3.1-1.el9.x86_64                         3/6 
  验证    : docker-ce-cli-1:27.3.1-1.el9.x86_64                     4/6 
  验证    : docker-ce-rootless-extras-27.3.1-1.el9.x86_64           5/6 
  验证    : docker-compose-plugin-2.29.7-1.el9.x86_64               6/6 
已更新安装的产品。

已安装:
  containerd.io-1.7.22-3.1.el9.x86_64                                   
  docker-buildx-plugin-0.17.1-1.el9.x86_64                              
  docker-ce-3:27.3.1-1.el9.x86_64                                       
  docker-ce-cli-1:27.3.1-1.el9.x86_64                                   
  docker-ce-rootless-extras-27.3.1-1.el9.x86_64                         
  docker-compose-plugin-2.29.7-1.el9.x86_64                             

完毕!

其他两台也要可以再配置一边,也可以直接传输

安装

如果在安装时有软件冲突可以用dnf remove 来删除冲突的软件包

配置解析,解析三台主机都要有

[root@k8smaster ~]# vim /etc/hosts

其他两台主机也要

测试

找台主机ping,此时解析就以及配置好了

配置认证

在master创建目录,并把hub仓库的证书传给master

[root@k8smaster ~]# mkdir -p /etc/docker/certs.d/reg.mqw.org/


[root@hub harbor]# scp /data/certs/mqw.org.crt root@172.25.254.100:/etc/docker/certs.d/reg.mqw.org/ca.crt

root@172.25.254.100's password: 
mqw.org.crt                           100% 2114     1.5MB/s   00:00   

测试,如果登录成功,则代表配置成功

指定docker默认的dockers仓库

[root@k8smaster ~]# cd /etc/docker/
[root@k8smaster docker]# vim daemon.json


{  "registry-mirrors": ["https://reg.mqw.org"]  }

启动docker

[root@k8smaster docker]# systemctl enable --now docker

但此时还有问题,可以从docker info看到

添加配置模块

#开机时能自动激活
[root@k8smaster ~]# echo br_netfilter > /etc/modules-load.d/docker_mod.conf 
[root@k8smaster ~]# modprobe br_netfilter
[root@k8smaster ~]# vim /etc/sysctl.d/docker.conf

net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
                   

激活

[root@k8smaster ~]# sysctl --system 

重启docker

[root@k8smaster ~]# systemctl restart docker

此时查看docker info 就没有问题了

测试

从仓库拉取镜像,此时代表成功(前提仓库里有镜像)

此时一台就配置好了,其他两台可以根据刚刚的配置来一遍,或者直接传输

在两台主机加载模块

[root@k8s2 ~]# modprobe br_netfilter 

接着在两台主机激活,两台都要

[root@k8s2 ~]# sysctl --system 

启动docker

[root@k8s2 ~]# systemctl enable --now docker

查看docker info,此时两台主机都没问题

测试,都能拉下镜像

此时三台主机的docker配置完成

配置k8s

创建软件仓库,三台都装(下载地址可以找阿里云)

[root@k8smaster ~]# cd /etc/yum.repos.d/
[root@k8smaster yum.repos.d]# vim k8s.repo

安装,三台都装

[root@k8smaster yum.repos.d]# dnf install kubeadm.x86_64 kubectl.x86_64 kubelet.x86_64 -y

安装插件,三台都要(可以从网上下载,传输到虚拟机)

安装

[root@k8smaster ~]# dnf install *.rpm -y

指定网络插件名称及基础容器镜像

[root@k8smaster ~]# vim /lib/systemd/system/cri-docker.service 

其他两台主机也要

都启动

[root@k8smaster ~]# systemctl enable --now cri-docker.service 

都启动kubelet

[root@k8smaster ~]# systemctl enable --now kubelet.service 

在master节点拉取K8S所需镜像

[root@k8smaster ~]# kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.30.0 --cri-socket=unix:///var/run/cri-dockerd.sock

上传到hub仓库

先在hub创建一个名为k8s的项目

之后把他们打上标签上传

[root@k8smaster ~]# docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.30.0 reg.mqw.org/k8s/kube-apiserver:v1.30.0

[root@k8smaster ~]# docker push reg.mqw.org/k8s/kube-apiserver:v1.30.0

[root@k8smaster ~]# docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.30.0 reg.mqw.org/k8s/kube-controller-manager:v1.30.0

[root@k8smaster ~]# docker push reg.mqw.org/k8s/kube-controller-manager:v1.30.0

[root@k8smaster ~]# docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.30.0 reg.mqw.org/k8s/kube-scheduler:v1.30.0

[root@k8smaster ~]# docker push reg.mqw.org/k8s/kube-scheduler:v1.30.0

[root@k8smaster ~]# docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.30.0 reg.mqw.org/k8s/kube-proxy:v1.30.0

[root@k8smaster ~]# docker push reg.mqw.org/k8s/kube-proxy:v1.30.0

[root@k8smaster ~]# docker tag registry.aliyuncs.com/google_containers/coredns:v1.11.3 reg.mqw.org/k8s/coredns:v1.11.3

[root@k8smaster ~]# docker push reg.mqw.org/k8s/coredns:v1.11.3

[root@k8smaster ~]# docker tag registry.aliyuncs.com/google_containers/pause:3.9 reg.mqw.org/k8s/pause:3.9

[root@k8smaster ~]# docker push reg.mqw.org/k8s/pause:3.9

[root@k8smaster ~]# docker tag  registry.aliyuncs.com/google_containers/etcd:3.5.15-0 reg.mqw.org/k8s/etcd:3.5.15-0

[root@k8smaster ~]# docker push reg.mqw.org/k8s/etcd:3.5.15-0

上传完成后

拉集群

执行初始化命令

[root@k8smaster ~]#  kubeadm init --pod-network-cidr=10.244.0.0/16 \
> --image-repository reg.mqw.org/k8s \
> --kubernetes-version v1.30.0 \
> --cri-socket=unix:///var/run/cri-dockerd.sock

如果配置错了重做,需要先删除,之后再开始重做

[root@k8smaster ~]# kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock

指定集群配置文件变量

[root@k8smaster ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile 
[root@k8smaster ~]# source ~/.bash_profile 

设置kubectl命令补齐功能

[root@k8smaster ~]#  echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@k8smaster ~]#  source  ~/.bashrc

安装网络插件

加载

[root@k8smaster ~]# docker load -i flannel-0.25.5.tag.gz

再hub仓库创建一个flannel的项目,之后上传镜像

[root@k8smaster ~]# docker tag flannel/flannel:v0.25.5 reg.mqw.org/flannel/flannel:v0.25.5

[root@k8smaster ~]# docker push reg.mqw.org/flannel/flannel:v0.25.5

[root@k8smaster ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 reg.mqw.org/flannel/flannel-cni-plugin:v1.5.1-flannel1

[root@k8smaster ~]# docker push  reg.mqw.org/flannel/flannel-cni-plugin:v1.5.1-flannel1

查看

修改文件

[root@k8smaster ~]# vim kube-flannel.yml 

把所有的image的路径改为,即去掉前面的

启用

[root@k8smaster ~]# kubectl apply -f kube-flannel.yml 

此时master为ready状态

再其他两台主机启动服务

[root@k8s1 ~]# systemctl start kubelet.serv

之后翻找前面的初始化的后面的令牌,并复制到其他两台主机上,两台都要

[root@k8s1 ~]# kubeadm join 172.25.254.100:6443 --token n3u7gu.zzumlnbhevtohv9f --discovery-token-ca-cert-hash sha256:0c08e6ff75578e3b1778cf72c7e81c91397c4ec6de21ac5abde16c71a6df34d3 --cri-socket=unix:///var/run/cri-dockerd.sock

如果找不到了,可以重新生成

如果配置错了,要先删除,在继续配置

[root@k8s1 ~]# kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock

查看,此时为配置成功

此时集群就配置完成

测试

运行一个nginx

[root@k8smaster ~]# kubectl run web --image nginx/nginx

查看详细信息,可以看到他运行在k8s1主机上

访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值