Kubernetes集群(k8s)- 介绍和部署

目录

  • 1. Kubernetes简介
      • 1. k8s
      • 1.2 Kubernetes的好处
      • 1.3 kubernetes设计架构
      • 1.4 kubernetes设计架构(2)
  • 2. Kubernetes集群环境部署
      • 2.1 基础实验环境
      • 2.2 harbor仓库
      • 2.3 关闭节点的selinux和iptables防火墙
      • 3.4 所有节点安装docker
      • 2.5 所有主机设置防火墙策略
      • 2.6 在server1上传仓库认证文件到其他节点
      • 2.7 所有节点创建dameon.json文件
      • 2.8 所有节点禁用swap分区
      • 2.9 配置k8s所需的yum源并上传到其他节点
  • 3. 安装部署软件kubeadm
      • 3.1 所有节点安装工具
      • 3.2 查看默认配置信息
      • 3.3 修改镜像仓库
      • 3.4 上传仓库密钥和添加解析
      • 3.5 上传和拉取镜像
      • 3.6 初始化集群
      • 3.7 节点扩容
      • 3.8 安装flannel网络组件
      • 3.9 配置kubectl
  • 4. k8s删除和恢复节点
      • 4.1 删除节点
      • 4.2 恢复重新加入加入节点

1. Kubernetes简介

1. k8s

k8s是Kubernetes的简称,因为K和S之间有8个字母,所以才会被称为k8s。
k8s最初是在Google公司内部使用了10多年的技术,它的前身是叫做Borg(博格),直到2015年才被Google公司捐赠为开源项目。
在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应 用了很多年,Borg系统运行管理着成千上万的容器应用。

  • Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收 了Borg系统中的经验和教训。
  • Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合, 将最终的应用服务交给用户。

1.2 Kubernetes的好处

• 隐藏资源管理和错误处理,用户仅需要关注应用的开发。
• 服务高可用、高可靠。
• 可将负载运行在由成千上万的机器联合而成的集群中

1.3 kubernetes设计架构

Kubernetes集群(k8s)- 介绍和部署_第1张图片

  • Kubernetes主要由以下几个核心组件组成:
etcd 保存了整个集群的状态
apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现 等机制
controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
scheduler 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
kubelet 负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
Container runtime 负责镜像管理以及Pod和容器的真正运行(CRI)
kube-proxy 负责为Service提供cluster内部的服务发现和负载均衡
  • 除了核心组件,还有一些推荐的Add-ons
kube-dns 负责为整个集群提供DNS服务
Ingress Controller 为服务提供外网入口
Heapster 提供资源监控
Dashboard 提供GUI
Federation 提供跨可用区的集群
Fluentd-elasticsearch 提供集群日志采集、存储与查询

1.4 kubernetes设计架构(2)

Kubernetes设计理念和功能其实就是一个类似Linux的分层架构
Kubernetes集群(k8s)- 介绍和部署_第2张图片

• 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件 式应用执行环境 
• 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服 务发现、DNS解析等) 
• 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动 态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等) 
• 接口层:kubectl命令行工具、客户端SDK以及集群联邦 
• 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范 畴
   • Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、 OTS应用、ChatOps等 
   • Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身 的配置和管理等

2. Kubernetes集群环境部署

k8s官网
https://kubernetes.io/docs/setup/production- environment/container-runtimes

2.1 基础实验环境

主机名        IP                   功能
server1    172.25.11.101        harbor仓库主要给k8s节点提供镜像源
server2    172.25.11.102        k8s:master节点:4G运行内存2个CPU
server3    172.25.11.103        k8s:节点(node1):2G运行内存2个CPU
server4    172.25.11.104        k8s:节点(node2):2G运行内存2个CPU

2.2 harbor仓库

server1部署harbor仓库前面文章有具体部署过程
注意:最好配置(阿里云)镜像加速器(/etc/docker/daemon.json文件里面写入加速器地址),加快镜像下载速度,加速器地址就在aliyum镜像官网。

2.3 关闭节点的selinux和iptables防火墙

3.4 所有节点安装docker

软件包:在aliyun的开源镜像网站查找docker
containerd.io-1.2.13-3.1.el7.x86_64.rpm  
docker-ce-19.03.8-3.el7.x86_64.rpm  
docker-ce-cli-19.03.8-3.el7.x86_64.rpm
解决依赖性:https://centos.pkgs.org/7/centos-extras-armhfp/container-selinux-2.107-3.el7.noarch.rpm.html
container-selinux-2.77-1.el7.noarch.rpm  安装过程解决依懒性(注意版本号)
systemctl enable --now docker  启动服务并设置开机自启

2.5 所有主机设置防火墙策略

Kubernetes集群(k8s)- 介绍和部署_第3张图片

2.6 在server1上传仓库认证文件到其他节点

[root@server1 reg.westos.org]# pwd
/etc/docker/certs.d/reg.westos.org
[root@server1 reg.westos.org]# scp ca.crt server2/3/4:

2.7 所有节点创建dameon.json文件

Kubernetes集群(k8s)- 介绍和部署_第4张图片

systemctl restart docker 记得重启docker服务
复制到其他节点:scp /etc/docker/daemon.json server2/3/4
重启服务:systemctl restart docker

2.8 所有节点禁用swap分区

swapoff -a

vim  /etc/fstab 
#/dev/mapper/rhel-swap   swap                    swap    defaults        0 0
注释掉/etc/fstab文件中的swap定义

2.9 配置k8s所需的yum源并上传到其他节点

Kubernetes集群(k8s)- 介绍和部署_第5张图片

scp /etc/yum.repos.d/k8s.repo  server2/3/4

3. 安装部署软件kubeadm

3.1 所有节点安装工具

kubelet 用来初始化集群的指令
kubeadm 在集群各个节点用来启动pod和容器
kubectl 用来与集群通信的命令工具(可以只装其中某一个节点;这里全装)

Kubernetes集群(k8s)- 介绍和部署_第6张图片

3.2 查看默认配置信息

Kubernetes集群(k8s)- 介绍和部署_第7张图片

3.3 修改镜像仓库

默认从k8s.gcr.io上下载组件镜像,需要才可以,所以需要修改镜像仓库:
Kubernetes集群(k8s)- 介绍和部署_第8张图片

3.4 上传仓库密钥和添加解析

Kubernetes集群(k8s)- 介绍和部署_第9张图片

vim /etc/hosts
在这里插入图片描述

3.5 上传和拉取镜像

  • 1. 修改仓库标签
    Kubernetes集群(k8s)- 介绍和部署_第10张图片
for i in `docker images | grep aliyuncs| awk '{print $1":"$2}' | awk -F / '{print $3}'`;do docker
tag registry.aliyuncs.com/google_containers/$i reg.westos.org/library/$i ; done 
修改镜像标签为server1的仓库路径
  • 2. 上传镜像到私有仓库
先登录habor仓库
docker login westos.org

for i in `docker images | grep reg.westos.org`;do docker push  reg.rwestos.org/library/$i; done 
上传镜像到harbor仓库

for i in `docker images | grep aliyuncs | awk '{print $1":"$2}'`;do docker rmi $i; done
 删除之前拉取的阿里云镜像

Kubernetes集群(k8s)- 介绍和部署_第11张图片
Kubernetes集群(k8s)- 介绍和部署_第12张图片

  • 3. 拉取镜像
    Kubernetes集群(k8s)- 介绍和部署_第13张图片

3.6 初始化集群

kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository  reg.westos.org/library   初始化集群集群
--pod-network-cidr=10.244.0.0/16:指定flannel网络组件时必须添加

cpu不能为单核,不然会失败。

在这里插入图片描述
生成token和哈希码:当其他节点想要加入集群时必须使用此参数 ;但是token值只有24h之后无法在使用,过期之后需要重新生成token值方便其他主机加入集群,哈希码是固定的

3.7 节点扩容

Kubernetes集群(k8s)- 介绍和部署_第14张图片

3.8 安装flannel网络组件

Kubernetes集群(k8s)- 介绍和部署_第15张图片
Kubernetes集群(k8s)- 介绍和部署_第16张图片
在这里插入图片描述

  • master节点查看状态
    kubectl get pod -n kube-system 必须全部为running时间稍有点缓慢耐心等待
    Kubernetes集群(k8s)- 介绍和部署_第17张图片
    Kubernetes集群(k8s)- 介绍和部署_第18张图片
  • 其他节点server3 、4会自动拉取镜像
    Kubernetes集群(k8s)- 介绍和部署_第19张图片

3.9 配置kubectl

在server1:master节点配置kubectl
useradd kubeadm  创建此用户并做权限下放

visudo 编辑权限下放
kubeadm ALL=(ALL) NOPASSWD: ALL

mkdir -p $HOME/.kube  
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
若是使用超级用户将此.kube/config目录复制到root家目录下
配置kubectl命令补齐功能:
echo "source <(kubectl completion bash)" >> ~/.bashrc
  • kubectl命令指南:
    https://kubernetes.io/docs/reference/generated/kubectl/kubectl- commands

4. k8s删除和恢复节点

4.1 删除节点

[root@server2 ~]# kubectl drain server3 --delete-local-data  --force  --ignore-daemonsets   删除节点
node/server3 cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-flannel-ds-amd64-95cp4, kube-system/kube-proxy-cl7lr
node/server3 drained
[root@server2 ~]# kubectl get node  查看还存在集群当中
NAME      STATUS                     ROLES    AGE   VERSION
server2   Ready                      master   28h   v1.18.4
server3   Ready,SchedulingDisabled      27h   v1.18.4
server4   Ready                         27h   v1.18.4
[root@server2 ~]# kubectl delete node server3 彻底删除
node "server3" deleted
[root@server2 ~]# kubectl get node  查看已经删除
NAME      STATUS   ROLES    AGE   VERSION
server2   Ready    master   28h   v1.18.4
server4   Ready       27h   v1.18.4

Kubernetes集群(k8s)- 介绍和部署_第20张图片

4.2 恢复重新加入加入节点

[root@server3 ~]# kubeadm reset  清除之前加入的信息
按照刚开始加入节点的方式重新加入即可

你可能感兴趣的:(Kubernetes集群(k8s)- 介绍和部署)