1、Rocky linux8 安装3主节点k8s

1) haproxy

haproxy如果起不来,可能是setenforce的原因

在 Rocky Linux 8 中,您可以通过以下步骤关闭或启用 SELinux:

关闭 SELinux:

  1. 编辑 /etc/selinux/config 文件,可以使用文本编辑器如 Vim 或 Nano 进行编辑:

    sudo vim /etc/selinux/config
    
  2. 在打开的文件中找到 SELINUX 行,并将其值修改为 disabled,例如:

    SELINUX=disabled
    
  3. 保存并退出编辑器。

  4. 重新启动系统,以使更改生效。

启用 SELinux:

如果您决定启用 SELinux,请遵循以下步骤:

  1. 编辑 /etc/selinux/config 文件:

    sudo vim /etc/selinux/config
    
  2. SELINUX 的值更改为 enforcing

    SELINUX=enforcing
    

    或者,如果您希望 SELinux 在启动时以警告模式启动,可以将其值设置为 permissive

    SELINUX=permissive
    
  3. 保存并退出编辑器。

  4. 重新启动系统,以使更改生效。

在进行任何更改之前,请确保您了解 SELinux 的基本概念,并且在启用 SELinux 时,您可能需要对文件和进程的访问权限进行更严格的控制。

在操作过程中,您也可以使用 setenforce 命令来临时更改 SELinux 的执行模式。例如,要将 SELinux 设置为警告模式,您可以执行:

sudo setenforce 0

要将 SELinux 设置为强制模式,您可以执行:

sudo setenforce 1

这些更改仅在当前会话中有效,并不会影响永久配置。

dnf install keepalived haproxy -y
vi /etc/haproxy/haproxy.cfg
global
    log /dev/log  local0 warning
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
   stats socket /var/lib/haproxy/stats
defaults
  log global
  option  httplog
  option  dontlognull
        timeout connect 5000
        timeout client 50000
        timeout server 50000
frontend kube-apiserver
  bind *:16443
  mode tcp
  option tcplog
  default_backend kube-apiserver

backend kube-apiserver
    mode tcp
    option tcplog
    option tcp-check
    balance roundrobin
    default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
    server kube-apiserver-1 172.16.0.4:6443 check # Replace the IP address with your own.
    server kube-apiserver-2 172.16.0.5:6443 check # Replace the IP address with your own.
    server kube-apiserver-3 172.16.0.6:6443 check # Replace the IP address with your own.

systemctl restart haproxy
systemctl enable haproxy

2)keepalived

vi /etc/keepalived/keepalived.conf
global_defs {
  notification_email {
  }
  router_id LVS_DEVEL
  vrrp_skip_check_adv_addr
  vrrp_garp_interval 0
  vrrp_gna_interval 0
}

vrrp_script chk_haproxy {
  script "killall -0 haproxy"
  interval 2
  weight 2
}

vrrp_instance haproxy-vip {
  state BACKUP
  priority 100
  interface eth0                       # Network card
  virtual_router_id 60
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }

  unicast_src_ip 172.16.0.2      # The IP address of this machine
  unicast_peer {
    172.16.0.3                         # The IP address of peer machines
  }

  virtual_ipaddress {
    172.16.0.10/24                  # The VIP address
  }

  track_script {
    chk_haproxy
  }
}

systemctl restart keepalived
systemctl enable keepalived

3)每个节点的操作

hostnamectl set-hostname masterX
vi /etc/hosts 
#添加
192.168.0.1  master1
192.168.0.2  master2
192.168.0.3  master3
sudo swapoff -a
vi /etc/fstab # 这里面的注释掉
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo systemctl stop firewalld
sudo systemctl disable firewalld


sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce
sudo systemctl enable docker
sudo systemctl start docker
sudo cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF
sudo yum install -y kubelet-1.21.5 kubeadm-1.21.5 kubectl-1.21.5
sudo systemctl enable kubelet
sudo systemctl start kubelet

没网的话,把镜像都提前拷过来

# 查看有哪些镜像
kubeadm config images list
# 两台机器都把镜像导上

4)主节点的操作

cat <<EOF > kubeadm-config.yaml 
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.21.5
imageRepository: registry.aliyuncs.com/google_containers # image的仓库源
controlPlaneEndpoint: "ip:port"
networking:
  podSubnet: "10.244.0.0/16"
EOF
sudo kubeadm init --config=kubeadm-config.yaml --upload-certs --v=5 

其他主节点加入集群后,执行这句,开始使用kubectl

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

Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of “crypto/rsa: verification error” while trying to verify candidate authority certificate “kubernetes”)

root 用户输入这条命令解决:export KUBECONFIG=/etc/kubernetes/admin.conf

kubectl apply -f calico.yaml

calico.yaml
或者阿里云盘

5)其他主节点的操作

# 主节点这样加入
kubeadm join ip:port --token i9fvba.hjy6aur3g0up9o7a \
--discovery-token-ca-cert-hash sha256:18b62cf225a4d4ff22ec00ce21a006af0f9309fe7fb6fc684814d2f9077b9e3b \
--control-plane --certificate-key 8636f2a0ccbd249b02957170e54b7921c5f28cff0b93ad86736af046719677b9

#工作节点这样加入
kubeadm join ip:port --token i9fvba.hjy6aur3g0up9o7a \
--discovery-token-ca-cert-hash sha256:18b62cf225a4d4ff22ec00ce21a006af0f9309fe7fb6fc684814d2f9077b9e3b 

6)如何卸载

# worker 节点
kubectl drain NODE_NAME --delete-local-data --force --ignore-daemonsets
kubectl delete node NODE_NAME
dnf remove -y kubeadm kubectl kubelet kubernetes-cni kube*
rm -rf ~/.kube/
rm -rf /etc/cni/
rm -rf /etc/kubernetes/
rm -rf /var/lib/etcd/
rm -rf /var/lib/kubelet/

主节点上

kubeadm reset

2 Ubuntu22.04

要在 Ubuntu 22.04 上安装特定版本的 Kubernetes(例如 v1.21.5),您需要按照以下步骤操作:

1. 更新系统并安装依赖项

首先,更新您的系统并安装一些必要的依赖项:

sudo apt update
sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl

2. 安装 Docker

Kubernetes 需要一个容器运行时环境,Docker 是一个常用的选择:

sudo apt install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker

3. 添加 Kubernetes 源

添加 Kubernetes 的 apt 仓库:

sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

4. 安装指定版本的 kubeadm, kubelet 和 kubectl

查看可用版本:

sudo apt update
apt-cache madison kubeadm

在列表中找到 v1.21.5,然后安装 kubeadm, kubelet 和 kubectl 的指定版本:

sudo apt install -y kubelet=1.21.5-00 kubeadm=1.21.5-00 kubectl=1.21.5-00
sudo apt-mark hold kubelet kubeadm kubectl

apt-mark hold 命令在 Ubuntu 和其他基于 Debian 的系统中用于将特定的软件包标记为 “hold” 状态。当一个包被标记为 “hold” 时,它不会在系统执行常规升级(如通过 apt upgrade 命令)时被升级。这意味着该软件包将保持在当前安装的版本,直到您手动改变它的状态。

在 Kubernetes 的上下文中,执行 apt-mark hold kubelet kubeadm kubectl 的目的是:

  1. 防止自动更新:这确保了这些关键组件(kubeletkubeadmkubectl)在系统进行常规软件更新时不会被自动更新。这是非常重要的,因为 Kubernetes 的不同组件需要保持版本一致性,任意升级单个组件可能会导致兼容性问题。

  2. 维护集群稳定性:通过固定这些组件的版本,可以维护集群的稳定性和一致性,特别是在生产环境中,任意的更新可能会引入不稳定因素。

  3. 手动控制升级:当您准备好升级 Kubernetes 时,可以手动解除这些包的 “hold” 状态,并更新到所需的特定版本,这样可以更精确地控制更新过程。

要恢复这些包的正常更新状态,您可以使用 apt-mark unhold <包名> 命令。例如:

sudo apt-mark unhold kubelet kubeadm kubectl

这将允许这些包在下次执行 apt upgrade 时正常更新。

5. 初始化 Kubernetes 集群

使用 kubeadm 初始化您的 Kubernetes 集群:

sudo kubeadm init --kubernetes-version=v1.21.5

6. 配置 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

7. 安装 Pod 网络

您需要安装一个 Pod 网络插件。例如,使用 Calico:

kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

注意事项

  • 请确保在安装之前检查您的硬件和网络配置是否满足 Kubernetes 的要求。
  • 如果您的服务器使用了防火墙,请确保开放必要的端口。
  • 安装特定版本的 Kubernetes 意味着您需要遵循该版本的特定指南和考虑与最新版本的兼容性差异。
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐