某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前言

  • 学习建议

  • Docker命令大全
  • Kubernetes教程

    • Kubernetes(K8s)学习教程 - 前言
    • 第1章-Kubernetes集群部署
      • 前缀知识
      • 环境准备
      • 1. 主机参数配置
        • 1.1 IP地址配置
        • 1.2 主机名配置
        • 1.3 配置防火墙 && 关闭selinux
        • 1.4 关闭swap(交换分区)
        • 1.5 配置 && 更新yum源
        • 1.6 设置内核参数
      • 2. K8s环境部署
        • 2.1 安装软件包
        • 2.2 下载containerd和所需的镜像
        • 2.3 下载和配置runC
        • 2.4 下载和配置CNI plugins
        • 2.5 部署集群
        • 2.5.1 初始化 master 节点
        • 2.5.2 生成配置文件
        • 2.5.3 worker加入集群
      • 3. 小结
    • 第2章-便捷性设置以及集群插件的安装
    • 第3章-基础操作
    • 第4章-集群升级
    • 第5章-Pod
    • 第6章-Pod生命周期与资源限制
    • 第7章-Pod与节点
    • 第8章-控制器Deployment
    • 第9章-Deployment镜像变更和滚动更新
    • 第10章-其他控制器-以及标签表达式
    • 第11章-控制器与节点驱逐
    • 暂缓更新
    • 练习题

    • 常用命令及yaml配置

  • CKS教程

  • 云原生安全
  • Kubernetes教程
clincat
2023-06-07
目录

第1章-Kubernetes集群部署

原创

本博客原创文章,转载请注明出处

- name: 原创
  desc: 本博客原创文章,转载请注明出处
  bgColor: '#F0DFB1'
  textColor: '#1078E6'
1
2
3
4

# 第1章-Kubernetes集群部署

本章要点 详情
掌握 Kubernetes 的部署流程 1、主机运行环境配置
2、安装 Kubernetes 相关软件包
3、使用 kubeadm 部署 Kubernetes 集群

# 前缀知识

网上有很多介绍 Kubernetes 的文章,我这里就不再重复造轮子了,推荐几篇:

Kubernetes介绍

IBM 时事通讯-什么是Kubernetes? (opens new window)

为什么要使用Kubernetes? (opens new window)

# 环境准备

本次实验采用 3 台 Centos 7.9 的虚拟机部署 K8s 集群(点我 (opens new window)下载 Centos 虚拟机镜像文件)。

  • 一台虚拟机作为 master 节点(主控节点)。
  • 另外两台虚拟机作为 worker 节点(工作节点)。

请提前创建好这 3 台虚拟机,这里不教授虚拟机的创建方法。

主机参数表(其中的 XXX 是你的虚拟机网段):

序号 主机名 IP地址 节点角色
1 www.k10.com 192.168.XXX.10 master(主控节点)
2 www.k11.com 192.168.XXX.11 worker1(工作节点 1)
3 www.k12.com 192.168.XXX.12 worker2(工作节点 2)

提示

  • 虚拟机的内存建议设置为 4GB/台,内存太低可能会造成卡顿、死机等情况。
  • 如果你的电脑配置实在太低,可以减少一台 worker 机器,将剩余两台机器的内存调整为 3~3.5GB 。

# 11. 主机参数配置

# 1.11.1 IP地址配置

根据上方的 “主机参数表” 为 3 台虚拟机配置相应的 IP 地址。

1、 使用ifconfig命令查看当前的网卡名称,此处为ens33。

2、 然后使用vim打开相应的网卡配置文件。

vim /etc/sysconfig/network-scripts/ifcfg-<网卡名称>

# 例如
vim /etc/sysconfig/network-scripts/ifcfg-ens33
1
2
3
4
Not Found Image

3、打开文件之后,将原来的配置全部删除,输入以下内容对 IP 地址进行配置,然后保存文件并退出。

(默认情况下,虚拟机中的 X.X.X.1 是你的物理机 IP 地址,而 X.X.X.2 是网关地址)

DEVICE=<网卡名称>
BOOTPROTO=static
ONBOOT=yes
STARTMODE=auto
IPADDR=<IP地址>
NETMASK=<子网掩码>
GATEWAY=<网关>
DNS1=8.8.8.8

# 例如
DEVICE=ens33
BOOTPROTO=static
ONBOOT=yes
STARTMODE=auto
IPADDR=192.168.80.10
NETMASK=255.255.255.0
GATEWAY=192.168.80.2
DNS1=8.8.8.8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Not Found Image

4、保存退出之后,重启网络服务,再次查看主机的 IP 地址信息,修改成功。然后 ping 一下外网,如果能通,说明正常。

systemctl restart network
ifconfig
ping bing.com
1
2
3
Not Found Image

5、在物理机上 ping 一下这台虚拟机,如果能通的话就在虚拟机上启用 ssh 服务,然后用自己喜欢的 SSH客户端工具 进行连接,方便后续的配置操作。

systemctl start sshd
netstat -tnlp
1
2

(我使用的 SSH 客户端工具为SecureCRT (opens new window),正版需要付费,那个版自己上网找)(你也可以使用免费的PuTTY (opens new window)或者WindTerm (opens new window))

Not Found Image Not Found Image Not Found Image

6、使用相同的配置方式,为另外 2 台虚拟机配置 IP 地址,然后启用 sshd 服务并远程连接。

# worker1的配置
DEVICE=ens33
BOOTPROTO=static
ONBOOT=yes
STARTMODE=auto
IPADDR=192.168.80.11
NETMASK=255.255.255.0
GATEWAY=192.168.80.2
DNS1=8.8.8.8

# worker2的配置
DEVICE=ens33
BOOTPROTO=static
ONBOOT=yes
STARTMODE=auto
IPADDR=192.168.80.12
NETMASK=255.255.255.0
GATEWAY=192.168.80.2
DNS1=8.8.8.8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Not Found Image Not Found Image

# 1.21.2 主机名配置

根据上方的 “主机参数表” 为 3 台虚拟机配置相应的主机名,并在 hosts 文件中同步它们的主机名。

1、使用以下命令,分别为 3 台虚拟机配置主机名。

hostnamectl set-hostname www.k10.com

hostnamectl set-hostname www.k11.com

hostnamectl set-hostname www.k12.com
1
2
3
4
5
Not Found Image

2、配置/etc/hosts文件,在每台主机之间同步主机名。

# 在每台主机的终端中运行以下命令
cat <<EOF >> /etc/hosts
192.168.80.10 www.k10.com k10
192.168.80.11 www.k11.com k11
192.168.80.12 www.k12.com k12
EOF
1
2
3
4
5
6
Not Found Image

3、测试主机名配置是否成功。

# 三台主机之间互相ping
ping k10
ping k11
ping k12
1
2
3
4
Not Found Image

# 1.31.3 配置防火墙 && 关闭selinux

提示

为所有主机执行以下操作。

防火墙 和 selinux 可能会影响 K8s 环境的正常运行,所以要进行配置/禁用。

1、设置防火墙为信任模式,使 主机或容器之间 能够正常通信。

(注意,不是禁用防火墙,禁用以后还是会拦你)

firewall-cmd --set-default-zone=trusted
firewall-cmd --reload
1
2
Not Found Image

2、禁用 selinux ,使容器能够正常访问主机文件系统。

# 临时禁用
setenforce 0
getenforce

# 修改配置文件,永久禁用
vim /etc/selinux/config
1
2
3
4
5
6
Not Found Image

# 1.41.4 关闭swap(交换分区)

提示

为所有主机执行以下操作。

(K8s 和 swap 兼容性好像不是很好,具体可以看看这个 (opens new window))

1、关闭 swap ,然后在/etc/fstab文件中注释掉所有的 swap 条目。

# 查看已经启用的swap状态
swapon -s

# 关闭swap
swapoff -a

vim /etc/fstab
1
2
3
4
5
6
7
Not Found Image Not Found Image

# 1.51.5 配置 && 更新yum源

提示

为所有主机执行以下操作。

1、此处使用阿里云的yum源 (opens new window),配置命令如下。

# 删除原有的yum源
rm -rf /etc/yum.repos.d/*

# 配置yum源(基础软件源)
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# 配置yum源(K8s软件源)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 更新yum源,时间可能较长 需要耐心等待
yum update -y
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Not Found Image

2、yum 源更新完成之后,查看是否有 K8s 相关的软件包。

# 列出软件包kubectl
yum list kubectl

# 列出所有版本
yum list kubectl --showduplicates
1
2
3
4
5
Not Found Image Not Found Image

# 1.61.6 设置内核参数

提示

为所有主机执行以下操作。

学习更多

为什么K8s要设置bridge-nf-call-iptables (opens new window)

1、使用以下命令,设置系统的内核参数。

# 设置内核的网络参数
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

# 加载br_netfilter模块
modprobe br_netfilter

# 让新的内核配置立即生效
sysctl -p /etc/sysctl.d/k8s.conf
1
2
3
4
5
6
7
8
9
10
11
12
Not Found Image

2、在某些情况下,执行sysctl的过程中可能会出现错误(如图 “没有那个文件或目录”),可以运行命令modprobe br_netfilter加载缺少的模块,从而解决这个问题。

Not Found Image

# 22. K8s环境部署

# 2.12.1 安装软件包

K8s 共有 3 个软件包,分别是:

  • kubeadm:K8s 管理工具,用于部署、升级等操作。
  • kubectl:K8s 命令行工具,用于管理集群内的节点和容器等资源。
  • kubelet:K8s 主服务,每台主机上都运行一个名为 kubelet 的服务,用于启动或停止集群、维持集群主机之间的通信(例如接收主控端的命令并执行相应操作)等。

提示

为所有主机执行以下操作。

1、通过 yum 安装 Kubernetes 的三个主要软件。

此处通过 yum 命令来安装 Kubernetes 1.26 版本的软件包:

  • --disableexcludes:禁用某个排除选项,允许 kubernetes 相关软件包进行更新。
  • (注意,安装时如果没有指定版本,则安装的是最新版本)
yum install kubeadm-1.26.5-0 kubectl-1.26.5-0 kubelet-1.26.5-0 --disableexcludes=kubernetes
1
Not Found Image

确定安装的软件包没有问题,输入 “y” 并回车,以确认安装。

Not Found Image

2、检查安装是否成功。

安装完成之后,使用systemctl status kubelet命令查看 kubelet 服务是否存在。

Not Found Image

3、重启 Kubernetes 主服务并将其设置为开机自启。

运行以下命令,重启 kubelet 服务,并将其设置为开启自启。此时服务的状态为 “activating” ,说明正常。

systemctl restart kubelet
systemctl enable kubelet

systemctl status kubelet
1
2
3
4
Not Found Image

然后,为其余主机执行相同的操作,确保每台主机上的 kubelet 服务状态都为 “activating”。

# 2.22.2 下载containerd和所需的镜像

我们使用 containerd (opens new window) 作为 K8s 的容器运行时。至于为什么不用 docker,请看本篇教程的 “前言” 章节。

(Github访问较慢,也许你需要Github文件下载加速 (opens new window))

提示

为所有主机执行以下操作。

1、下载和配置 containerd。

containerd 是不用安装的,只需要下载其配置文件 和 可执行文件,然后进行一些设置即可:

# 下载containerd
wget https://github.com/containerd/containerd/releases/download/v1.7.2/containerd-1.7.2-linux-amd64.tar.gz

# 解压
tar Cxzvf /usr/local containerd-1.7.2-linux-amd64.tar.gz

# 配置
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

# 获取service文件并放入相应目录,这将会把containerd注册为系统服务,然后 重载服务+重启服务+设置为开机自启
wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -O /usr/lib/systemd/system/containerd.service
systemctl daemon-reload
systemctl restart containerd && systemctl enable containerd

# 此时服务状态为 “active (running)”
systemctl status containerd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

从 Github 下载 containerd 软件包:

Not Found Image

containerd 服务状态:active(running)

Not Found Image

2、拉取和重命名 Kubernetes 集群所需的镜像。

打开 containerd 配置文件,查看 sandbox_image 配置项,所需镜像名称为registry.k8s.io/pause:3.8。

由于国内网络原因,我们无法直接访问镜像站点,所以此处需要提前下载镜像,以防后续出现问题。(此处通过国内的阿里云镜像源 来下载所需的镜像)

ctr是 containerd 安装时自带的命令行工具,具有命名空间的概念,和 K8s 有关的镜像都被放在k8s.io这个命名空间里面。

# 查看所需镜像名
vim /etc/containerd/config.toml

# 创建命名空间k8s.io
ctr ns create k8s.io
ctr ns ls

# 拉取所需镜像,放入命名空间 k8s.io
ctr -n k8s.io i pull registry.aliyuncs.com/google_containers/pause:3.8
ctr -n k8s.io i ls

# 重命名镜像
ctr -n k8s.io i tag registry.aliyuncs.com/google_containers/pause:3.8 registry.k8s.io/pause:3.8
ctr -n k8s.io i ls
1
2
3
4
5
6
7
8
9
10
11
12
13
14

创建命名空间:

Not Found Image

所需的镜像为 pause ,通过阿里云源拉取该镜像:

Not Found Image Not Found Image

更改镜像名称,下方会多出一个条目,说明命名成功。

Not Found Image

然后,为其余主机执行相同的操作,保证每台主机上都安装了 containerd、拉取和重命名了所需的镜像。

你可以通过scp命令将 containerd 文件拷贝到其余主机上,这样可以节省下载时间:

scp containerd-1.7.2-linux-amd64.tar.gz root@192.168.80.11:/root
scp containerd-1.7.2-linux-amd64.tar.gz root@192.168.80.12:/root
1
2

# 2.32.3 下载和配置runC

(containerd 的组件)

(Github访问较慢,也许你需要Github文件下载加速 (opens new window))

提示

为所有主机执行以下操作。

# 下载
wget https://github.com/opencontainers/runc/releases/download/v1.1.7/runc.amd64

# 配置
install -m 755 runc.amd64 /usr/local/sbin/runc

# 你可以通过scp命令将 containerd 文件拷贝到其余主机上,这样可以节省下载时间
scp runc.amd64 root@192.168.80.11:/root
scp runc.amd64 root@192.168.80.12:/root
1
2
3
4
5
6
7
8
9
Not Found Image Not Found Image

# 2.42.4 下载和配置CNI plugins

(containerd 的组件)

(Github访问较慢,也许你需要Github文件下载加速 (opens new window))

提示

为所有主机执行以下操作。

# 下载
wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz

# 配置
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.3.0.tgz

# 你可以通过scp命令将 containerd 文件拷贝到其余主机上,这样可以节省下载时间
scp cni-plugins-linux-amd64-v1.3.0.tgz root@192.168.80.11:/root
scp cni-plugins-linux-amd64-v1.3.0.tgz root@192.168.80.12:/root
1
2
3
4
5
6
7
8
9
10
Not Found Image

# 2.52.5 部署集群

# 2.5.12.5.1 初始化 master 节点

执行以下命令初始化 master 节点:

  • --image-repository:指定镜像源,此处使用国内的阿里云镜像源。
  • --kubernetes-version:指定集群版本。
  • --pod-network-cidr:指定 Pod 的网段。
  • --cri-socket:指定容器运行时。
kubeadm init --image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.26.5 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///run/containerd/containerd.sock
1
2
3
4

在 master 主机上,运行以上命令进行集群初始化操作(时间可能较长,需要耐心等待)。

Not Found Image

如果初始化成功,则 K8s 会返回 3 条命令给我们,如图所示:

Not Found Image

# 2.5.22.5.2 生成配置文件

在 master 节点上执行这 3 条命令,生成 kubernetes 配置文件。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
1
2
3
Not Found Image

# 2.5.32.5.3 worker加入集群

在另外两个 worker 节点上执行以下命令,加入刚刚的集群。

kubeadm join 192.168.80.10:6443 --token <你的集群Token> \
        --discovery-token-ca-cert-hash sha256:<你的集群证书Hash>
1
2

在 2.5.1 中初始化成功之后,K8s 除了返回 3 条配置命令之外,还会提供加入集群的命令。

在其他的 worker 主机上运行这条命令,即可加入 master 所在的集群。

Not Found Image

下面做一个测试,在 worker 节点加入集群之前,可以看到集群内只有一个 master 节点:

# 查看当前集群内的所有节点
kubectl get nodes
1
2
Not Found Image

在另外两个 worker 节点上运行加入集群的命令:

Not Found Image

加入集群之后,再次进行查看,集群内有 master + worker1 + worker2 共三个节点:

Not Found Image

如果你没有保存 “加入集群” 的命令或者丢失了,则可以运行以下命令,获取一个新的 “加入集群” 命令。

# 创建新的 token 并打印加入集群的命令
kubeadm token create --print-join-command
1
2

# 33. 小结

K8s 集群已经部署成功,但其还不能正式投入使用,因为还缺少一些东西。

在下一章中,将对已部署的 K8s 集群进行一些额外的可用性配置。

编辑 (opens new window)
Kubernetes(K8s)学习教程 - 前言
第2章-便捷性设置以及集群插件的安装

← Kubernetes(K8s)学习教程 - 前言 第2章-便捷性设置以及集群插件的安装→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式