希曼日记

ReadHat系列安装Kubernetes

本页目录 12
  1. 设置对应主机名
  2. 修改 hosts
  3. 关闭 SELinux
  4. 添加 k8s 安装源
  5. 安装k8s所需组件
  6. 检查安装
  7. 修改 docker 配置
  8. 关闭SWAP分区
  9. 配置k8s配置
  10. 初始化集群
  11. 自动补全
  12. Q&A

设置对应主机名

每个节点分别设置对应主机名

主节点
hostnamectl set-hostname master 
从节点
hostnamectl set-hostname node1 
hostnamectl set-hostname node2
hostnamectl set-hostname node3

修改 hosts

所有节点都修改 hosts

echo "192.168.58.131 master" >> /etc/hosts
echo "192.168.58.135 node1" >> /etc/hosts
echo "192.168.58.136 node2" >> /etc/hosts
echo "192.168.58.137 node3" >> /etc/hosts

关闭 SELinux

所有节点关闭 SELinux

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

添加 k8s 安装源

所有节点

cat <<EOF > kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
mv kubernetes.repo /etc/yum.repos.d/

CentOS7必备前置:

tc 流量转发控制

sudo yum install -y yum-utils iproute-tc 
sudo yum update -y
sudo yum clean all
sudo yum makecache fast

安装k8s所需组件

所有节点

v1.23以上版本

yum install -y kubectl kubelet kubeadm
or
yum install -y kubectl 
yum install -y kubelet
yum install -y kubeadm

网络内核模块

tee /etc/modules-load.d/containerd.conf << EOF 
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter

数据包转发

tee /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1 
EOF 

重启

sysctl --system

生成containerd的默认配置文件

所有节点

containerd config default | tee /etc/containerd/config.toml
sed -i 's#registry.k8s.io/pause:3.6#registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9#g' /etc/containerd/config.toml
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g'  /etc/containerd/config.toml

重启containerd

systemctl restart containerd

v1.23以上版本不包含dockershim, 旧版本如下

yum: 使用yum list <pack> --showduplicates查找所有版本

yum list kubectl --showduplicates
yum list kubeadm --showduplicates
yum list kubelet --showduplicates

1.24.0版本带containerd

yum install -y kubelet-1.24.0 kubectl-1.24.0 kubeadm-1.24.0 containerd

1.22.4版本带docker

yum install -y kubelet-1.22.4 kubectl-1.22.4 kubeadm-1.22.4 docker-ce 

添加 Docker 安装源

所有节点

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

检查安装

启动

启动kubelet、docker,并设置开机启动(所有节点)

systemctl enable kubelet --now
systemctl start kubelet 
systemctl enable containerd --now
systemctl start containerd

(可选) 如果选择的是Docker

systemctl enable docker --now
systemctl start docker

检查是否加入自启

kubelet

systemctl is-enabled kubelet

(可选) Docker

systemctl is-enabled docker

查看kubectl版本

kubectl version --client --output=yaml

验证kubectl配置

kubectl cluster-info

查看kubelet版本

kubelet --version

查看kubeadm版本

kubeadm version

修改 docker 配置

所有节点都需要 kubernetes 官方推荐 docker 等使用 systemd 作为 cgroupdriver,否则 kubelet 启动不了

cat <<EOF > daemon.json 
{ 
	"exec-opts": ["native.cgroupdriver=systemd"],
	"registry-mirrors": ["https://ud6340vz.mirror.aliyuncs.com"]
} 
EOF 
mv daemon.json /etc/docker/

# 重启生效 
systemctl daemon-reload 
systemctl restart docker 

关闭SWAP分区

注释SWAP行

vi /etc/fstab

示例: Pasted image 20230419034510

配置k8s配置

主节点配置kube

其他节点需要访问集群,需要从主节点复制这个文件过去其他节点 在其他机器上创建 ~/.kube/config 文件也能通过 kubectl 访问到集群

mkdir -p $HOME/.kube  
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  
sudo chown $(id -u):$(id -g) $HOME/.kube/config

初始化集群

根据你的主机类型选择一个方案, 只需要执行其一

不同云厂商的公网IP方案

  1. 建立虚拟机网卡(所有节点) 添加修改以下网卡配置
cat > /etc/sysconfig/network-scripts/ifcfg-eth0:1 <<EOF
BOOTPROTO=static
DEVICE=eth0:1
IPADDR=<公网IP>
PREFIX=32
TYPE=Ethernet
USERCTL=no
ONBOOT=yes
EOF

(可选) centos8需要重启网络(所有节点)

systemctl restart network
  1. 查看是否生效(所有节点)
ip addr
  1. 修改kubelet启动参数文件(所有节点) 修改kubeadm配置, 替换<公网IP>为当前节点公网IP
echo >> /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --node-ip=<公网IP>
  1. 主节点(master)添加配置文件

内网方案

master主节点用kubeadm初始化

# 初始化集群控制台 Control plane
# 失败了可以用 kubeadm reset 重置
kubeadm init --image-repository=registry.aliyuncs.com/google_containers

(可选) 重新获取token:

kubeadm token create --print-join-command

自动补全

yum

yum install bash-completion

apt-get

apt-get install bash-completion

导入

bash

kubectl completion bash
source ~/.bashrc
(异常时) 失败运行:
echo >>  ~/.bashrc "source /usr/share/bash-completion/bash_completion"
source ~/.bashrc

验证

type _init_completion

启动 kubectl 自动补全功能

k8s

Bash

确保kubectl 补全脚本已经导入(sourced)到 Shell 会话中。 可以通过以下两种方法进行设置:

kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
sudo chmod a+r /etc/bash_completion.d/kubectl

如果 kubectl 有关联的别名,你可以扩展 Shell 补全来适配此别名:

echo 'alias ct=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl ct' >>~/.bashrc

重新加载

source ~/.bashrc

Q&A

Q: [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1 因为之前初始化过 A: 修改内核

vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

重启

sysctl --system

Q: E0419 17:19:24.409506 137577 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused The connection to the server localhost:8080 was refused - did you specify the right host or port?

A:

mkdir -p $HOME/.kube 
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Q: networkPlugin cni failed to set up pod "test-k8s-68bb74d654-mc6b9_default" network: open /run/flannel/subnet.env: no such file or directory

A: 在每个节点创建文件/run/flannel/subnet.env写入以下内容,配置后等待一会就好了

mkdir /run/flannel/ && echo > "/run/flannel/subnet.env" \
"FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true"

kubernetes-部署截图