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

Posted by 琉璃康康 on December 6, 2023

@七禾页话

学习永无止境,记录相伴相随!

—— 琉璃康康

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

  1. Minikube:适用于在个人电脑上本地运行单节点Kubernetes集群的工具,主要用于学习和开发目的。
  2. Kubeadm:官方工具,用于快速部署标准的Kubernetes集群。它适合于生产环境和更复杂的需求。
  3. MicroK8s:由Canonical开发的轻量级Kubernetes发行版,适用于边缘计算、IoT和微服务环境。
  4. K3s:由Rancher Labs开发的轻量级Kubernetes发行版,适用于边缘计算和资源受限的环境。
  5. OpenShift:Red Hat提供的企业级Kubernetes发行版,包含了开发者工具和CI/CD功能,适用于更复杂的企业应用。
  6. Rancher:一个企业级容器管理平台,提供了对多个Kubernetes集群的管理功能,包括图形化界面。
  7. Amazon EKS:Elastic Kubernetes Service是Amazon家的Kubernetes平台,允许在AWS云上运行Kubernetes集群和应用。
  8. Google GKE:Google自家的Kubernetes全称叫做Google Kubernetes Engine,专为在GCP上运行Kubernetes集群而设计。
  9. 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后一步一步安装即可。

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

1
2
3
4
5
###左右滑动
sudo apt update
sudo apt upgrade -y
sudo reboot
sudo apt install -y curl wget

安装K3s Server

初始化完成后,安装K3s的Server节点,也就是Kubernetes里作为Controller的master节点:

1
2
3
4
5
###左右滑动
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的状态:

1
2
3
###左右滑动
#安装完成后查看状态
systemctl status k3s

@七禾页话

无法运行kubectl?

这样K3s的controller就安装好了,但是此时用普通用户运行kubectl的命令会失败:

1
2
3
4
5
###左右滑动
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

1
2
3
4
5
###左右滑动
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键不能自动补全。

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

1
2
3
4
###左右滑动
#### bash completion for kubectl
echo "source <(kubectl completion bash)" >> $HOME/.bashrc
source $HOME/.bashrc

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

1
2
3
###左右滑动
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
source /etc/bash_completion.d/kubectl

之后就可以很丝滑的运行kubectl并使用tab键补全了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
###左右滑动
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
2
###左右滑动
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确实方便许多。

以上,有想法欢迎留言来聊!


网络和应用

摄影和旅行

工作和生活

欢迎关注公众号:七禾页话(qiheyehk)