yum安装独立部署k8s集群

作者: 虎虎 分类: devops 发布时间: 2023-04-16 20:18 阅读次数:524

一、搭建环境

需要两台服务器,一台master节点,一台node节点,后期可按照步骤继续增加node节点

Master节点:
CPU : 2核
内存 :4GiB
操作系统:Centos7.6 64位(查看系统类型:lsb_release -a)
需要组件:
docker(也可以是其他容器运行时)
kubectl集群命令行交互工具
kubeadm集群初始化工具

Node节点:
CPU : 2核
内存 :4GiB
操作系统:Centos7.6 64位
需要组件:
docker(也可以是其他容器运行时)
kubelet管理pod和容器,确保他们健康稳定运行。
kube-proxy网络代理,负责网络相关的工作。

集群版本:
k8s=1.22.4 、docker=docker-ce-20.10.0

1.对所有节点关闭selinux、关闭防火墙、关闭swap:

1)SELinux防火墙的设置:

#getenforce

永久关闭selinux,修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled

2)Firewall防火墙的设置:

  • firewall的基本使用:

    #启动
    systemctl start firewalld
    #关闭
    systemctl stop firewalld
    #查看状态
    systemctl status firewalld
    #开机禁用
    systemctl disable firewalld
    #开机启动
    systemctl enable firewalld
  • firewall-cmd的基本使用:

    #怎么开启一个端口(--permanent永久生效,没有此参数重启后失效)
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    #重新载入(修改firewall-cmd配置后必须重启)
    firewall-cmd --reload
    #查看
    firewall-cmd --zone=public --query-port=80/tcp
    #删除
    firewall-cmd -zone=public --remove-port=80/tcp --permanent
    #查看所有打开的端口
    firwall-cmd --zone=public --list-ports
  • 关闭swap:
    kubelet不是为处理swap情况而设计的,kubernetes团队不打算实现这一点,因为目标是pod应该适合主机的内存。
    提示:production deployments should disable swap unless testing the NodeSwap feature gate of the kubelet

    sudo swapoff -a

    永久关闭

    sed -ri 's/.*swap.*/#&/' /etc/fstab

设置服务器时间为最新时间
date -s "2023-4-16 13:32:10"

2.配置主机hostname每个节点分别设置对应主机名

方法1:如果只是修改hostname可以通过如下命令:

hostname newHostname
#或者
hostnamectl set-hostname master

注意:这种修改方式只有当前有效,等服务器重启后hostname就会失效,回到原来的hostname
方法2:永久修改,重启后生效

vi /etc/hostname

方法3:每个节点配置hostname(推荐)

hostnamectl set-hostname master
hostnamectl set-hostname node1

另外各节点之间可以免密登录:
ssh-keygen
ls /root/.ssh/
ssh-copy-id root@192.168.0.112
ssh-copy-id root@192.168.0.111

ssh root@192.168.0.212

3.所有节点都修改hosts

#vi /etc/hosts,添加如下内容:
192.168.0.111 master
192.168.0.112 node1

4.所有节点都添加k8s安装源

#vi /etc/yum.repos.d/kubernetes.repo,添加如下内容:
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enable=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

5.所有节点都添加Docker安装源

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

二、安装

1.所有节点安装所需组件

#移除原来的docker,没有不用执行
yum remove docker-ce docker-ce-cli containered.io -y
#安装所需组件
yum install kubelet-1.22.4 kubectl-1.22.4 kubeadm-1.22.4 docker-ce-20.10.0 docker-ce-cli-20.10.0 -y

提示:kubernetes自v1.24移除了对docker-shim的支持,而Docker Engine默认又不支持CRI规范,因而二者无法直接完成整合。为此,Mirantis和Docker联合创建了cri-docker项目,用于为Docker Engine提供一个能够支持到CRI规范的垫片,从而能够让kubernetes基于CRI控制Docker。cri-dockerd项目提供了预制的二进制格式的程序包,用户按需下载相应的系统和对应平台的版本即可完成安装。

2.所有节点启动kubelet、docker,并设置开机启动

systemctl enable kubelet
systemctl start kubelet
systemctl enable docker
systemctl start docker

3.修改所有节点的docker配置

#kubernetes官方推荐docker等使用systemd作为cgroudrive,否则kubelet启动不了
#vi /etc/docker/daemon.json,添加如下内容:
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
#重启生效
systemctl daemon-reload
systemctl restart docker

4.用kubeadm初始化集群

#下面命令仅在master节点执行:
#初始化集群控制台control plane
#失败了可以用kubeadm reset重置
sudo swapoff -a
#安装流量控制工具
yum install tc -y
kubeadm init --image-repository=registry.aliyuncs.com/google_containers
#记得把kubeadm join xxx保存起来
#忘记了重新获取: kubeadm token create --print-join-command

The connection to the server localhost:8080 was refused - did you specify the right host or port?
注意:防火墙要关闭,swap也要关闭

#下面命令仅在master节点执行:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
#在其他node节点上创建~/.kube/config文件也能通过kubectl访问到集群
#复制授权文件,以便kubectl可以有权限访问集群
#如果你其他node节点需要访问集群,需要从master节点复制这个文件过去其他node节点
#下面命令仅在master节点执行:
scp /etc/kubernetes/admin.conf 192.168.0.112:/etc/kubernetes/admin.conf
#下面命令分别在各个node节点执行:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

5.把node节点加入集群

#下面命令分别在各个node节点执行:
kubeadm join 192.168.0.112:6443 --token xxx --discovery-token-ca-cert-hash xxxxxx
#token可通过以下方式生成:
head -c 16 /dev/urandom  | od -An -t x |tr -d ' '

安装网络插件,否则node是NotReady状态(master节点跑)

kubectl apply -f https://docs.projectcalico.org/v3.6/manifests/calico.yaml
#或者
#很有可能国内网络访问不到这个资源,你可以网上找找国内的源安装flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yaml
#查看节点,要在主节点查看(其他节点有安装kubectl也可以查看,查看各个节点的STATUS是否是Ready)
kubectl get nodes
#遇到错误
less /var/spool/mail/root

到此安装结束

不足之处望指正

发表评论

邮箱地址不会被公开。 必填项已用*标注

标签云