Kubernetes 非集群安装教程:新手入门笔记

2026-06-16阅读 0热度 0
其他

环境

先交代下实验环境:CentOS 7,内核版本 kernel: 5.4.219-1.el7.elrepo.x86_64,K8s 版本 1.23.5(特别注意:1.24 版本开始不再支持 Docker,本流程不适用),Docker 版本 20.10.18(engine)。机器配置 8C/12G/500G,一共三台节点:

IP主机名备注
192.168.1.60centos-k8s-master-60master 节点
192.168.1.61centos-k8s-node-61node 节点
192.168.1.62centos-k8s-node-62node 节点

在这里插入图片描述

建议提前装好 wget、curl、net-tools、vim、git、jq 这些常用工具。

下面按步骤详细说明:准备工作(升级内核、设置主机名及 hosts、关闭 swap、关闭 selinux、关闭 firewalld、调整时区、开启 iptables、启用 ipvs 模式)→ 安装(调整内核参数、安装 Docker CE、安装 kubelet / kubeadm / kubectl、初始化主节点、安装 flannel、加入 Node 节点、安装 kubernetes-dashboard)→ 附录。

准备工作

以下操作在所有机器上执行。

升级内核版本

参见《CentOS 7 升级内核版本》。

设置主机名及 hosts 更新

通过如下命令或修改 /etc/hostname 文件,依次设置各节点主机名:

hostname set-hostname centos-k8s-master-60

然后修改 /etc/hosts 文件,添加三台机器的 IP 与主机名映射,效果如下:

在这里插入图片描述

重启后生效(可以等所有步骤完成后再统一重启)。

关闭 swap 分区

先检查是否已开启 swap:

free -m

在这里插入图片描述

若 swap 总量不为 0,则执行:

swapoff -a

同时编辑 /etc/fstab,删除或注释掉 swap 分区那一行。修改前:

在这里插入图片描述

修改后:

在这里插入图片描述

重启生效。

关闭 selinux

临时设置 permissive 模式:

setenforce 0

编辑 /etc/selinux/config,将 SELINUX 改为 disabled

在这里插入图片描述

重启生效。

关闭 firewalld

systemctl stop firewalld
systemctl disable firewalld

调整时区及自动对时

略。

开启 iptables

yum install -y iptables iptables-services
systemctl start iptables
systemctl enable iptables
iptables -F
service iptables sa ve

启用 ipvs 模式

yum install -y ipvsadm ipset

创建 /etc/sysconfig/modules/ipvs.modules,写入:

modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
# 部分教程用 nf_conntrack_ipv4,但后面会报错,这里使用 nf_conntrack
modprobe -- nf_conntrack

使其生效:

chmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
lsmod | grep nf_conntrack

安装

调整内核参数

新建 /etc/sysctl.d/k8s.conf,写入:

net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv6.conf.all.disable_ipv6 = 1

加载(若报错可先忽略):

sysctl -p /etc/sysctl.d/k8s.conf

安装 docker-ce

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum update -y
yum install -y docker-ce

配置 /etc/docker/daemon.json

{
    "registry-mirrors": ["https://jo9w2k2o.mirror.aliyuncs.com"],
    "exec-opts": ["native.cgroupdriver=systemd"]
}

启动并设置开机自启:

systemctl restart docker
systemctl restart docker-ce   # 如无此服务可跳过
systemctl enable docker

安装 kubelet、kubeadm、kubectl

配置 yum 源,新建 /etc/yum.repos.d/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
yum update

安装指定版本(1.23.5,高于此版本不再支持 Docker):

yum install -y kubelet-1.23.5 kubeadm-1.23.5 kubectl-1.23.5

如果之前装了其他版本,可先 yum remove kubelet 移除。

初始化主节点

导出默认配置:

kubeadm config print init-defaults > kubeadm-config.yaml

修改 kubeadm-config.yaml

  • localAPIEndpoint.advertiseAddress 改为 master 节点 IP(192.168.1.60)
  • 修改 imageRepositoryregistry.cn-hangzhou.aliyuncs.com/google_containers
  • 修改 kubernetesVersionv1.23.5
  • 设置 networking.podSubnet(如 10.244.0.0/16
  • 在文件末尾新增 ipvs 配置:
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
# 1.20 版本以后不需要 featureGates 中的 SupportIPVSProxyMode,否则会启动失败(见备注)
mode: ipvs

在这里插入图片描述

然后预拉取镜像(可选,但能加速初始化):

kubeadm config --config=kubeadm-config.yaml images list

在这里插入图片描述

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6

初始化主节点:

kubeadm init --config=kubeadm-config.yaml --upload-certs --v=6 | tee kubeadm-init.log

--v 参数控制日志详细程度,遇到错误时设为 6 可看到更详细的信息。初始化成功后,会输出类似下图的内容:

在这里插入图片描述

按提示配置 kubectl 环境:

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

查看节点状态:

kubectl get node

此时节点应为 NotReady

原因是网络插件未就绪。这里先检查一下所有 pod 的状态:

kubectl get pod -A

若发现 kube-proxy 不是 Running(比如 CrashLoopBackOff),需要排查网络配置。可以用如下命令查看详情:

kubectl describe pod {pod名称} -n {命名空间}
kubectl logs {pod名称} -n {命名空间}

根据原因修改后,删除重建 pod 即可:

kubectl delete pod {pod名称} -n {命名空间}

coredns 的 pending 可以先不管,等网络插件安装后会自动变成 Running。

安装 flannel

下载 flannel 的 yaml 文件:

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

创建:

kubectl apply -f kube-flannel.yml

也可以先下载镜像再创建。等 flannel pod 起来后,master 节点状态会转为 Ready

在这里插入图片描述

加入 Node 节点

在 node 节点上执行 master 初始化日志中给出的 join 命令,例如:

kubeadm join 192.168.1.60:6443 --v=6 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:8df9dcae2618fcf9430d833f1f96f

在这里插入图片描述

出现以下内容即加入成功:

在这里插入图片描述

在 master 上确认节点已加入:

kubectl get node

在这里插入图片描述

安装 kubernetes-dashboard

下载 yaml 文件(版本匹配参见 GitHub releases):

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml
kubectl apply -f recommended.yaml

修改 service 暴露端口(将 type 从 ClusterIP 改为 NodePort):

kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

type 改为 NodePort

在这里插入图片描述 在这里插入图片描述

查看暴露的端口:

kubectl get svc -A -o wide

在这里插入图片描述

可知 dashboard 地址为 https://192.168.1.60:31840/

在这里插入图片描述

获取登录 token:

kubectl -n kubernetes-dashboard get secret | grep kubernetes-dashboard-token
kubectl describe secret kubernetes-dashboard-token-lwmnx -n kubernetes-dashboard

在这里插入图片描述

使用 token 登录:

在这里插入图片描述

附录

  • kube-proxy ipvs failed complete: unrecognized feature gate: SupportIPVSProxyMode —— 1.20 之后不再需要该 feature gate,直接配置 mode: ipvs 即可。
  • flannel 的 yaml 文件样例、dashboard 的 yaml 文件样例可参考官方仓库。
  • 卸载 K8s
kubeadm reset

在这里插入图片描述

  • 新增 node 加入集群:在新 node 上完成相同的基础配置(Docker、kubelet、kubeadm 等),然后从其他 node 导入镜像,在 master 上生成新的 join 命令:
kubeadm token create --print-join-command

新节点执行该命令即可加入。

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策