
本文提供银河麒麟服务器操作系统 V11(2503 版本)部署 Kubernetes 的完整命令流与配置清单,适用于 x86/ARM 架构,基于 containerd + kubeadm 方案,已验证可用,建议收藏。
环境说明
系统&软件版本
- 系统版本:Kylin-Server-V11-2503-Release-General-20250715-x86_64-2025-07-23(非最小安装,带GUI图形桌面)
- 内核版本:6.6.0-32.7.v2505.ky11.x86_64
- Kubernetes版本:kubernetes.x86_64-1.34.1-1.ky11
- containerd版本:containerd-2.1.4-1.ky11.x86_64
- metrics-server版本: v0.8.0
- calico版本:v3.30.3
- Kubernetes-dashboard版本:v2.7.0
网络规划
- K8s Service网段:10.96.0.0/12
- K8s Pod网段:10.244.0.0/16
准备工作(所有节点)
安装基础工具
dnf -y install wget psmisc vim net-tools nfs-utils telnet device-mapper-persistent-data lvm2 git
服务器信息
服务器IP地址不能设置成动态dhcp,要配置成静态IP
# CPU:8C 内存:8G 磁盘:128G
主机名:k8s-master IP:192.168.17.180
主机名:k8s-node1 IP:192.168.17.181
主机名:k8s-node2 IP:192.168.17.182

配置所有节点的hosts文件
echo '192.168.17.180 master
192.168.17.181 k8s-node1
192.168.17.182 k8s-node2' >> /etc/hosts

关闭所有节点的防火墙、selinux
# 禁用关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 银河麒麟服务器系统V11 2503 selinux默认是disabled,如果不是改为disabled
# 更改selinux模式
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

所有节点关闭swap交换分区
# 临时禁用
swapoff -a
# 永久禁用,既注释/etc/fstab中的swap行
sed -i.bak '/swap/s/^/#/' /etc/fstab

所有节点设置时间同步
# 银河麒麟操作系统V11 2503默认自带chronyd
systemctl status chronyd
# 启动并设置开机自启
systemctl start chronyd && systemctl enable chronyd
所有节点设置ipv4 路由转发
cat > /etc/modules-load.d/k8s-ebpf.conf << 'EOF'
overlay
EOF
modprobe — overlay
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat > /etc/sysctl.d/k8s-ebpf.conf << 'EOF'
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
sysctl –system
# 查看是否生效
lsmod | grep overlay
sysctl net.ipv4.ip_forward

所有节点配置limit资源限制
Kubernetes 节点上运行着大量容器和系统服务,对系统资源的需求远高于普通服务器。如果不对底层操作系统做适当调优,可能导致 K8s 组件(如 kubelet、containerd、etcd 等)运行异常甚至崩溃。
echo "* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
* soft memlock unlimited
* hard memlock unlimited" >> /etc/security/limits.conf

配置服务器之间ssh互信和免密登录
生成ssh key公密钥
分别在3台服务器执行如下命令:
ssh-keygen # 一路回车

创建免密访问
在3台服务器上执行:
ssh-copy-id k8s-master
ssh-copy-id k8s-node1
ssh-copy-id k8s-node2
在创建ssh免密访问的过程中,输入用户密码即可。

所有节点安装ipvsadm
安装 ipvsadm 是为了为 kube-proxy 提供 IPVS 模式运行的用户态支持,从而获得更高性能、更灵活的 Service 负载均衡能力。如果你是小型测试集群可以不装,用 iptables 即可;如果你是生产/中大型集群:务必安装 ipvsadm 并启用 IPVS 模式,以达到K8s 高性能网络。
所有节点安装ipvsadm
# 所有节点安装ipvsadm
dnf install -y ipvsadm ipset sysstat conntrack libseccomp
# 所有节点配置ipvs模块
modprobe — ip_vs
modprobe — ip_vs_rr
modprobe — ip_vs_wrr
modprobe — ip_vs_sh
modprobe — nf_conntrack
所有节点设置ipvs
echo 'ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip ' > /etc/modules-load.d/ipvs.conf

检查ipvs是否加载
lsmod | grep -e ip_vs -e nf_conntrack

配置所有节点的系统内核参数
# 8、内核参数调优
cat > /etc/sysctl.d/99-sysctl.conf << 'EOF'
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
# Controls IP packet forwarding
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0
# Controls the System Request debugging functionality of the kernel
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1
# Controls the maximum size of a message, in bytes
kernel.msgmnb = 65536
# Controls the default maxmimum size of a mesage queue
kernel.msgmax = 65536
net.ipv4.conf.all.promote_secondaries = 1
net.ipv4.conf.default.promote_secondaries = 1
net.ipv6.neigh.default.gc_thresh3 = 4096
kernel.sysrq = 1
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0
net.ipv6.conf.lo.disable_ipv6=0
kernel.numa_balancing = 0
kernel.shmmax = 68719476736
kernel.printk = 5
net.core.rps_sock_flow_entries=8192
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_local_reserved_ports=60001,60002
net.core.rmem_max=16777216
fs.inotify.max_user_watches=524288
kernel.core_pattern=core
net.core.dev_weight_tx_bias=1
net.ipv4.tcp_max_orphans=32768
kernel.pid_max=4194304
kernel.softlockup_panic=1
fs.file-max=3355443
net.core.bpf_jit_harden=1
net.ipv4.tcp_max_tw_buckets=32768
fs.inotify.max_user_instances=8192
net.core.bpf_jit_kallsyms=1
vm.max_map_count=2000000
kernel.threads-max=262144
net.core.bpf_jit_enable=1
net.ipv4.tcp_keepalive_time=600
net.ipv4.tcp_wmem=4096 12582912 16777216
net.core.wmem_max=16777216
net.ipv4.neigh.default.gc_thresh1=2048
net.core.somaxconn=32768
net.ipv4.neigh.default.gc_thresh3=8192
net.ipv4.neigh.default.gc_thresh2=4096
net.ipv4.tcp_max_syn_backlog=8096
net.ipv4.tcp_rmem=4096 12582912 16777216
EOF
# 应用 sysctl 内核参数而不重新启动
sysctl –system
所有节点启用 br_netfilter
加载内核模块
modprobe br_netfilter
设置开机自动加载
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
所有节点配置完内核后重启服务器
# 重启服务器
shutdown -r now
安装k8s
所有节点安装containerd
Kubernetes 从 v1.24(2022年5月发布)起正式弃用 Docker 作为容器运行时,全面转向 containerd 等 CRI 兼容运行时。这不是“禁止使用 Docker”,而是剥离非必要组件,拥抱更标准化、轻量化的容器运行时生态。
dnf config-manager –add-repo https://eps-server.openkylin.top/NS/V11/2503/EPKL/multi_version/Overlay/x86_64/
dnf clean all && dnf makecache
dnf install containerd -y
systemctl enable –now containerd


配置containerd
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml
修改cgroup Driver为systemd
sed -ri 's#SystemdCgroup = false#SystemdCgroup = true#' /etc/containerd/config.toml
更改sandbox_image
sed -ri 's#registry.k8s.io\\/pause:3.10.1#registry.aliyuncs.com\\/google_containers\\/pause:3.10.1#' /etc/containerd/config.toml
配置镜像加速
指定配置文件目录
sed -i 's/config_path = ""/config_path = "\\/etc\\/containerd\\/certs.d\\/"/g' /etc/containerd/config.toml

配置docker镜像加速
mkdir -p /etc/containerd/certs.d/docker.io
# docker镜像加速
cat > /etc/containerd/certs.d/docker.io/hosts.toml << 'EOF'
server = "https://docker.io" # 源镜像地址
[host."https://xk9ak4u9.mirror.aliyuncs.com"] # 阿里-镜像加速地址
capabilities = ["pull","resolve"]
[host."https://docker.m.daocloud.io"] # 道客-镜像加速地址
capabilities = ["pull","resolve"]
[host."https://dockerproxy.com"] # 镜像加速地址
capabilities = ["pull", "resolve"]
[host."https://docker.mirrors.sjtug.sjtu.edu.cn"] # 上海交大-镜像加速地址
capabilities = ["pull","resolve"]
[host."https://docker.mirrors.ustc.edu.cn"] # 中科大-镜像加速地址
capabilities = ["pull","resolve"]
[host."https://docker.nju.edu.cn"] # 南京大学-镜像加速地址
capabilities = ["pull","resolve"]
[host."https://registry-1.docker.io"]
capabilities = ["pull","resolve","push"]
EOF
配置k8s.io镜像加速
# registry.k8s.io 镜像加速
mkdir -p /etc/containerd/certs.d/registry.k8s.io
cat > /etc/containerd/certs.d/registry.k8s.io/hosts.toml << 'EOF'
server = "https://registry.k8s.io"
[host."https://k8s.m.daocloud.io"]
capabilities = ["pull", "resolve", "push"]
EOF
配置quay.io镜像加速
# quay.io 镜像加速
mkdir -p /etc/containerd/certs.d/quay.io
cat > /etc/containerd/certs.d/quay.io/hosts.toml << 'EOF'
server = "https://quay.io"
[host."https://quay.m.daocloud.io"]
capabilities = ["pull", "resolve", "push"]
EOF
配置docker.elastic.io镜像加速
# docker.elastic.co镜像加速
mkdir -p /etc/containerd/certs.d/docker.elastic.co
tee /etc/containerd/certs.d/docker.elastic.co/hosts.toml << 'EOF'
server = "https://docker.elastic.co"
[host."https://elastic.m.daocloud.io"]
capabilities = ["pull", "resolve", "push"]
EOF
重启containerd生效配置
systemctl daemon-reload
systemctl enable containerd –now
systemctl restart containerd
systemctl status containerd

设置crictl
cat << EOF >> /etc/crictl.yaml
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
debug: false
EOF

所有节点部署安装 kubeadm, kubelet, kubectl相关组件
kubeadm、kubelet 和 kubectl 是 Kubernetes 集群中最基础也最常用的三个工具,各自扮演不同但互补的角色。kubeadm 是官方推荐的集群部署工具,能帮你快速搭建一个符合标准的 Kubernetes 控制平面——比如初始化 Master 节点、生成安全证书、配置核心组件等,还能轻松把新节点加入集群,大大简化了安装过程。kubelet 则是运行在每个节点上的“管家”,它负责和容器运行时(比如 containerd)打交道,确保 Pod 里的容器按预期运行,一旦发现状态不对,就会自动修复或上报。而 kubectl 是我们日常操作集群的命令行工具,通过它你可以部署应用、查看日志、排查问题、管理各种资源,几乎所有的用户交互都靠它完成。简单来说:kubeadm 用来“建”集群,kubelet 负责“管”节点,kubectl 帮你“用”集群——三者配合,构成了 Kubernetes 的核心运维基础。
# 前面安装container的时候已经添加了kylin安装k8s的源仓库地址
# 添加银河麒麟V11服务器系统k8s安装源仓库地址
dnf config-manager –add-repo https://eps-server.openkylin.top/NS/V11/2503/EPKL/multi_version/Overlay/x86_64/
# 安装k8s及其组件
dnf install -y kubernetes*
# 查看k8s相关的软件包
yum list | grep kubernetes

初始化 k8s 集群(master节点执行)
生成k8s集群初始化yaml文件
# 创建k8s集群初始化yml文件
mkdir -p ~/kubeadm_init && cd ~/kubeadm_init
cat > ~/kubeadm_init/kubeadm-init.yaml << EOF
apiVersion: kubeadm.k8s.io/v1beta4
bootstrapTokens:
– groups:
– system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
– signing
– authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.17.180
bindPort: 6443
nodeRegistration:
criSocket: unix:///var/run/containerd/containerd.sock
imagePullPolicy: IfNotPresent
imagePullSerial: true
name: k8s-master
taints: []
—
apiServer:
certSANs:
– 170.34.88.9
#apiServer: {}
apiVersion: kubeadm.k8s.io/v1beta4
caCertificateValidityPeriod: 87600h0m0s
certificateValidityPeriod: 87600h0m0s
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
encryptionAlgorithm: RSA-2048
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.34.1
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
scheduler: {}
—
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF
一下参数项需要根据自己的实际情况修改:
advertiseAddress : 当前 master 节点的内网 IP 地址(确保集群内部可达)
certSANs : 当前 master 节点的公网 IP(仅当你需要外网访问时)
name : 当前 master 节点的主机名 hostname(可选但推荐)
podSubnet : 与你将要安装的 CNI 插件一致
imageRepository : 符合你的网络环境(国内用阿里云)、
初始化k8s集群
提前拉取k8s需要的镜像
kubeadm config images pull –config kubeadm-init.yaml
# 查看镜像
crictl images

kubeadm config images list –config kubeadm-init.yaml

根据初始化成功提示配置认证配置(我当前为root用户):
echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> ~/.bashrc
source ~/.bashrc
将node节点添加到集群
添加node节点的命令:

如果忘记了使用kubeadm token create –print-join-command打印出来。
kubeadm token create –print-join-command

注意:加入节点的命令在你需要加入的node节点上执行
kubeadm join 192.168.17.180:6443 –token tgfr5b.175urbuwv7jyig2h –discovery-token-ca-cert-hash sha256:04ad7032c107a6adacf3a73bf71c516dd036999fc60417eb29f548841425d9f7

警告kubelet服务没有设置开机自启,设置开机自启:
# 所有加入的node节点都需要
systemctl enable kubelet.service
查看节点状态:
kubectl get node

当前STATUS是NotReady ,这是由于网络插件还未安装,当前node节点角色为 ,可以添加一个compute-node标签:
kubectl label nodes k8s-node1 node-role.kubernetes.io/compute-node=
kubectl label nodes k8s-node2 node-role.kubernetes.io/compute-node=

安装calico网络插件(只在master节点安装)
Kubernetes 本身不处理网络,需要借助 CNI 插件来实现 Pod 之间的通信。目前最常用的三个网络插件各有特色:Calico 性能强、策略灵活,支持 BGP 直接路由,在大型生产环境中很受欢迎;Flannel 则以简单稳定著称,配置方便,适合刚接触 K8s 或中小规模集群使用;Cilium 是新一代选择,基于 eBPF 技术,不仅网络效率高,还能在应用层(L7)做精细的安全控制和可观测性分析,特别适合云原生和对安全要求高的场景。选哪个,主要看你的集群规模、性能需求和运维习惯。本文选择calico进行安装。
下载calico.yaml文件
wget https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/calico.yaml

修改pod网段
修改calico.yaml里的pod网段,把calico.yaml文件里的pod所在的网段改成k8s集群初始化时设置的网段。

修改镜像源地址
改成国内的镜像源地址,避免镜像拉取失败。

安装calico网络
kubectl apply -f calico.yaml

验证k8s集群状态
再次在master上运行命令 kubectl get nodes查看运行结果:
kubectl get nodes

metrics-server安装
metrics-server 是 Kubernetes 官方提供的轻量级资源指标收集器,用于从 kubelet 获取节点和 Pod 的 CPU、内存使用率等实时指标。它是 Horizontal Pod Autoscaler(HPA)和 kubectl top 命令的核心依赖组件,部署简单、资源占用低,不存储历史数据,仅提供当前指标的 API 查询服务。
metrics-server&k8s兼容表

下载metrics-server的yaml文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml
修改容器运行时参数和镜像地址

安装metrics-server
kubectl apply -f high-availability-1.21+.yaml

metrics-server验证测试
kubectl top node

安装k8s仪表盘Kubernetes DashboardKubernetes Dashboar
Kubernetes Dashboard 是 Kubernetes 官方提供的 Web 用户界面,用于可视化管理和监控集群资源。通过 Dashboard,用户可以部署、管理和排查容器化应用,查看 Pod、Deployment、Service 等资源状态,实时监控 CPU、内存使用情况,并支持基于角色的访问控制(RBAC)。它简化了 Kubernetes 的操作门槛,适合初学者和运维人员进行日常管理。不过出于安全考虑,默认不开启,需手动部署并配置访问权限。Dashboard 本身不提供告警或日志分析等高级功能,通常需配合其他工具(如 Prometheus、Grafana)使用。
下载安装yaml配置文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

修改服务端口类型
默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部

修改为国内镜像源地址
#image: kubernetesui/dashboard:v2.7.0
image: registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.7.0
imagePullPolicy: Always
#image: kubernetesui/metrics-scraper:v1.0.8
image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.8


安装kubernetes-dashboard
kubectl apply -f recommended.yaml

创建kubernetes-dashboard账户
vim k8s-admin-user.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
—
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
– kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
kubectl apply -f k8s-admin-user.yaml

创建账户登录密钥
apiVersion: v1
kind: Secret
metadata:
name: admin-user-token
namespace: kubernetes-dashboard
annotations:
kubernetes.io/service-account.name: admin-user
type: kubernetes.io/service-account-token

查看token
kubectl -n kubernetes-dashboard describe secret admin-user-token

建议将token复制保存到文件中,需要的时候直接查看文档。
查看kubenetes-dashboard暴露出来的访问端口
kubectl get svc -n kubernetes-dashboard

访问kubernetes-dashboard
网页访问任意一台节点的 https://IP:端口,就能打开页面,记住,必须是 https协议访问。打开页面有警告不管,点击高级继续访问,你会看到登录界面,复制token登录即可:


验证集群功能(可选)
部署一个测试 Nginx 应用
创建nginx部署yaml配置文件
如果你希望一次性部署Nginx及其服务,可以将部署和服务的配置合并到一个yaml文件中。
vim nginx-deployment-and-service.yaml
输入以下内容:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
– name: nginx
image: nginx:latest
ports:
– containerPort: 80
—
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
– protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
部署nginx
kubectl apply -f nginx-deployment-and-service.yaml

检查部署和服务状态
运行以下命令来查看Nginx部署的状态:
kubectl get deployments

运行以下命令来查看Nginx服务的状态:
kubectl get services

访问nginx
通过任意节点 IP + NodePort 访问 Nginx 页面,确认集群正常工作。

后续建议
- 安装 Ingress Controller(如 Nginx Ingress)
- 配置持久化存储(如 NFS、Ceph)
- 部署监控(Prometheus + Grafana)和日志(EFK/ELK)
- 使用 Helm 简化应用部署
- 考虑使用 Kubespray、RKE 或 K3s 等工具简化生产部署
(如果有兴趣,关注我,我会持续更新)
写在最后
走到这一步,真的值得给自己点个赞!在银河麒麟这样的国产操作系统上成功部署 Kubernetes,并不是一件“照着教程点几下就能成”的事。它意味着你不仅理解了 k8s 的基本原理,还主动面对了国产环境中的实际挑战——比如软件源适配、依赖兼容、内核参数调整等等。更厉害的是,你没选择“躺平用云厂商托管集群”,而是亲手在信创土壤里种下了一颗云原生的种子。这说明你不仅懂技术,还有点“自找麻烦”的工程师精神——而这,恰恰是推动国产生态进步最需要的那股劲儿。所以,给自己泡杯茶(或者咖啡),好好庆祝一下。毕竟,在国产操作系统上把 k8s 跑通的人,值得被认真夸一句:真·硬核玩家!
接下来继续折腾吧,反正——Pod 可以重启,梦想不能停机。
网硕互联帮助中心





评论前必须登录!
注册