【探索 Kubernetes|集群搭建篇 系列 6】从 0 到 1,轻松搭建完整的 Kubernetes 集群(下)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 【探索 Kubernetes|集群搭建篇 系列 6】从 0 到 1,轻松搭建完整的 Kubernetes 集群(下)

六、安装 kubeadm、kubelet、kubectl

注意:Master 和 Node 节点都操作。

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 安装 kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1,这样我们 Kubernetes 集群版本也对应会安装 v1.23.1 版本
yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1
systemctl enable kubelet && systemctl start kubelet
# 为了实现 docker 使用的 cgroupdriver 与 kubelet 使用的 Cgroup 的一致性
cat > /etc/sysconfig/kubelet << EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF

七、kubeadm 初始化 Kubernetes 集群

1.Master 节点操作

  • 注意:安装 Kubernetes 时,我们对应组件镜像,如果没有科学上网是拉取不下来的,这里使用 --image-repository=registry.aliyuncs.com/google_containers 参数替换从默认镜像仓库拉取,改为 aliyun 镜像仓库。
# 查看 k8s 组件镜像
kubeadm config images list
# 下载 k8s 组件镜像
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers  --kubernetes-version=v1.23.1 
# 创建 k8s 集群(初始化)
kubeadm init --kubernetes-version=v1.23.1 --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers
  • 复制证书到 .kube 目录下,kubectl 默认会使用这个目录下的授权信息访问 Kubernetes 集群;如果不这样做的话,我们每次都需要通过 export KUBECONFIG 环境变量告诉 kubectl 这个安全配置文件的位置。
# 复制证书到 .kube 目录下
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.Node 节点操作

  • Master 节点执行,生成 bootstrap-token,非安全模式连接 Master 节点。
$ kubeadm token create --print-join-command
kubeadm join 192.168.200.15:6443 --token ylls57.b0gfk6o9zq5wslgc --discovery-token-ca-cert-hash sha256:c16a38026f66381f5911f1fdbe44220069b969b83174486e5b602c11646b0a51
  • Node 节点执行,上诉生成的 bootstrap-token,连接 Master 节点,加入集群。
kubeadm join 192.168.200.15:6443 --token ylls57.b0gfk6o9zq5wslgc --discovery-token-ca-cert-hash sha256:c16a38026f66381f5911f1fdbe44220069b969b83174486e5b602c11646b0a51

3.部署网络插件

注意:Master 节点操作

通过 kubectl get 命令查看集群节点状态和 所以 Pod 状态,如图:可以看到 Node 节点 STATUS NotReady (未就绪)而 Pod coredns 的状态是 Pending ,这是为什么呢?

  • 在调试 Kubernetes 集群时,最重要的手段就是用 kubectl describe 命令来查看这个节点对象的详细信息、状态和事件(Event):

NotReady 和 Pending 的原因在于:我们尚未部署任何网络插件。

部署网络插件,以 flannel 为例:

yum install -y wget
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml

部署完成后,我们在次查看 Node 和 coredns Pod 的状态:

[root@master ~]# kubectl get node
NAME                    STATUS     ROLES                  AGE   VERSION
localhost.localdomain   Ready      <none>                 12m   v1.23.1
master                  Ready      control-plane,master   80m   v1.23.1
[root@master ~]# kubectl get pod -A
NAMESPACE      NAME                             READY   STATUS              RESTARTS   AGE
kube-flannel   kube-flannel-ds-7dchq            1/1     Running             0          4m
kube-flannel   kube-flannel-ds-w7kh9            1/1     Running            0          4m
kube-system    coredns-6d8c4cb4d-9tkz5          1/1     Running             0          82m
kube-system    coredns-6d8c4cb4d-q4jcx          1/1     Running             0          64m
kube-system    etcd-master                      1/1     Running             0          82m
kube-system    kube-apiserver-master            1/1     Running             0          82m
kube-system    kube-controller-manager-master   1/1     Running             0          82m
kube-system    kube-proxy-4vpws                 1/1     Running             0          82m
kube-system    kube-proxy-ss7xr                 1/1     Running         0          14m
kube-system    kube-scheduler-master            1/1     Running             0          82m

Kubernetes 支持容器网络插件,使用的是一个名叫 CNI 的通用接口,它也是当前容器网络的事实标准,市面上的所有容器网络开源项目都可以通过 CNI 接入 Kubernetes,比如 Flannel、Calico、Canal、Romana 等等

八、部署 Dashboard 可视化插件

下载 Dashboard 的 YAML 文件

官方 GitHub下载地址https://github.com/kubernetes/dashboard/releases

# 下载 dashboard 的 recommended.yaml
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml

下载后 vi 或 vim,编辑 recommended.yaml 在 Service 服务名为:kubernetes-dashboard 的指定位置,添加 NodePort 方式访问 Dashbaord ,如图:

部署 dashboard,这里需要等待 2 分钟左右,拉取镜像时间,可以使用 kubectl get pod -A 查看 dashbaord 的 Pod 是否运行了。

kubectl apply -f recommended.yaml

获取 token 值,这个 token 值登录 dashboard 时需要使用:

kubectl describe secret -n kubernetes-dashboard  $(kubectl get secret -n kubernetes-dashboard | grep kubernetes-dashboard-token | awk '{print $1}')

浏览器访问

注意:这里默认使用的是 https 协议,不是 http 协议。

查看 dashbaord 的 service 服务提供的端口,这里为:31080。所以,浏览器输入:https://192.168.200.15:31080 (格式:https://宿主机ip:31080)

[root@master test]# kubectl get service -A | grep kubernetes-dashboard
kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.99.233.125   <none>        8000/TCP                 43m
kubernetes-dashboard   kubernetes-dashboard        NodePort    10.98.222.55    <none>        443:31080/TCP            43m
  • 访问时出现下列错误

解决方法是:保持焦点在页面内,鼠标在页面空白处点击(不选中任何按钮),直接输入“thisisunsafe”,输完后按回车键,就可以正常访问网页。

这里要注意的是,输入的时候页面时不会有任何反应的,也不会显示输入的字符,是正常现象。输入完毕后点回车即可。

  • 输入前面获取的 token 值,登录即可。

进入 Dashbaord 最终界面:

九、部署存储插件

为了实现容器持久化存储,我们这里部署 Rook 项目。

  • Rook 项目是一个基于 Ceph 的 Kubernetes 存储插件。Rook 将分布式存储系统转变为自我管理、自我扩展、自我修复的存储服务。它自动执行存储管理员的任务:部署、引导、配置、供应、扩展、升级、迁移、灾难恢复、监控和资源管理。

容器的持久化存储,就是用来保存容器存储状态的手段。存储插件为容器提供远程数据卷,使得容器里面的数据,被保存在远程存储服务器的磁盘中,或者以分布式的方式保存在多个节点上,而与当前宿主机的存储没有任何绑定关系。

这样无论你在哪个宿主机上启动新的容器,都可以请求挂载指定的持久化存储卷,从而访问到数据卷里保存的内容。

部署 ROOK

ROOK 官网https://rook.io/

官网下载地址https://github.com/rook/rook/releases

# 如果 git 不下来,就使用上述提供的官网下载地址,下载 tar 包,后上传解压。
git clone --single-branch --branch v1.11.6 https://github.com/rook/rook.git
cd rook/deploy/examples
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
[root@master examples]# kubectl -n rook-ceph get pod
NAME                                 READY   STATUS    RESTARTS   AGE
rook-ceph-operator-585f6875d-4fqx2   1/1     Running   0          8m52s
[root@master examples]# kubectl get -f operator.yaml
NAME                                  DATA   AGE
configmap/rook-ceph-operator-config   31     9m6s
NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/rook-ceph-operator   1/1     1            1           9m6s

现在 Rook operator 正在运行,我们可以创建 Ceph 集群。

kubectl create -f cluster.yaml

总结

今天介绍了,使用 kubeadm 部署 Kubernetes 集群,可以发现其实并不复杂。

重点简述了 kubeadm 初始化集群部分。

Rook 是很有前途的项目,合理的使用了很多,如: Operator、CRD 等重要的扩展特性。大家可以先去了解一下这个项目。

最后,今天我们从 0 到 1 搭建 kubernetes 集群就算是介绍完了。

如有不对的地方,欢迎各位大佬指正。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
14天前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
95 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
14天前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
29 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
14天前
|
存储 Kubernetes 测试技术
k8s使用pvc,pv,sc关联ceph集群
文章介绍了如何在Kubernetes中使用PersistentVolumeClaim (PVC)、PersistentVolume (PV) 和StorageClass (SC) 来关联Ceph集群,包括创建Ceph镜像、配置访问密钥、删除默认存储类、编写和应用资源清单、创建资源以及进行访问测试的步骤。同时,还提供了如何使用RBD动态存储类来关联Ceph集群的指南。
29 7
|
14天前
|
存储 Kubernetes 数据安全/隐私保护
k8s对接ceph集群的分布式文件系统CephFS
文章介绍了如何在Kubernetes集群中使用CephFS作为持久化存储,包括通过secretFile和secretRef两种方式进行认证和配置。
22 5
|
14天前
|
Kubernetes 负载均衡 应用服务中间件
kubeadm快速构建K8S1.28.1高可用集群
关于如何使用kubeadm快速构建Kubernetes 1.28.1高可用集群的详细教程。
32 2
|
14天前
|
Kubernetes Linux API
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
该博客文章详细介绍了在CentOS 7.6操作系统上使用kubeadm工具部署kubernetes 1.17.2版本的测试集群的过程,包括主机环境准备、安装Docker、配置kubelet、初始化集群、添加节点、部署网络插件以及配置k8s node节点管理api server服务器。
45 0
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
|
17天前
|
API UED 开发者
超实用技巧大放送:彻底革新你的WinForms应用,从流畅动画到丝滑交互设计,全面解析如何在保证性能的同时大幅提升用户体验,让软件操作变得赏心悦目不再是梦!
【8月更文挑战第31天】在Windows平台上,使用WinForms框架开发应用程序时,如何在保持性能的同时提升用户界面的吸引力和响应性是一个常见挑战。本文探讨了在不牺牲性能的前提下实现流畅动画与交互设计的最佳实践,包括使用BackgroundWorker处理耗时任务、利用Timer控件创建简单动画,以及使用Graphics类绘制自定义图形。通过具体示例代码展示了这些技术的应用,帮助开发者显著改善用户体验,使应用程序更加吸引人和易于使用。
36 0
|
17天前
|
运维 Kubernetes Cloud Native
探索云原生:Kubernetes集群的部署与管理
【8月更文挑战第31天】 本文将带领读者深入了解云原生技术,特别是以Kubernetes为核心的集群部署和管理。文章不仅介绍了Kubernetes的基础概念和架构,还通过实际的代码示例展示了如何在云平台上搭建一个Kubernetes集群。我们将从基础的安装步骤到高级的服务部署,一步步揭示如何利用Kubernetes来简化容器化应用的管理与扩展。无论你是云原生新手还是希望提升现有技能的开发者,这篇文章都将成为你实践云原生技术的宝贵指南。
|
17天前
|
Kubernetes Cloud Native 应用服务中间件
云原生之旅:构建你的首个Kubernetes集群
【8月更文挑战第31天】在这个数字化迅速演进的时代,云原生技术如同星辰般璀璨。它不仅是企业数字化转型的引擎,更是开发者们探索创新的乐园。本文将带你开启一场云原生的奇妙旅程,从零开始,一步步构建属于你自己的Kubernetes集群。想象一下,当你的应用在云端自如地伸缩、滚动更新时,那份成就感和掌控感,是不是已经让你跃跃欲试了呢?那就让我们开始吧!
|
17天前
|
Kubernetes Cloud Native JavaScript
云原生之旅:Kubernetes 集群搭建与应用部署实践
【8月更文挑战第31天】云原生技术正在改变软件开发和运维的方式,而Kubernetes作为其核心组件之一,提供了一个强大的平台来编排容器化的应用。本文将引导你了解如何搭建一个基本的Kubernetes集群,并通过一个简单的Node.js应用示例,展示如何在集群中部署和管理应用。我们将从零开始,逐步构建起对Kubernetes的直观理解,并在实践中学习其核心概念。