CentOS安装k8s

1.系统配置

  • 硬件配置基本要求
资源 大小
硬盘 >= 20G
cpu >= 2 核
内存 >= 2G
  • 本教程配置
主机名 IP 配置
master 192.168.4.20 3 核+2G+20G
worker1 192.168.4.21 3 核+2G+20G
worker2 192.168.4.22 3 核+2G+20G

2.安装必要软件

所有机器都要执行

yum 更新

sudo yum update -y
  • bash-completion: tab 命令补全
  • wget:下载工具
  • vim-enhanced:vim 编辑器
  • net-tools:网络工具
  • gcc: 编译器
sudo yum install -y bash-completion wget vim-enhanced net-tools gcc

3.设置主机名

  • 查看主机名
hostname
  • 设置主机名

以下三条命令分别在三个节点执行


#master 节点
hostnamectl set-hostname k8s-master
#worker1 节点
hostnamectl set-hostname k8s-worker1
#woker2 节点
hostnamectl set-hostname k8s-worker2

4.配置 hosts 文件

将节点加入到 hosts 文件中

编辑/etc/hosts 文件

vi /etc/hosts

添加以下内容


192.168.4.20 k8s-master
192.168.4.21 k8s-worker1
192.168.4.22 k8s-worker2

5.设置时间同步


sudo yum -y install ntpdate
sudo ntpdate ntp1.aliyun.com
sudo systemctl status ntpdate
sudo systemctl start ntpdate
sudo systemctl status ntpdate
sudo systemctl enable ntpdate

6.关闭防火墙或者开通指定端口

这里使用关闭防火墙


sudo systemctl stop firewalld.service 
sudo systemctl disable firewalld.service

7.关闭 swap 交换空间


#查看
free -h
#临时关闭 swap
sudo swapoff -a
#久关闭 swap 分区
sudo sed -i 's/.*swap.*/#&/' /etc/fstab

8.关闭 selinux


#查看
getenforce
cat /etc/selinux/config
#临时关闭
sudo setenforce 0
#永久关闭
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

9. 安装 docker, Containerd

  • 安装 docker, Containerd

# 删除 docker(如果有的话)
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 安装必备工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 加入 docker 源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 

# 安装 docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 安装 containerd
sudo yum install -y containerd
  • 配置

# 停止 containerd
sudo systemctl stop containerd.service

# 生成并修改配置文件
sudo cp /etc/containerd/config.toml /etc/containerd/config.toml.bak
sudo containerd config default > $HOME/config.toml
sudo cp $HOME/config.toml /etc/containerd/config.toml

sudo sed -i "s#registry.k8s.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml

sudo sed -i "s#SystemdCgroup = false#SystemdCgroup = true#g" /etc/containerd/config.toml

# 将 containerd 加入开机自启
sudo systemctl enable --now containerd.service

# 启动 docker
sudo systemctl start docker.service
# 将 docker 加入开机自启
sudo systemctl enable docker.service
sudo systemctl enable docker.socket
sudo systemctl list-unit-files | grep docker

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker info

sudo systemctl status docker.service
sudo systemctl status containerd.service

10.添加阿里云 k8s 镜像仓库

添加/etc/yum.repos.d/kubernetes.repo 文件;文件内容如下



[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
# 是否开启本仓库
enabled=1
# 是否检查 gpg 签名文件
gpgcheck=0
# 是否检查 gpg 签名文件
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

11.设置 docker 镜像加速


sudo mkdir -p /etc/docker
vi /etc/docker/daemon.json

/etc/docker/daemon.json 文件添加如下内容


{
    "registry-mirrors":[
    "https://registry.dockermirror.com",
    "https://dockerproxy.cn",
    "https://docker.agsv.top",
    "https://docker.agsvpt.work",
    "https://docker.m.daocloud.io",
    "https://docker.chenby.cn",
    "https://do.nark.eu.org",
    "https://docker.awsl9527.cn",
    "https://hub.rat.dev",
    "https://dockerhub.jobcher.com",
    "https://dockerpull.com",
    "https://docker.rainbond.cc",
    "https://jockerhub.com",
    "https://hub.nat.tf",
    "https://docker.1ms.run",
    "https://docker.wmyx.us.kg",
    "https://docker-registry.nmqu.com",
    "https://docker.naixi.net"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

12. 将桥接的 IPv4 流量传递到 iptables 的链

cat >/etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter

cat >/etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
EOF

sysctl --system

# 通过运行以下指令确认 br_netfilter 和 overlay 模块被加载
lsmod | egrep 'overlay|br_netfilter'
# 通过运行以下指令确认 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 系统变量在你的 sysctl 配置中被设置为 1
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

 13.安装 k8s


# 安装 1.27.1 版本
sudo yum install -y kubelet-1.27.1-0 kubeadm-1.27.1-0 kubectl-1.27.1-0 --disableexcludes=kubernetes --nogpgcheck

systemctl daemon-reload
sudo systemctl restart kubelet
sudo systemctl enable kubelet

安装最新版本(生产环境不建议)


sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes --nogpgcheck

14.k8s 配置

  • master 初始化(仅在 master 节点主机上执行)

kubeadm init --image-repository=registry.aliyuncs.com/google_containers --apiserver-advertise-address=192.168.42.150 --kubernetes-version=v1.27.1

–image-repository: 镜像加速地址,一般不动

–apiserver-advertise-address: master 节点 IP 地址

–kubernetes-version: kubernetes 版本,自己选择的什么版本就改成什么版本

CentOS 安装 k8s

初始化失败可以使用 kubeadm reset 重置;失败原因多半是因为网络问题,可以换个网络试试

  • 初始化成功后执行(仅在 master 节点主机上执行)

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 将 node 加入集群(仅在 node 节点主句执行)

kubeadm init 命令执行成功后,会打印以下内容 (不要直接复制,每个人不一样)


kubeadm join 192.168.4.20:6443 --token pn5997.vkugw8cmdpc407y2 \
 --discovery-token-ca-cert-hash sha256:b625d6be2a3ccb56f3277e835b343d33a0b2e93e56e238a48daf830d3b7219f2 

CentOS 安装 k8s

如果忘记或者过期可以使用以下命令重新生成


kubeadm token create --print-join-command
  • 查看集群状态(master 节点执行)
kubectl get nodes

输出


NAME          STATUS     ROLES           AGE     VERSION
k8s-master    NotReady   control-plane   8m42s   v1.27.1
k8s-worker1   NotReady             82s     v1.27.1
k8s-worker2   NotReady             84s     v1.27.1

可以看到所有节点都是 NotReady ,是因为还没有配置网络

  • 配置网络(仅在 master 节点执行)

k8s 版本要与 Calico 版本对应上,具体查看

https://docs.tigera.io/calico/latest/getting-started/kubernetes/requirements

下载 calico.yaml 文件


wget --no-check-certificate https://projectcalico.docs.tigera.io/archive/v3.25/manifests/calico.yaml

修改 calico.yaml 文件

在- name: CLUSTER_TYPE 下方添加如下内容


- name: CLUSTER_TYPE
  value: "k8s,bgp"
  #下方为新增内容
- name: IP_AUTODETECTION_METHOD
  value: "interface=master 节点主机的网卡名称"

再次查看节点信息

kubectl get nodes

依然还是没有成功;查看 pod 状态,没有正常启动

kubectl get pods --all-namespaces -o wide | grep kube-system

CentOS 安装 k8s

使用 crictl logs 命令查看任何一个 pod,发现有如下错误

crictl logs coredns-7bdc4cb885-28jnf

CentOS 安装 k8s

kubectl logs -n kube-system 命令查看状态不是 running 的 pod,发现有如下错误


kubectl logs -n kube-system calico-node-bfxtk
kubectl logs -n kube-system coredns-7bdc4cb885-28jnf

CentOS 安装 k8s

新建/etc/crictl.yaml 文件,写入如下内容


runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false

使用 kubectl delete pod -n kube-system 命令删除那些状态不是 running 的 pod。例如

kubectl delete pod -n kube-system calico-kube-controllers-6c99c8747f-kmkdl

CentOS 安装 k8s

再次查看 pod 的启动状态,全部都是在 running 状态

kubectl get pod -n kube-system

CentOS 安装 k8s

另外 crictl ps 也可以使用了。

crictl ps -a

CentOS 安装 k8s

使用 crictl logs 也可以查看日志了

crictl logs 4838afe83150e

CentOS 安装 k8s

15.其他

  • k8s 命令补全

! grep -q kubectl "$HOME/.bashrc" && echo "source /usr/share/bash-completion/bash_completion" >>"$HOME/.bashrc"
! grep -q kubectl "$HOME/.bashrc" && echo "source <(kubectl completion bash)" >>"$HOME/.bashrc"
! grep -q kubeadm "$HOME/.bashrc" && echo "source <(kubeadm completion bash)" >>"$HOME/.bashrc"
! grep -q crictl "$HOME/.bashrc" && echo "source <(crictl completion bash)" >>"$HOME/.bashrc"
source "$HOME/.bashrc"
  • 常用命令

# 获取节点
kubectl get nodes -o wide
# 实时查询 nodes 状态
watch kubectl get nodes -o wide
# 获取 pod
kubectl get pods --all-namespaces -o wide
# 查看镜像列表
kubeadm config images list
# 节点加入集群
kubeadm token create --print-join-command
# 描述 node
kubectl describe node k8s-master
# 描述 pod
kubectl describe pod kube-flannel-ds-hs8bq --namespace=kube-system

16.测试

以下命令在主节点执行

  • 创建一个 nginx
kubectl create deployment nginx --image=nginx
  • 查看状态
kubectl get pods -o wide

等待 ContainerCreating 变成 Running 后执行下一个步骤

  • 暴露端口

kubectl expose deployment nginx --port=80 --type=NodePort
  • 查看 pos 及服务信息
kubectl get pod,svc

CentOS 安装 k8s

  • 在浏览器中访问
http://192.168.4.20:31930/

地址根据你自己的主机变化,端口上面输出的信息中 PORT(S) 这一栏会有

CentOS 安装 k8s

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...