云原生|kubernetes|kubeadm五分钟内部署完成集群(完全离线部署---适用于centos7全系列)(二)

简介: 云原生|kubernetes|kubeadm五分钟内部署完成集群(完全离线部署---适用于centos7全系列)

方式二---配置文件初始化:

此文件名称为kubeadm-init.yaml,可以通过kubeadm 命令生成模板文件,命令为:

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

此模板文件需要修改8个地方:

  • ttl: 24h0m0s 修改为ttl: "0"   这样初始化的token不会过期
  •  advertiseAddress: 1.2.3.4 修改为advertiseAddress: 192.168.217.19 这个IP是master节点的IP
  • name;node 修改为name:master 也就是修改为master节点的主机名,我的master节点的主机名是master
  • dns: {} 修改为dns: type: CoreDNS 指定集群的DNS类型
  • imageRepository: k8s.gcr.io修改为阿里云的镜像站点---registry.aliyuncs.com/google_containers,这样可以提高下载速度,也就是镜像的本地化
  • podSubnet: "10.244.0.0/16"  这个是增加的,原模板文件里没有这个,等同于设置apiserver里的--pod-network-cidr,这个网段是pod使用的。
  • serviceSubnet: ""  这里可以不设置,默认就是10.96.0.0/12 此网段是service这个资源使用的。
  • kubernetesVersion: 1.22.2  这个是kubeadm,kubelet的版本号

版本号的查询:

[root@master ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.2", GitCommit:"8b5a19147530eaac9476b0ab82980b4088bbc1b2", GitTreeState:"clean", BuildDate:"2021-09-15T21:37:34Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/amd64"}

初始化config配置文件示例---kubeadm-init.yaml:

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: "0"
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.217.19
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  imagePullPolicy: IfNotPresent
  name: master
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcds
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.22.2
networking:
  dnsDomain: cluster.local
  podSubnet: "10.244.0.0/16"
  serviceSubnet: ""
scheduler: {}

使用配置文件初始化集群:

kubeadm init --config=kubeadm-init.yaml

工作节点的加入:

方式一---命令行增加工作节点在20和21节点,执行此命令:

kubeadm join 192.168.217.19:6443 --token b1zldq.89t1aea8szja9d7l \
  --discovery-token-ca-cert-hash sha256:6ac4ccaf392e4173b7fd9c09cebfd0e2d7eb5ff5a826f39409701fe012ad2ba4

此命令输出如下:

[root@node1 ~]# kubeadm join 192.168.217.19:6443 --token b1zldq.89t1aea8szja9d7l \
> --discovery-token-ca-cert-hash sha256:6ac4ccaf392e4173b7fd9c09cebfd0e2d7eb5ff5a826f39409701fe012ad2ba4
[preflight] Running pre-flight checks
  [WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

方式二---kubeadm config  配置文件方式增加工作节点

生成join工作节点的模板文件:

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

编辑文件kubeadm-join.yaml,如下地方需要修改:

  • apiServerEndpoint:连接apiserver的地址,即master的api地址,这里可以改为192.168.0.1:6443,如果master集群部署的话,这里需要改为集群vip地址
  • token及tlsBootstrapToken:连接master使用的token,这里需要与master上的InitConfiguration中的token配置一致
  • name:node节点的名称,如果使用主机名,需要确保master节点可以解析该主机名。否则的话可直接使用ip地址

本例中的kubeadm-join.yaml

token和tlsBootstrapToken 的值都是上面init命令输出的最后一行的token,此文件在工作节点运行,运行命令为:

kubeadm join --config=kubeadm-join.yaml

示例文件内容如下: 

apiVersion: kubeadm.k8s.io/v1beta3
caCertPath: /etc/kubernetes/pki/ca.crt
kind: JoinConfiguration
discovery:
        bootstrapToken:
                apiServerEndpoint: 192.168.217.19:6443
                token: b1zldq.89t1aea8szja9d7l
                unsafeSkipCAVerification: true
        t1sBootstrapToken: b1zldq.89t1aea8szja9d7l

五,极为简单的网络插件部署


在主节点master执行:

kubectl apply -f kube-flannel.yml
chmod a+x flannel
cp flannel /opt/cni/bin/
scp flannel node1:/opt/cni/bin/
scp flannel node2:/opt/cni/bin/

在三个节点都重启kubelet服务:

systemctl restart kubelet

此时,在master节点查询节点状态:

[root@master ~]# kubectl get no
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   26m   v1.22.2
node1    Ready    <none>                 25m   v1.22.2
node2    Ready    <none>                 25m   v1.22.2

六,集群的一个小bug修复及集群的功能测试


小bug修复:

编辑文件/etc/kubernetes/manifests/kube-controller-manager.yaml  删除- --port=0 这一行
编辑文件/etc/kubernetes/manifests/kube-scheduler.yaml 删除- --port=0 这一行
重启kubelet服务:systemctl restart kubelet

看看集群的健康状态:

[root@master ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
controller-manager   Healthy   ok                              
etcd-0               Healthy   {"health":"true","reason":""}   
scheduler            Healthy   ok                              

看看集群的pod是否正常,service的clusterIP是否正常:

[root@master ~]# kubectl get po,svc -A
NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   pod/coredns-7f6cbbb7b8-dcnpf         1/1     Running   0          109m
kube-system   pod/coredns-7f6cbbb7b8-hg5t8         1/1     Running   0          109m
kube-system   pod/etcd-master                      1/1     Running   0          109m
kube-system   pod/kube-apiserver-master            1/1     Running   0          109m
kube-system   pod/kube-controller-manager-master   1/1     Running   0          56s
kube-system   pod/kube-flannel-ds-22k8b            1/1     Running   0          94m
kube-system   pod/kube-flannel-ds-mgvsj            1/1     Running   0          94m
kube-system   pod/kube-flannel-ds-v8ml5            1/1     Running   0          94m
kube-system   pod/kube-proxy-hstwd                 1/1     Running   0          107m
kube-system   pod/kube-proxy-sqmfq                 1/1     Running   0          107m
kube-system   pod/kube-proxy-z2cmx                 1/1     Running   0          109m
kube-system   pod/kube-scheduler-master            1/1     Running   0          111s
NAMESPACE     NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP                  109m
kube-system   service/kube-dns     ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   109m

生成一个nginx的pod,看此pod能否正常部署:

[root@master ~]# kubectl create deploy nginx --image=nginx:1.20
deployment.apps/nginx created
[root@master ~]# kubectl get po 
NAME                  READY   STATUS              RESTARTS   AGE
nginx-7fb9867-ssqsr   0/1     ContainerCreating   0          9s
[root@master ~]# kubectl get po 
NAME                  READY   STATUS              RESTARTS   AGE
nginx-7fb9867-ssqsr   0/1     ContainerCreating   0          11s

总结:


此次实践需要指出的是,这种方式部署的kubernetes集群是只能做测试用的,因为,etcd只是单例,不是高可用集群,apiserver也不是ha高可用。后续会给出一个可用于生产的高可用kubeadm版本集群。

附:

在线安装kubeadm方式部署的kubernetes集群:

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
EOF

其它的步骤基本一样,没有什么需要改的,只是在线的方式会比较慢,因为镜像需要一个个慢慢下载,前面的初始化集群命令那的kubernetes的版本需要更改,例如:

yum 安装的是kubernetes-1.23.9:

yum install -y kubeadm-1.23.9 kubelet-1.23.9 kubectl-1.23.9 conntrack-tools libseccomp \
libtool-ltdl device-mapper-persistent-data lvm2

那么,初始化命令需要修改版本号为:

kubeadm init \
--apiserver-advertise-address=192.168.217.19 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.9 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
11月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
815 1
|
11月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
568 89
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
1169 9
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
761 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
1002 15
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
722 59
|
运维 Cloud Native 测试技术
极氪汽车云原生架构落地实践
随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
491 13

推荐镜像

更多