K8s安装

准备阶段

机器配置

!!!除了对master的操作,前面的操作均需在每一台虚拟机进行

机器:4台机器(看实体机配置,实在不行准备两台到三台,其中一台作为master机器,管理其他node机器)

参数:2核1线程,2G内存,20G硬盘

系统:CentOS 7

  1. 为每台虚拟机修改主机名,使用hostnamectl set-hostname 需要设置主机名,用于区分不同的虚拟机。
  2. 为每台机器配置静态IP:
  • 修改配置时建议将原本的文件备份保存,配置出错可以通过备份文件恢复(这个备份方法直接cv原来文件内容到实体机文件都可)
  • 静态IP设置方法
    在/etc/sysconfig/network-scripts/ifcfg-ens33修改如下
# 将BOOTPROTO从dhcp改为static或none
BOOTPROTO="static"
# 若没有ONBOOT添加
ONBOOT="yes"
# 下面的都需要添加,如果在桥接模式下ip地址要和实体机相同网段,网关要和实体机网关相同。如果是nat则和nat网段相同。我这里用192.168.*.*代替要配置的,记得改(一定要注意IP地址和网关)
IPADDR="192.168.*.*"
PREFIX="24"
GATEWAY="192.168.*.*"
#DNS服务器可以只配置一个,当然也可以配置两个
DNS1="114.114.114.114"
DNS2="8.8.8.8"
  • 配置完成之后使用systemctl restart network刷新服务,并使用ping命令进行测试能否连接外网,能够连接则配置成功
  1. 关闭每台虚拟机防火墙和seLinux,防止干扰k8s运行,最好清除iptables规则
# 关闭防火墙并且设置开机不启动
systemctl stop firewalld
systemctl disable firewalld
# 关闭seLinux,getenforce是获取seLinux的状态
# 没有设置过seLinux一般getenforce查询结果为Enforcing,需设置为disable关闭
getenforce
# 直接修改文件,改为SELINUX=disabled,重启之后生效
vim /etc/selinux/config
# 清除iptables规则
iptables -F
  1. 关闭交换分区(k8s1.8版本以上要求必须关闭)以提升性能
# 临时关闭
swapoff -a
# 修改/etc/fstab文件永久关闭,将文件中/dev/mapper/centos-swap swap行注释即可,也可以直接运行下面这条命令
sed -i '/swap/ s/^\(.*\)$/#\1/g' /etc/fstab
  1. 升级所有软件yum update -y(不必要,可跳过)
  2. 安装一些软件(非必要,可不做)
yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxm12-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm npdate
  1. 互相配置ssh免密通道(这一步也没必要,配置步骤博主会写另一篇博客)
  2. 修改/etc/hosts文件
# 直接运行下面的命令,记得将IP地址修改为自己机器的IP地址,主机名字也换成自己的
cat >> /etc/hosts << EOF
192.168.*.* k8smaster
192.168.*.* k8snode1
192.168.*.* k8snode2
192.168.*.* k8snode3
EOF
  1. 加载模块br_netfilter(和网络通信有关)
# 临时加载
modprobe br_netfilter
# 永久加载,创建文件,在文件中写入模块名字br_netfilter
vim /etc/modules-load.d/k8s.conf
systemctl restart systemd-modules-load.service

#代替命令,也需要运行systemctl这条命令
cat >> /etc/modules-load.d/k8s.conf << EOF
> br_netfilter
> EOF
  1. 修改内核参数以满足k8s的运行需求,运行下面的命令
cat <<EOF >> /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF

# 重新加载系统参数配置,让上面的修改生效
sysctl -p

安装docker

由于在2022年k8s的1.24版本更新中已经完全放弃了docker作为容器运行时软件,想要继续使用docker作为容器运行时软件,只能安装1.23以下的版本,然后k8s1.23版本支持的最新docker是20.10。

安装docker命令:

#安装工具包
yum install -y yum-utils
# 使用工具包自动下载docker,这是官方的源
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    
#可以使用阿里云镜像替换官方源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


# 指定版本安装docker
yum install -y docker-ce-20.10.0 docker-ce-cli-20.10.0 containerd.io

# 开启docker服务
systemctl start docker
# 设置开机启动
systemctl enable docker


# 配置Docker使用systemd作为默认Cgroup驱动,配置之后需要重启docker
cat <<EOF > /etc/docker/daemon.json
{
	"registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
    ],
	"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

#重启docker
systemctl restart docker

安装k8s

  1. 添加k8s yum源
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
  1. 安装kubeadm,kubelet,kubectl(指定版本)
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
  1. 设置kubelet开机自启动
systemctl enable kubelet
  1. 安装CoreDNS容器(k8s集群运行时需要CoreDNS提供DNS解析服务)
# 拉取镜像
docker pull coredns/coredns:1.8.4

# 将镜像改名
docker tag coredns/coredns:1.8.4 registry.aliyuncs.com/google_containers/coredns:v1.8.4

master节点初始化

以下操作在master节点进行

  1. 使用kubeadm init命令进行初始化,运行下面的命令之后等待命令跑完
# 记得改变IP,只要改第一行的IP地址,一般改为master节点地址
kubeadm init \
--apiserver-advertise-address=192.168.*.* \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
#--pod-network-cidr=192.168.0.0/16
  • –pod-network-cidr有两个值,打算使用calico网络插件时,最好使用192.168.0.0/16,然后打算使用flannel网络插件时最好使用10.244.0.0/16
  • 出现下面的提示结果代表初始化成功了
  1. 初始化成功之后,通过提示结果节点机器运行kubeadm join部分的命令加入节点
  • 节点加入成功之后的结果
  1. 初始化kubectl,以使用kubectl管理集群(提示结果里面有这一步,可以仔细看一下)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. 完成以上步骤就基本完成了安装,执行kubectl get node命令查看节点状态
  • 到这里发现所有节点为NotReady状态,这是因为完成互通还需要安装CNI(Container Networking Interface)网络插件

安装网络插件

CNI 全称是“Container Networking Interface”,即容器网络接口,它提供了一种标准的插件机制,用于连接容器到底层网络中。CNI 插件是一种可执行程序,它将实现容器网络连接的一些逻辑打包在一起,允许容器使用不同的网络模型,并提供了一组网络抽象接口。在 Kubernetes 等容器编排平台中,CNI 插件被广泛使用来实现容器网络。

CNI 插件可以由第三方厂商开发和维护,因此,可以选择最适合自己的插件。CNI 插件通常运行在主机上,并由容器运行时调用,例如 Docker、rkt 等。当容器需要连接到主机网络时,CNI 插件将会为其创建必要的网络接口和路由规则。

一些常用的 CNI 插件包括:

  • Flannel:一个简单易用的网络解决方案,支持多种部署模式。
  • Calico:一个高度可扩展的容器网络方案,旨在为大规模生产环境提供网络和安全性。
  • Weave Net:一个分布式的容器网络方案,具有良好的可扩展性和高度自动化的管理。
  • Cilium:一个基于 eBPF 的容器网络和安全解决方案,提供强大的流量控制和安全性。

安装命令(只要在master节点运行)

flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
calico
# 这两条命令不一样,别看错了
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/tigera-operator.yaml

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/custom-resources.yaml

# 查看部署进度
watch kubectl get pods -n calico-system

一般这里执行会卡住,这两条kubectl create -f命令要先去外网下载相关的yaml文件,需要挂代理(有时在虚拟机用wget命令也能下载下来),但是虚拟机不好代理,可以在实体机上将yaml文件(迅雷等软件可以下载)下载下来再使用xftp等软件传给虚拟机,然后执行下列命令
kubectl create -f tigera-operator.yamlkubectl create -f custom-resources.yaml

安装完之后,再运行kubectl get node查看(一般要等一下,不会立马就改变状态)

k8s安装keepalived 怎么配置_kubernetes


到这里安装完成,每个步骤博主都亲测可用,如果有问题,欢迎大家在评论区讨论。

小试牛刀

走完上面的步骤就安装完成k8s了,可以玩一玩k8s的命令,下面是一个用命令建立pod的小例子

kubectl create deployment k8s-nginx --image=nginx -r 3

命令的含义就不解释了。。。。。

kubectl get pod -o wide可以查看结果:

k8s安装keepalived 怎么配置_运维_02