云原生|实战:快速搭一个Kubernetes集群(一)

Kubernetes从2014年正是发布到现在已经快10个年头了,已经成为容器编排的领导者,而基于Kubernetes的开源项目,各个ICT公司都开启了自己的发行版本,这些版本通常针对不同的使用场景和需求进行了特定的优化,旨在简化Kubernetes的安装、配置和管理过程,以下是一些主要的Kubernetes发行版本:

Minikube:适用于在个人电脑上本地运行单节点Kubernetes集群的工具,主要用于学习和开发目的。
Kubeadm:官方工具,用于快速部署标准的Kubernetes集群。它适合于生产环境和更复杂的需求。
MicroK8s:由Canonical开发的轻量级Kubernetes发行版,适用于边缘计算、IoT和微服务环境。
K3s:由Rancher Labs开发的轻量级Kubernetes发行版,适用于边缘计算和资源受限的环境。
OpenShift:Red Hat提供的企业级Kubernetes发行版,包含了开发者工具和CI/CD功能,适用于更复杂的企业应用。
Rancher:一个企业级容器管理平台,提供了对多个Kubernetes集群的管理功能,包括图形化界面。
Amazon EKS:Elastic Kubernetes Service是Amazon家的Kubernetes平台,允许在AWS云上运行Kubernetes集群和应用。
Google GKE:Google自家的Kubernetes全称叫做Google Kubernetes Engine,专为在GCP上运行Kubernetes集群而设计。
Azure AKS:Azure Kubernetes Service作为Microsoft的云原生平台,提供了托管Kubernetes服务,支持在Azure云上轻松部署和管理Kubernetes集群。
技术学习离不开实验,所以搭建一套小型的Kubernetes是学习的第一步,虽然Kubernetes官方推荐的是使用Minikube,但是我更喜欢使用更加轻量的k3s做实验。

什么是k3s呢?我们知道k8s是因为单词“Kubernetes”中从“K”到“s”之间有8个字母,因此缩写为“K8s”;而K3s是Rancher推出的轻量级Kubernetes发行版,K3s的“3”并不代表字母数量,而意在传达这是一个“更小、更简化”的Kubernetes版本。

@七禾页话
K3s作为轻量级发型版本,资源需求如下,可以说是Kubernetes里资源需求非常小的存在了:

Spec Minimum Recommended
CPU 1 core 2 cores
RAM 512 MB 1 GB
当然如果想做一个高可用的,还是要根据业务需求来增加资源的:

Deployment Size Nodes VCPUs RAM
Small Up to 10 2 4 GB
Medium Up to 100 4 8 GB
Large Up to 250 8 16 GB
X-Large Up to 500 16 32 GB
XX-Large 500+ 32 64 GB
在我的实验中,使用了如下的资源:

VCPUs RAM Disk
2 4 GB 40 GB
环境是使用VMWare的虚拟机,基础系统选择的是Ubuntu 22.04.3这个版本。

安装OS并初始化
首先是系统安装,VMWare里加载Ubuntu ISO后一步一步安装即可。

系统安装完成后需要做一些初始化更新:

左右滑动

sudo apt update
sudo apt upgrade -y
sudo reboot
sudo apt install -y curl wget
安装K3s Server
初始化完成后,安装K3s的Server节点,也就是Kubernetes里作为Controller的master节点:

左右滑动

curl -sfL https://get.k3s.io | sh -

如果是大陆用户可以使用如下命令

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

@七禾页话
安装完成后可以查看k3s.service的状态:

左右滑动

安装完成后查看状态

systemctl status k3s

@七禾页话
无法运行kubectl?
这样K3s的controller就安装好了,但是此时用普通用户运行kubectl的命令会失败:

左右滑动

ubuntu@master:~$ kubectl get pod -A
WARN[0000] Unable to read /etc/rancher/k3s/k3s.yaml, please start server with --write-kubeconfig-mode to modify kube config permissions
error: error loading config file "/etc/rancher/k3s/k3s.yaml": open /etc/rancher/k3s/k3s.yaml: permission denied
ubuntu@master:~$
一个是按照提示通过--write-kubeconfig-mode来操作,一个是直接将/etc/rancher/k3s/k3s.yaml复制到用户的.kube文件夹并重命名为config,然后需要修改权限成600,并声明给环境变量KUBECONFIG:

左右滑动

mkdir ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config && sudo chown $USER ~/.kube/config
sudo chmod 600 ~/.kube/config && export KUBECONFIG=~/.kube/config
echo "export KUBECONFIG=~/.kube/config" >> .bashrc
kubectl的tab补全
完成上述步骤之后,可以运行kubectl命令了,但是不够丝滑,因为使用tab键不能自动补全。

一个是只针对某一个用户,只需要将kubectl的bash complete的声明放到用户的.bashrc文件中即可:

左右滑动

bash completion for kubectl

echo "source <(kubectl completion bash)" >> $HOME/.bashrc
source $HOME/.bashrc
如果想一劳永逸对所有用户都进行tab自动补全,需要将kubectl的bash completion内容写到/etc/bash_completion.d/kubectl这个文件中,下边的例子是当前用户有sudo权限,然后通过一行命令直接写入到kubectl文件中:

左右滑动

kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
source /etc/bash_completion.d/kubectl
之后就可以很丝滑的运行kubectl并使用tab键补全了:

左右滑动

ubuntu@master:~$ kubectl
annotate (Update the annotations on a resource)
api-resources (Print the supported API resources on the server)
api-versions (Print the supported API versions on the server, in the form of "group/version")
...........................
taint (Update the taints on one or more nodes)
top (Display resource (CPU/memory) usage)
uncordon (Mark node as schedulable)
version (Print the client and server version information)
wait (Experimental: Wait for a specific condition on one or many resources)
ubuntu@master:~$ kubectl get
addons.k3s.cattle.io ingressclasses.networking.k8s.io priorityclasses.scheduling.k8s.io
.................
helmcharts.helm.cattle.io pods validatingwebhookconfigurations.admissionregistration.k8s.io
horizontalpodautoscalers.autoscaling podtemplates volumeattachments.storage.k8s.io
ubuntu@master:~$ kubectl get pod -n
default kube-node-lease kube-public kube-system
ubuntu@master:~$ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-77ccd57875-qhxgz 1/1 Running 0 3m30s
kube-system local-path-provisioner-957fdf8bc-6n764 1/1 Running 0 3m30s
kube-system helm-install-traefik-crd-66n28 0/1 Completed 0 3m31s
kube-system metrics-server-648b5df564-j88vq 1/1 Running 0 3m30s
kube-system helm-install-traefik-9hgs6 0/1 Completed 2 3m31s
kube-system svclb-traefik-4f456090-5dvnb 2/2 Running 0 2m7s
kube-system traefik-768bdcdcdd-rcsjd 1/1 Running 0 2m7s
ubuntu@master:~$
我的VM模版
那么接下来如果你不想安装环境,可以直接私信回复k3s获取安装好的虚拟机(VM)模版,直接下载整个k3s的文件夹:

如果没有安装WMware Workstation,可以尝试使用分享的17.0.0,也可以直接到VMWare官方下载最新的的版本。

下载后文件夹结构不要动,需要注意的是cmd文件夹中的bat脚本可以直接双击运行,其中第一个最重要(脚本是之前参加一个培训学习到的,使用中又修改了下,比如加入了hostname的修改):

左右滑动

1.clone-all-vms.bat:根据clonevms的参数值将template VM复制成不同的VM,并修改其hostname,获取IP
克隆完会有三个新的VM,分别是master、worker1和worker2,如果想复制更多的VM,可以修改bat文件中的clonevms参数。

修改hostname是因为Kubernetes集群中的所有node不能有相同的hostname,否则无法加入到集群中,因此bat脚本中调用的Linux用户需要有sudo权限并且可以免密切换到sudo,我提供的template vm已经完成了所有的设定并且完成了apt更新,克隆完直接在master vm中安装k3s即可。

其他的bat脚本都是辅助,主要是VMWare多vm的管理用vmrun确实方便许多。

posted @ 2024-04-30 11:27  小白55  阅读(7)  评论(0编辑  收藏  举报