前言
k8s 即 Kubernetes,是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理
本篇文章将分享 k8s v1.18.8 的安装,以及其面板,监控,部署服务,使用Ingress-Ningx进行负载均衡的实践
因为公司用的这个老版本,并且后面要负责搭建,担心无法复刻,趁此周末,实践一二,确认可行,遂与君分享。
虚拟机准备
- 宿主机:Windows10
- 虚拟机工具:Hyper-V 10.0.19041.1
- 虚拟机 Linux 系统:CentOS 8.5
- 已安装软件:docker (v2.21.0)及 docker compose(24.0.6)
- Hyper-V虚拟机一览

- 192.168.123.100 master
- 192.168.123.101 worker01
- 192.168.123.102 worker02
复制代码 CentOS8.5 设置固定 IP
- 设置IP及网关:vi /etc/sysconfig/network-scripts/ifcfg-eth0
- TYPE=Ethernet
- PROXY_METHOD=none
- BROWSER_ONLY=no
- DEFROUTE=yes
- IPV4_FAILURE_FATAL=no
- IPV6INIT=yes
- IPV6_AUTOCONF=yes
- IPV6_DEFROUTE=yes
- IPV6_FAILURE_FATAL=no
- NAME=eth0
- DEVICE=eth0
- ONBOOT=yes
- PREFIX=24
- IPV6_PRIVACY=no
- # 设置IP及网关
- BOOTPROTO=static
- IPADDR=192.168.123.100
- GATEWAY=192.168.123.1
复制代码 CentOS8.5 联网检查
- 配置好网络后先测试 curl 是否可以正常访问网络 curl ``http://mirrors.aliyun.com,如果提示: curl: (6) Could not resolve host: ``mirrors.aliyun.com ,则需要检查dns设置
- cat /etc/resolv.conf 默认应该是网关的地址,也可以自行修改为其他公共dns
CentOS8.5 设置主机名
- 查看主机信息:hostnamectl,通过导入虚拟机创建的主机信息除了mac地址其他基本都一样
- 设置主机名:hostnamectl set-hostname 主机名
- # 查看hostname
- hostnamectl --static
- #设置 hostname 对应机器设置
- # 192.168.123.100
- hostnamectl set-hostname master
- # 192.168.123.101
- hostnamectl set-hostname worker01
- # 192.168.123.102
- hostnamectl set-hostname worker02
复制代码 确保每个节点上 MAC 地址的唯一性
可以在外部使用 PowerShell 查看 Hyper-V 虚拟机的地址,在导入时选择新注册会自动生成 Mac 地址,无需更改
- centos8.5 查看mac地址:ip link show dev eth0

- 外部使用 PowerShell 查看:(Get-VMNetworkAdapter -VMName "k8s-master").MacAddress

确保 product_uuid 的唯一性
- 执行 sudo cat /sys/class/dmi/id/product_uuid 查看product_uuid 我这里因为都是复制的虚拟机,查出来是一样的的,所以需要修改

- 修改需要关闭虚拟机后执行PowerShell脚本 ,文章总结
- 外部查看Hyper-V虚拟机 UUID
- Get-VM "k8s-master" | % { (gwmi -Namespace root\virtualization\v2 -Class msvm_computersystem -Filter ('ElementName="{0}"' -f $_.Name)).GetRelated('msvm_virtualsystemsettingdata') | select BIOSGUID }
- Get-VM "k8s-worker01" | % { (gwmi -Namespace root\virtualization\v2 -Class msvm_computersystem -Filter ('ElementName="{0}"' -f $_.Name)).GetRelated('msvm_virtualsystemsettingdata') | select BIOSGUID }
- Get-VM "k8s-worker02" | % { (gwmi -Namespace root\virtualization\v2 -Class msvm_computersystem -Filter ('ElementName="{0}"' -f $_.Name)).GetRelated('msvm_virtualsystemsettingdata') | select BIOSGUID }
复制代码
- PowerShell 修改 Hyper-V虚拟机 UUID
- #这里假设虚拟机的VMname是k8s-master,自行替换即可
- $VMname="k8s-master"
- $vmx = Get-WmiObject -Namespace root\virtualization\v2 -Class msvm_virtualsystemsettingdata
- #每次操作选择一台虚拟机
- $CurrentSettingsData = $vmx | Where-Object { $_.ElementName -eq $VMname }
- #检查一下老的GUID
- $CurrentSettingsData.BIOSGUID
- #生成新GUID
- $GUID = [System.Guid]::NewGuid()
- #重新写入GUID,注意要带{},这是非常重要的细节
- $CurrentSettingsData.BIOSGUID = "{" + $GUID.Guid.ToUpper() + "}"
- #生成一个ModifySystemSettings的空对象
- $VMMS = Get-WmiObject -Namespace root\virtualization\v2 -Class msvm_virtualsystemmanagementservice
- $ModifySystemSettingsParams = $VMMS.GetMethodParameters('ModifySystemSettings')
- #配置这个属性,需要特殊的转换方式
- $ModifySystemSettingsParams.SystemSettings = $CurrentSettingsData.GetText([System.Management.TextFormat]::CimDtd20)
- #写入
- $VMMS.InvokeMethod('ModifySystemSettings', $ModifySystemSettingsParams, $null)
复制代码
确保 Machine ID 的唯一性
- 执行 /etc/machine-id 或使用 hostnamectl 发现机器id是一样的

- sudo cp /etc/machine-id /etc/machine-id.backup
- sudo rm /etc/machine-id
- sudo systemd-machine-id-setup
- cat /etc/machine-id
复制代码
检查端口是否被占用

- ss -tuln | grep -E "6443|2379|2380|10250|10259|10257|30000-32767"
复制代码
安装 K8S v1.18.8
都2023年了,为什么还是 v1.18.8?
因为公司用的这个版本,并且后面要负责搭建,趁此周末,实践一二,确认可行,遂与君分享。
节点初始化
- 执行主机: master ,worker01,worker02
- 关闭防火墙
- 关闭swap分区
- 允许 iptables 检查桥接流量
- 添加阿里云 yum 源
[code]# 关闭防火墙systemctl stop firewalld# 设置永久不开启防火墙systemctl disable firewalld# 关闭swap 分区 swapoff -a #永久关闭sed -ri 's/.*swap.*/#&/' /etc/fstab# 将 SELinux 设置为 permissive 模式(相当于将其禁用)setenforce 0sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config# 允许 iptables 检查桥接流量cat > /etc/sysctl.d/k8s.conf /etc/yum.repos.d/kubernetes.repo > /etc/hosts |