Bootstrap

【项目实战15】k8s(1)—k8s的部署(图文详解安装,集群部署过程)

一、前言

一、简介

为方便docker的管理,Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合。
(1)Kubernetes的好处:
(2)隐藏资源管理和错误处理,用户仅需要关注应用的开发。
服务高可用、高可靠。
(3)可将负载运行在由成千上万的机器联合而成的集群中。

二、k8s特点

在这里插入图片描述

Kubernetes主要由以下几个核心组件组成:
(1)etcd:保存了整个集群的状态
(2)apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
(3)controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
(4)scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
(5)kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
(6)Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)
(7) kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡

除了核心组件,还有一些推荐的Add-ons:
(1)kube-dns:负责为整个集群提供DNS服务
(2)Ingress Controller:为服务提供外网入口
(3)Heapster:提供资源监控
(4)Dashboard:提供GUI
(5)Federation:提供跨可用区的集群
(6)Fluentd-elasticsearch:提供集群日志采集、存储与查询

二、安装

一、安装地址

1)、官方地址
https://kubernetes.io/zh/docs/home/
进入主界面
在这里插入图片描述
先设置安装安装工具kubeadm,跟着步骤走就行
在这里插入图片描述
1)、阿里云地址
以上的步骤比较麻烦,可以直接使用阿里云的镜像服务进行安装。
在这里插入图片描述

二、配置环境

1、需要4台虚拟机,server1~server4,
server1:172.25.42.1 部署harbor仓库,安装docker
server2:172.25.42.2 安装docker,将作为k8s的管理端(要求cpu大于等于2,内存大于等于2048)
server3:172.25.42.3 安装docker,将作为k8s的node节点
server4:172.25.42.4 安装docker,将作为k8s的node节点
2、关闭节点的selinux和iptables防火墙
3、所有节点部署docker引擎,配置网桥

三、安装过程

server1-4
1、部署docker

yum install -y docker-ce docker-ce-cli 
vim /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1 
sysctl --system

2、如果前期部署了docker,清理,纯化环境
server2-4
对k8s的虚拟机的images、volumes、service、container、network、stack、swarm进行清理,作为仓库的server1保留之前的images等文件

docker service ls 
docker service rm service 
cd /etc/systemd/system/docker.service.d/ 
rm -f 10-machine.conf 
docker network prune                          清理网络 
docker volume prune                           清理数据卷 
docker image prune                            清理镜像 
docker container prune                        清理容器 
docker swarm leave                            有swarm节点的也需要离开和删除节点
systemctl daemon-reload 
systemctl restart docker

如果全部删除后,无法重启docker。如果报错信息显示是无法找到socket文件,可以如下修改/usr/lib/systemd/system/docker.service文件,使其找到socket文件。
在这里插入图片描述

3、禁用server2~server4主机的swap分区
注意etc/fstab里要注释,防止开机自启

swapoff -a
vim /etc/fstab

#/dev/mapper/rhel-swap   swap                    swap    defaults        0 0

4、修改部署k8s虚拟机的仓库和管理驱动
server2~server4
将Docker使用的Cgroup Driver改为systemd,因为systemd是Kubernetes自带的cgroup管理器

vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://reg.westos.org"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

systemctl daemon-reload
systemctl restart docker

可以查看到cggroup管理变为了systemd
在这里插入图片描述

5、增设k8s的yum源
server2-4

[root@server2 yum.repos.d]# vim k8s.repo 

//
[kubernets]
name=Kubernets
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
//

在这里插入图片描述
5、安装
server2-4
安装k8s的组件,设置开机自启动

yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet.service

在这里插入图片描述
6、建立k8s的仓库,方便后期镜像管理
在这里插入图片描述
7、查看配置的信息
虚拟机联网后查看k8s需要的镜像文件,因为k8s也是通过镜像的方式进行部署。这里我们上传所需要的镜像到harbor仓库,然后进行部署

kubeadm config print init-defaults	                                                                                        图1、查看当前的配置信息如下
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers                                       图2、列出阿里云提供的镜像

图1、查看到当前的配置信息如下
在这里插入图片描述

在这里插入图片描述
对于阿里云的镜像此时有两种下载方式
方法一

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers        从阿里云拉取镜像

在这里插入图片描述
可以在docker镜像里面查看刚刚从阿里云下载的镜像文件
在这里插入图片描述
更改标签,登陆harbor账户,上传镜像

docker images |grep registry|awk '{print $1":"$2}'|awk  -F  / '{system("docker tag "$0" reg.westos.org/k8s/"$3"")}'                    图1、更改标签
docker login reg.westos.org                                                                                                            图2、登陆harbor账户
docker images | grep ^reg.westos.org | awk '{system("docker push "$1":"$2"")}'                                                         图3、上传镜像到仓库

图1、更改标签
在这里插入图片描述
图2、登陆harbor
在这里插入图片描述
图3、上传镜像到仓库
在这里插入图片描述

方法二
获取k8s的安装包,上传包到harbor仓库。提前把所需镜像放到server1的harbor仓库里,当server2-4需要这些文件时从仓库拉取。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
仓库里面看到上传的7个文件
在这里插入图片描述
8、修改flannel网络组件的标签,并上传到reg.westos.org/library
在这里插入图片描述

三、初始化集群

1、发送证书到其他服务器
server1

scp -r /etc/docker/certs.d/ server2:/etc/docker/certs.d/  
scp -r /etc/docker/certs.d/ server3:/etc/docker/certs.d/  
scp -r /etc/docker/certs.d/ server4:/etc/docker/certs.d/  

2、初始化
server2
k8s集群的管理主机

kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.westos.org/k8s

在这里插入图片描述
在这里插入图片描述
3、配置环境变量,跟随提示进行操作
server2
这里我们是root用户,所以选择按照提示配置环境变量,并写入.bash_profile中

export KUBECONFIG=/etc/kubernetes/admin.conf
vim .bash_profile

//
export KUBECONFIG=/etc/kubernetes/admin.conf

在这里插入图片描述

4、设置补齐功能
server2

[root@server2 ~] echo "source <(kubectl completion bash)" >> ~/.bashrc            %配置kubectl命令补齐功能,成功后,命令行输入kubectl 然后tab可以补出命令
[root@server2 ~] source ~/.bashrc

5、安装flannel网络组件
server2
查看目前的系统配置,发现flanner插件没有启用,需要安装flanner插件

[root@server2 network-scripts] kubectl get pod -n kube-system 

在这里插入图片描述
从网上获取yml文件,查看flanner的yml配置文件里面的镜像文件地址。

[root@server2 ~] yum install wget
[root@server2 ~] wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml                                           获取插件
[root@server2 ~] vim kube-flannel.yml                                                                                                                  查看flanner插件

查看到一共需要3个镜像,但有两个是相同的镜像,因此我们在docker仓库用阿里云拉取这两个镜像
在这里插入图片描述
在docker仓库拉取刚刚yml文件里面需要的镜像文件(用阿里云加速)

[root@server1 certs.d] docker pull rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.1
[root@server1 certs.d] docker pull rancher/mirrored-flannelcni-flannel:v0.17.0

建立对应的仓库地址
在这里插入图片描述
在这里插入图片描述
给刚才下载的镜像打标签,上传flanner镜像到yml文件里面的设置的rancher库

[root@server1 docker] docker tag  rancher/mirrored-flannelcni-flannel:v0.17.0 reg.westos.org/rancher/mirrored-flannelcni-flannel:v0.17.0
[root@server1 docker] docker tag rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.1 reg.westos.org/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.1
[root@server1 docker] docker push reg.westos.org/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.1 
[root@server1 docker] docker push reg.westos.org/rancher/mirrored-flannelcni-flannel:v0.17.0

可以在harbor仓库的rancher库里面查看到镜像文件
在这里插入图片描述

6、启动组件,查看全部服务
server2
在这里插入图片描述
7、其他主机加入集群
server3、4
server3、4加入到server2部署好的k8s集群中,使用的命令就是初始化后提示的信息
在这里插入图片描述
8、查看
在server2处,查看server3、server4确实已经加入集群。
在这里插入图片描述
在server3、server4可以查看到集群的插件已经部署完毕。
在这里插入图片描述

;