第5节 K8S介绍和集群环境搭建

2023年 7月 25日 49.3k 0

一、K8S 产生的背景

1. 应用程序部署方式演变

1.1 传统部署

  传统化部署方式是将应用程序直接部署在物理机上,对于一个java应用程序,运维人员在物理机上搭建好开发环境,就可以直接部署。

  该方式对运维人员来说简单易操作,但是会导致资源利用率不高,甚至有的公司为降低成本会在单台物理机部署多个应用,导致系统稳定性不高,应用之间会相互影响。

1.2 虚拟化部署

  虚拟化部署方式是虚拟机时代的产物,简单理解就是在单台物理机上部署多个虚拟机,然后在每个虚拟机中部署应用程序。

k8s-vm.drawio.png

  相比传统部署方式,在资源利用上更加高效,硬件成本更低。

1.3 容器化部署

  容器化部署简单理解就是将代码和应用程序运行所需环境一起打包,把它们隔离在自己的容器中运行。容器化部署随着 Docker 兴起而产生,在资源利用上更加高效、部署更加灵活性、交付速度更快。

k8s-容器.drawio.png

2. 容器化部署的困境

  随着容器化部署的兴起,在集群环境下如何快速的进行部署???

k8s-集群容器.drawio.png

为了解决这个问题,容器编排工具横空而出。常见的容器编排工具有:

  • Docker-Compose:它是单机容器编排工具,很明显不适用于集群环境下的容器管理
  • Docker Swarm:它是 Docker 官方提供的集群容器编排工具
  • Kubernetes:它是 Google 开源的容器编排工具

二、K8S 的基本概念

1. K8S 是什么

Kubernetes 是一款容器的编排调度工具,来源于 Google 开源的 Brog 系统。Kubernetes简称K8S,是用8代替8个字符 "ubernete" 而成的缩写,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。

2. K8S 基本概念

如下图所示,由3台物理机构成的集群架构图
图片1.png

(1)Kubernetes Master

Kubernetes 主节点,是一台物理机,管理K8S集群节点,管理应用程序部署、创建等智能

(2)Node

(3)Pod

它是K8S最小可部署单元,一个Pod就是一个独立进程;Pod内部容器网络互通,每个Pod都有独立虚拟IP,虚拟IP由K8S管理

  • Pod 中容器部署形式

k8s-Pod.drawio.png

Pod 中部署多个容器,比如 tomcat + mysql + 应用程序,这样就构成了一个完整的服务;

Pod 中只部署一个容器,比如部署 tomcat 容器,然后由多个 Pod 对外提供一个完整的服务

  • Pod 中的 Pause 容器

  每个 Pod 中必须有一个 Pause 容器,主要作用是:提供一个共享的网络空间,方便 Pod 内容器间通信;提供一个 volumes 共享的挂载数据卷,统一管理容器数据

  每个 Pod 之间是相互隔离,无法通信的

(4) Service

它的主要作用就是让多个不同主机上的 Pod 能够相互通信

image.png

(5) Contanier

容器,可以理解为一个个应用程序

(6) Label

它是一个说明性标签,Label 相当于是每一个 Pod 的别名,后期容器部署时都是根据 Label 找到 Pod

(7) Replication Controller

Replication Controller 在主节点上,它能够对 Pod 进行监控,比如当某个 Pod 掉线,Replication Controller可以直接将其剔除,后期如果需要 Pod,也会自动创建

三、K8S 环境准备

  • 使用 kubeadmin 离线镜像安装,推荐使用该种方式安装
  • 通过 yum 官方仓库安装,一般可配置阿里镜像源
  • 使用第三方二进制包形式安装,比如:kubease

1. Parallels Desktop18 中安装 Centos7

本文所有安装步骤都是基于 MacOS + Parallels Desktop + Centos7,并且电脑是 Mac M1 芯片,所以和网上大部分博客内容不太一样,所需要的安装包也不太一样

  • 百度云盘下载镜像链接:pan.baidu.com/s/1Sk8q9G15… ,提取码:yyds

  • 安装流程参考博客:blog.csdn.net/w1871331217… ,非常给力,能安装成功!!!

  • 安装完成后效果
    设置了3个节点,k8s-master、k8s-node1 和 k8s-node2 节点
    image.png

  • 查看每个虚拟机的IP

k8s-master 节点 :10.211.55.4
k8s-node1 节点 :10.211.55.5
k8s-node2 节点 :10.211.55.6

2. 设置虚拟机环境

  • (1)设置时区和主机名称。每台虚拟机都设置
timedatectl set-timezone Asia/Shanghai 

hostnamectl set-hostname master 
hostnamectl set-hostname node1
hostnamectl set-hostname node2

(2)hosts网络主机配置,方便通过主机名进行通信。每台虚拟机都设置

vim /etc/hosts

# 这里master就是第(1)步骤中 set-hostname master 的主机名
10.211.55.4 master
10.211.55.5 node1
10.211.55.6 node2

解决centos报错-bash: vim: command not found;
配置完成后,一定要通过 ping 命令来检测配置是否正确。

(3)关闭防火墙,三台虚拟机都需要设置,生产环境不需要设置

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

setenforce 0
systemctl disable firewalld
systemctl stop firewalld

3. 安装 K8S

K8S官方安装文档参考:kubernetes.io/zh-cn/docs/…

3.1 使用 iTerm2 终端登录虚拟机

ssh root@10.211.55.4
ssh root@10.211.55.5
ssh root@10.211.55.6

3.2 每台虚拟机安装 Docker

# 安装前执行卸载命令
yum remove docker-ce

# 安装工具
yum install -y yum-utils device-mapper-persistent-data lvm2

# 设置阿里云镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 只看稳定版本的 docker
yum-config-manager --disable docker-ce-edge
yum-config-manager --disable docker-ce-test

# 更新 yum 换成
yum makecache fast

# 查看可以用的 docker 版本
yum list docker-ce --showduplicates | sort -r

# 选择指定版本进行安装
yum -y install docker-ce-18.09.9-3.el7

# 启动 docker
systemctl start docker

# 设置成开启启动
systemctl enable docker

image.png

docker info | grep cgroup 

如果不是groupfs,执行下列语句

cat  /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=cgroupfs"]
}
EOF

systemctl daemon-reload && systemctl restart docker

配置 Docker 国内镜像地址:

vim /etc/docker/daemon.json

# 文件中添加如下配置:
{

  "registry-mirrors": ["https://896977yg.mirror.aliyuncs.com","http://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com"]

}

# 刷新配置
systemctl daemon-reload

# 重启docker
systemctl restart docker

3.3 每台虚拟机安装 kubeadm kubelet kubectl

安装之前要确认 K8S 支持 Docker 引擎的版本,如何查看?查看每个版本的 kubernetes 的dependencies.yaml 文件,看其中依赖的 Docker 版本即可
github.com/kubernetes/…

image.png

kubeadm 是K8S集群快速构建工具

kubelet 是运行在所有节点上,负责启动Pod和容器,以系统服务形式出现

kubectl 是kubenetes命令行工具,提供指令,类似Shell命令

(1)添加阿里云 aarch64yum

cat > /etc/yum.repos.d/kubernetes.repo 稳定版本v1.14.3

  • 如果忘记了 node 节点的执行命令 kubeadm join 怎么办??

  • # 在master节点上查看token
    kubeadm token list 
    

    image.png

    然后在 master 上执行命令即可加入集群

    kubeadm join 10.211.55.4:6443 --token 7x98z5.e56h321inwvvey58 --discovery-token-unsafe-skip-ca-verification
    

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论