千家信息网

kubernetes中如何使用 kubeadm 创建高可用集群

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇文章为大家展示了kubernetes中如何使用 kubeadm 创建高可用集群,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一. 环境和版本信息OS:
千家信息网最后更新 2026年11月02日kubernetes中如何使用 kubeadm 创建高可用集群

本篇文章为大家展示了kubernetes中如何使用 kubeadm 创建高可用集群,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一. 环境和版本信息


OS:  CentOS 7.6.1810HAProxy Vervion:  1.5.18Docker Version:  Docker-CE 18.09.1Kubetnetes Version:  v1.15.1HAProxy:  192.168.199.200Control-plane Node(master node):node-01:  192.168.199.201    node-02:  192.168.199.202    node-03:  192.168.199.203Worker Node:node-04:  192.168.199.204    node-05:  192.168.199.205    node-06:  192.168.199.206

二. 系统配置:


1. 关闭防火墙
sudo systemctl stop firewalldsudo systemctl disable firewalld
2. 关闭selinux
setenforce 0sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
3. 关闭swap
sudo swapoff -a

注释swap挂载,如下图:

三. 安装docker、kubeadm、kubelet、kubectl


1. 安装docker-ce
  • 安装依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  • 添加 yum 源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • 安装 docker-ce
sudo yum install -y docker-ce-18.09.1-3.el7
  • 官方推荐修改 cgroup driver 为 systemd,更稳定,详见:https://kubernetes.io/docs/setup/cri

mkdir /etc/dockercat < /etc/docker/daemon.json{"exec-opts": ["native.cgroupdriver=systemd"]}EOFsystemctl restart dockersystemctl enable docker

2. 配置 CNI插件(flannel) 所需的iptables转发参数

cat <  /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsysctl -p /etc/sysctl.d/k8s.conf

3. 安装kubeadm、kubelet、kubectl

  • 官方 yum 源国内访问不了,这里添加阿里云 yum 源

cat < /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetes Repobaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/gpgcheck=0enabled=1EOF
  • yum 安装
sudo yum install -y kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1 --disableexcludes=kubernetessystemctl enable kubelet

提示:上面步骤二 和 步骤三 所有k8s节点都需要执行

四. 安装haproxy


1. 配置 kube-apiserver 高可用需要一个负载均衡器,这里直接使用了一个单节点 haproxy 代替一下,实际生产环境中使用 keepalived 保证 haproxy 的高可用
sudo yum install -y haproxy
2. 将 master node 的 kube-apiserver 的 6443 添加到 haproxy做负载均衡
vi /etc/haproxy/haproxy.cfgfrontend k8s_apiserver *:6443  mode tcp  default_backend k8sbackend k8s  mode tcp  balance    roundrobin  server     node-01 192.168.199.201:6443 check  server     node-02 192.168.199.202:6443 check  server     node-03 192.168.199.203:6443 check
3. reload 应用配置
systemctl reload haproxy
4. 查看6443端口是否已经在监听状态

五. 安装 master node


1. 创建 kubeadm 配置文件
cat < kubeadm-config.yamlapiVersion: kubeadm.k8s.io/v1beta2kind: ClusterConfigurationkubernetesVersion: v1.15.1controlPlaneEndpoint: "192.168.199.200:6443"imageRepository: "registry.aliyuncs.com/google_containers"networking:  podSubnet: "10.244.0.0/16"apiServer:  certSANs:  - "k8s.mytest.com"EOF
# controlPlaneEndpoint   haproxy 的负载均衡监听地址# imageRepository  默认使用gcr.io镜像站,国内访问不了,这里指定从阿里云的镜像站拉镜像
2. 初始化集群
sudo kubeadm init --config=kubeadm-config.yaml --upload-certs
  • 初始化成功,记录下最后提示的 kubeadm join xxx 命令, 第一个是往集群添加master node,第二个是往集群添加 worker node

3. 为 kubectl 配置kube-config
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  sudo chown $(id -u):$(id -g) $HOME/.kube/config
4. 安装 CNI插件 flannel
wget https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml
  • 默认是从quay.io拉取flannel镜像,但是经常因为网络原因拉不了,这里从阿里云找了一个替换了一下

sed -i s#'quay.io/coreos/flannel:v0.11.0-amd64'#'registry.cn-hangzhou.aliyuncs.com/mygcrio/flannel:v0.11.0-amd64'#g kube-flannel.ymlkubectl apply -f kube-flannel.yml
5. 使用上面记录的kubeadm jion ... 命令将另外两个master节点(node-02,node-03)添加进集群
kubeadm join 192.168.199.200:6443 --token ax13yr.yzsps775bllh0mlo \ --discovery-token-ca-cert-hash sha256:07b2b093be7ddabe7372b2c765b20343aa92f67db99286be1dc46b867a330f95 \ --control-plane --certificate-key b68cd457e26c827994c9804f8adf7a22720aba5a5e9f8e4e487a587b2c2fc127
6. 查看etcd 集群状态
docker run --rm -it --net host -v /etc/kubernetes:/etc/kubernetes \registry.aliyuncs.com/google_containers/etcd:3.3.10 etcdctl \ --cert-file /etc/kubernetes/pki/etcd/peer.crt \ --key-file /etc/kubernetes/pki/etcd/peer.key \ --ca-file /etc/kubernetes/pki/etcd/ca.crt \ --endpoints https://192.168.199.201:2379 cluster-health
  • 图中可以看出etcd 集群健康状态正常,到这里master node基本已经安装结束,下面开始添加worker node。

六. 添加 worker node

1. 执行 步骤 1.系统配置 和 步骤 2.安装docker、kubeadm、kubelet
2. 执行集群初始化完成后记录的第二条 kubeadm join ... 命令:
kubeadm join 192.168.199.200:6443 --token ax13yr.yzsps775bllh0mlo \    --discovery-token-ca-cert-hash sha256:07b2b093be7ddabe7372b2c765b20343aa92f67db99286be1dc46b867a330f95

七. 检查集群


1. 查看node
  • 各节点状态正常,如果有节点状态为 NotReady,有可能是该节点还未完全初始化成功,可以稍等片刻再查看是否正常。

  • 如果想将 master node 同时当做 worker node使用,执行如下命令即可:

kubectl taint nodes --all node-role.kubernetes.io/master-
2. 查看 pod
  • 如果有系统组件pod状态异常,使用 kubectl describe pod xxx 查看详细信息。

八. add-ons


  • dashboard 提供集群的GUI

  • metrics server 提供资源监控(heapster 目前已经被官方弃用)

1. 安装 dashboard

  • 生产环境中使用 dashboard 推荐使用 HTTPS,证书获取这里就不写了,可以到阿里云申请免费的DV证书或者 let's encrypt也可以,我这里使用 acme 申请了一个 let's encrypt 的证书,我这里证书文件放在了 $HOME/certs 目录下,里面包含dashboard.crt、dashboard.key两个证书文件;

  • 导入证书

kubectl create secret generic kubernetes-dashboard-certs --from-file=$HOME/certs -n kube-system
  • 下载和修改部署官方yaml文件的image,官方的镜像站 k8s.gcr.io 访问不了~访问不了~访问不了~~~

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yamlsed -i s#'k8s.gcr.io/kubernetes-dashboard-amd64'#'registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64'#g kubernetes-dashboard.yaml
  • 部署

kubectl create -f kubernetes-dashboard.yaml
  • 查看 pod 是否已经 running

kubectl get pods -n kube-system
  • 创建完成后我们还不能直接访问dashboard,因为 dashboard 服务还没暴露出来,生产中一般使用 ingress 对外服务,这里我们先用 nodeport 方式暴露出来,下篇文章会写到 ingress 的使用;

kubectl expose svc kubernetes-dashboard --port=443 --target-port=8443 --type=NodePort --name=test-dashboard -n kube-system
  • 查看 service test-dashboard 的 nodeport 端口号:

kubectl describe svc test-dashboard -n kube-system

  • 使用任意节点 ip:端口号 访问;使用ip可能会提示非安全访问,因为访问的域名和签名申请的证书域名不一致导致,这里先选择继续访问即可,后续写到 ingress 的时候也会解决

  • 已经安装成功,但是还需创建一个管理员用户登录:

vi admin-user.yamlapiVersion: v1kind: ServiceAccountmetadata:  name: admin-user  namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:  name: admin-userroleRef:  apiGroup: rbac.authorization.k8s.io  kind: ClusterRole  name: cluster-adminsubjects:- kind: ServiceAccount  name: admin-user  namespace: kube-system
  • 查看 token

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

  • 登录dashboard

2. 安装 metrics-server

  • 拉取 metrics-server 仓库

git clone https://github.com/kubernetes-incubator/metrics-server.git
  • 部署,官方image还是下载不了,替换image

sed -i s#'k8s.gcr.io'#'registry.aliyuncs.com/google_containers'#g metrics-server/deploy/1.8+/metrics-server-deployment.yamlkubectl create -f metrics-server/deploy/1.8+/
  • 确定 pod 已经 running

kubectl get pods -n kube-system
  • 编辑 deployment, 添加参数:

args:- --kubelet-insecure-tls- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname

  • 成功获取cpu和内存指标,如果出现 "error: metrics not available yet", 那就稍等几分钟再试,metrics server 需要采集指标数据

上述内容就是kubernetes中如何使用 kubeadm 创建高可用集群,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

集群 证书 配置 官方 状态 节点 镜像 成功 命令 文件 步骤 阿里 均衡 环境 系统 提示 生产 建高 两个 信息 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司华为 互联网中国科技 互联网金融公司科技 贷财互联网科技 善班互联网科技有限公司 互联网高科技企业 互联网高科技股票 科技伦理 互联网公司 成都玖崟互联网科技有限公司乐商圈怎么样 全球顶尖互联网科技公司 互联网科技公司实习生 阿里互联网科技企业 烟台灵鸽互联网科技有限公司 合肥互联网科技公司公章图片 互联网金融科技元年 领航科技大厦互联网公司 山东大美朱楼互联网科技有限公司 广西科技产业互联网是什么 悟空问答互联网科技 银川新华互联网科技学校招聘 为想互联网科技怎么样 北京互联网络科技有限公司 互联网金融 科技创新 语蝶互联网科技有限公司 辽宁互联网新科技 郑州欣桑互联网科技有限公司 互联网科技包装股 陕西九四连强互联网科技有限公司 山东蛋芒互联网科技有限公司 华人运通互联网科技公司
0