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

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

前言:


kubernetes集群的部署工作是比较繁琐的,但kubeadm使得急速部署集群成为了一种可能,离线化的部署可以提高部署的效率,使得网络(各种镜像经常下载不了或者下载缓慢)不是部署工作的瓶颈。

OK,下面就讲解一哈如何利用kubeadm急速部署一个简单的可用于测试的kubernetes集群(如果对linux比较熟练的话,可以在5分钟内就部署完成)。

一,本次实践的服务器以及需要安装的组件的情况说明


计划使用三台VMware虚拟机做这个集群,当然,物理机也是一样的道理,在此就不啰嗦了。

image.png

image.png

二,先决条件:


A,时间服务器

时间服务器的用途就不多说了,必须要有的一个重要组件。

三个节点都执行命令:

yum install ntp -y && systemctl enable ntpd

19服务器的/etc/ntp.conf 配置文件内:

1. server 127.127.1.0 prefer
2. fudge 127.127.1.0 stratum 10

20和21服务器的/etc/ntp.conf配置文件内:

server 192.168.217.19

三台服务器都执行命令,以重启时间服务器:

systemctl restart ntpd

以上的配置表明以19服务器为主时间服务器,其它节点与此服务器时间同步,在工作节点上执行以下命令,输出为此,表示时间服务器正常:

[root@node2 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*master          LOCAL(0)        11 u   50  256  377    0.517    0.024   0.076
[root@node2 ~]# ntpstat
synchronised to NTP server (192.168.217.19) at stratum 12
   time correct to within 25 ms
   polling server every 256 s

B,集群服务器的免 密码ssh

服务器之间的免密就不在此啰嗦了,实在是太基础的东西了。

C,集群服务器的防火墙关闭以及swap交换内存关闭,selinux关闭

关闭防火墙(三台服务器都执行):

systemctl disable firewalld && systemctl stop firewalld

关闭swap交互内存:

swapoff -a

selinux的关闭就不说了,直接看测试结果,如下表示已关闭:

1. [root@node2 ~]# getenforce 
2. Disabled

D,主机名的固定,三台服务器统一这个hosts

[root@node2 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.217.19 master k8s-master
192.168.217.20 node1 k8s-node1
192.168.217.21 node2 k8s-node2

F,本地yum仓库以及基础软件

本地仓库的搭建见我的博客:Linux的完全本地仓库搭建指南(科普扫盲贴)_晚风_END的博客-CSDN博客_linux创建仓库

G:docker环境的搭建

docker环境的搭建见我的博客:docker的离线安装以及本地化配置_晚风_END的博客-CSDN博客

三,上传离线安装包到服务器内,离线安装包如下:


[root@master ~]# ll
total 3016
-rw-r--r-- 1 root root 3069556 Oct 22 21:28 flannel  #网络插件
drwxr-xr-x 3 root root    4096 Oct 22 21:10 k8s-offline-rpm #rpm安装包,这个需要挂载为仓库
drwxr-xr-x 2 root root    4096 Oct 22 21:11 kubeadin-offline-image #docker镜像
-rw-r--r-- 1 root root    4813 Oct 22 21:18 kube-flannel.yml  #flannel的部署清单文件
#以上文件都放置在root目录下,node节点只需要前面三个,不需要kube-flannel.yml 文件

离线安装包下载链接:

链接:https://pan.baidu.com/s/1_vlzm3YMxOewIx2HaDOKJg?pwd=sdaa
提取码:sdaa

本地仓库的开启:

cat > /etc/yum.repos.d/k8s.repo  <<EOF
[k8s]
name=k8s
baseurl=file:///root/k8s-offline-rpm
enable=1
gpgcheck=0
EOF

导入离线的docker镜像:

1. cd kubeadin-offline-image
2. for i in `ls /root/kubeadin-offline-image`;do docker load -i $i;done

赋予flannel插件的可执行权限:

chmod a+x flannel

安装相关软件:

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

四,集群初始化以及工作节点加入


方式一----命令初始化:

因为前面yum下载的是1.22.2,因此,这里的版本也指定的是1.22.2,apiserver-advertise-address这里是master服务器的IP

kubeadm init \
--apiserver-advertise-address=192.168.217.19 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.2 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

初始化命令的输出如下:

[init] Using Kubernetes version: v1.22.2
[preflight] Running pre-flight checks
  [WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[certs] Using certificateDir folder "/etc/kubernetes/pki" #kubeadm自动生成相关证书
[certs] Generating "ca" certificate and key#kubeadm自动生成相关证书
[certs] Generating "apiserver" certificate and key#kubeadm自动生成相关证书
[certs] apiserver serving cert is signed for DNS names [kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local master] and IPs [10.96.0.1 192.168.217.19]#kubeadm自动生成相关证书,这里提示了DNS是10.96.0.1
[certs] Generating "apiserver-kubelet-client" certificate and key#kubeadm自动生成相关证书
[certs] Generating "front-proxy-ca" certificate and key#kubeadm自动生成相关证书
[certs] Generating "front-proxy-client" certificate and key#kubeadm自动生成相关证书
[certs] Generating "etcd/ca" certificate and key#kubeadm自动生成相关证书
[certs] Generating "etcd/server" certificate and key#kubeadm自动生成相关证书
[certs] etcd/server serving cert is signed for DNS names [localhost master] and IPs [192.168.217.19 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key#kubeadm自动生成相关证书,etcd的证书
[certs] etcd/peer serving cert is signed for DNS names [localhost master] and IPs [192.168.217.19 127.0.0.1 ::1]#kubeadm自动生成相关证书,etcd的证书
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"#使用此目录下的配置文件
[kubeconfig] Writing "admin.conf" kubeconfig file#生成配置文件
[kubeconfig] Writing "kubelet.conf" kubeconfig file#生成kubelet的相关配置文件
[kubeconfig] Writing "controller-manager.conf" kubeconfig file#生成controller的配置文件
[kubeconfig] Writing "scheduler.conf" kubeconfig file#生成schedule的配置文件
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"#kubelet的配置文件
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"#还是kubelet的配置文件
[kubelet-start] Starting the kubelet#启动kubelet服务
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"#启动静态pod kube-apiserver
[control-plane] Creating static Pod manifest for "kube-controller-manager"#启动静态pod controller-manager
[control-plane] Creating static Pod manifest for "kube-scheduler"#启动静态pod
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"#启动静态pod
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[apiclient] All control plane components are healthy after 13.504364 seconds#健康检查完毕
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace#使用cm文件
[kubelet] Creating a ConfigMap "kubelet-config-1.22" in namespace kube-system with the configuration for the kubelets in the cluster#创建一个kubelet的cm
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node master as control-plane by adding the labels: [node-role.kubernetes.io/master(deprecated) node-role.kubernetes.io/control-plane node.kubernetes.io/exclude-from-external-load-balancers]#给节点打了标签
[mark-control-plane] Marking the node master as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule] #给master节点打了一个污点
[bootstrap-token] Using token: b1zldq.89t1aea8szja9d7l #token的使用
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to get nodes #rbac系统建立
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials#rbac系统建立
[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token #rbac系统建立
[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace #使用cm保存集群信息
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key #指定kubelet的证书
[addons] Applied essential addon: CoreDNS #部署组件coredns
[addons] Applied essential addon: kube-proxy#部署组件kube-proxy
Your Kubernetes control-plane has initialized successfully!#控制盘已经建立完成
To start using your cluster, you need to run the following as a regular user:
  mkdir -p $HOME/.kube#固化环境变量
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
  export KUBECONFIG=/etc/kubernetes/admin.conf#临时环境变量
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
#建议你apply一个测试文件,做集群的测试工作
Then you can join any number of worker nodes by running the following on each as root:
#工作节点加入命令
kubeadm join 192.168.217.19:6443 --token b1zldq.89t1aea8szja9d7l \
  --discovery-token-ca-cert-hash sha256:6ac4ccaf392e4173b7fd9c09cebfd0e2d7eb5ff5a826f39409701fe012ad2ba4 


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
378 1
|
3月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
282 89
|
8月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
368 9
|
8月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
5月前
|
运维 Dubbo Cloud Native
Dubbo 云原生重构出击:更快部署、更强控制台、更智能运维
Apache Dubbo 最新升级支持云原生,提供一键部署微服务集群与全新可视化控制台,提升全生命周期管理体验,助力企业高效构建云原生应用。
435 25
|
10月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
976 33
|
10月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
616 19
|
10月前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
10月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
428 0
OpenAI故障复盘丨如何保障大规模K8s集群稳定性

推荐镜像

更多