Jie
发布于 2026-04-07 / 4 阅读
0
0

[K8S]kubernetes 1.27.1-0安装

k8s安装

机器准备

  • 机器配置如下
主机名IP配置
master192.168.10.502核+2G+20G
node1192.168.10.512核+2G+20G
node2192.168.10.522核+2G+20G

一. 安装(所有机器都要执行)

1. 执行以下命令安装必备插件

# yum 更新
   sudo yum update -y
   # tab 命令补全
   sudo yum install -y bash-completion
   # wget
   sudo yum install -y wget
   # vim 编辑器
   sudo yum install -y vim-enhanced
   # 网络工具
   sudo yum install -y net-tools
   # gcc 编译器
   sudo yum install -y gcc

2. 将主机名指向本机IP,主机名只能包含:字母、数字、-(横杠)、.(点)

设置主机名

hostnamectl set-hostname  主机名

3. 将节点加入到 hosts 中

cat >> /etc/hosts << EOF
   192.168.10.50 master
   192.168.10.51 node1
   192.168.10.52 node2
   EOF

4. 设置时间同步

sudo yum -y install ntpdate
   # 同步时间,域名可以更改
   sudo ntpdate time.nist.gov 
   sudo systemctl status ntpdate
   sudo systemctl start ntpdate
   sudo systemctl status ntpdate
   sudo systemctl enable ntpdate

5. 关闭防火墙或者开通指定端口(这里使用关闭防火墙)

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

6. 关闭 swap 交换空间(官方要求必须关闭)

free -h
   sudo swapoff -a
   sudo sed -i 's/.*swap.*/#&/' /etc/fstab
   free -h

7. 关闭 selinux

getenforce
   cat /etc/selinux/config
   sudo setenforce 0
   sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
   cat /etc/selinux/config

8. 安装 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
   
   # 设置 docker 镜像加速
   sudo mkdir -p /etc/docker
   # 镜像地址换成你自己的阿里云镜像地址
   sudo tee /etc/docker/daemon.json <<-'EOF'
   {
     "registry-mirrors": ["https://z5d2yy4c.mirror.aliyuncs.com"],
     "exec-opts": ["native.cgroupdriver=systemd"]
   }
   EOF
   
   sudo systemctl daemon-reload
   sudo systemctl restart docker
   sudo docker info
   
   sudo systemctl status docker.service
   sudo systemctl status containerd.service

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

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
   # 是否检查 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
   
   EOF

10. 转发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

11.安装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

# 安装最新版本(生产环境不建议)
# sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes --nogpgcheck

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

二.启动

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

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

# --image-repository 					镜像加速地址,一般不动
# --apiserver-advertise-address  master 节点IP地址,自己改
# --kubernetes-version 					kubernetes 版本,自己选择的什么版本就改成什么版本


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

2.将 node 加入集群(仅在node节点主句执行)不要直接复制,每个人不一样node 执

# 执行成功后,会出现类似下列内容:
#kubeadm join 192.168.10.50:6443 --token jcrz49.j7yd60k4wrlpzwy8 \
#        --discovery-token-ca-cert-hash sha256:d89fad67586538fc8956a41768dce6c04a7e0cb644ea73f2458b873237c0643e
# 将控制台打印的这句复制到 node 节点主机上执行就行

# 如果忘记或者过期可以使用以下命令重新生成
# kubeadm token create --print-join-command

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

  • k8s与Calico版本对应
Kubernetes 版本Calico 版本Calico 文档
1.18、1.19、1.203.18https://projectcalico.docs.tigera.io/archive/v3.18/getting-started/kubernetes/requirementshttps://projectcalico.docs.tigera.io/archive/v3.18/manifests/calico.yaml
1.19、1.20、1.213.19https://projectcalico.docs.tigera.io/archive/v3.19/getting-started/kubernetes/requirementshttps://projectcalico.docs.tigera.io/archive/v3.19/manifests/calico.yaml
1.19、1.20、1.213.2https://projectcalico.docs.tigera.io/archive/v3.20/getting-started/kubernetes/requirementshttps://projectcalico.docs.tigera.io/archive/v3.20/manifests/calico.yaml
1.20、1.21、1.223.21https://projectcalico.docs.tigera.io/archive/v3.21/getting-started/kubernetes/requirementshttps://projectcalico.docs.tigera.io/archive/v3.21/manifests/calico.yaml
1.21、1.22、1.233.22https://projectcalico.docs.tigera.io/archive/v3.22/getting-started/kubernetes/requirementshttps://projectcalico.docs.tigera.io/archive/v3.22/manifests/calico.yaml
1.21、1.22、1.233.23https://projectcalico.docs.tigera.io/archive/v3.23/getting-started/kubernetes/requirementshttps://projectcalico.docs.tigera.io/archive/v3.23/manifests/calico.yaml
1.22、1.23、1.243.24https://projectcalico.docs.tigera.io/archive/v3.24/getting-started/kubernetes/requirementshttps://projectcalico.docs.tigera.io/archive/v3.24/manifests/calico.yaml
1.23、1.24、1.25、1.26、1.273.25https://projectcalico.docs.tigera.io/archive/v3.25/getting-started/kubernetes/requirementshttps://projectcalico.docs.tigera.io/archive/v3.25/manifests/calico.yaml
  • 或者自己去官网查看版本对应关系
wget --no-check-certificate https://projectcalico.docs.tigera.io/archive/v3.25/manifests/calico.yaml

下载不了的可以把后面网址复制到浏览器下载下来后在传到虚拟机

修改 calico.yaml 文件

vim calico.yaml
# 在 - name: CLUSTER_TYPE 下方添加如下内容
- name: CLUSTER_TYPE
  value: "k8s,bgp"
  # 下方为新增内容
- name: IP_AUTODETECTION_METHOD
  value: "interface=eth0"

# value: "interface=master节点主机的网卡名称"

配置网络

kubectl apply -f calico.yaml
  • 出现【The connection to the server localhost:8080 was refused - did you specify the right host or port?】,执行以下命令
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

4.再次查看节点信息

kubectl get nodes

三.测试

创建一个 nginx 来测试

kubectl create deployment nginx --image=nginx

查看状态

kubectl get pods -o wide

等待进行启动完成

NAME                     READY   STATUS    RESTARTS   AGE   IP               NODE    NOMINATED NODE   READINESS GATES
nginx-77b4fdf86c-q7fsl   1/1     Running   0          14h   172.16.166.129   node1   <none>           <none>

暴露端口 (svc)

kubectl expose deployment nginx --port=80 --type=NodePort

查看 pos 及服务信息

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        15h
service/nginx        NodePort    10.107.125.118   <none>        80:31801/TCP   14h

在浏览器中访问

http://192.168.10.50:31801

评论