前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云原生|实战:快速搭一个Kubernetes集群(一)

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

作者头像
琉璃康康
发布2023-12-06 17:39:01
2920
发布2023-12-06 17:39:01
举报
文章被收录于专栏:七禾页话七禾页话

@七禾页话

学习永无止境,记录相伴相随! —— 琉璃康康

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后一步一步安装即可。

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

代码语言:javascript
复制
###左右滑动
sudo apt update
sudo apt upgrade -y
sudo reboot
sudo apt install -y curl wget
安装K3s Server

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

代码语言:javascript
复制
###左右滑动
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的状态:

代码语言:javascript
复制
###左右滑动
#安装完成后查看状态
systemctl status k3s

@七禾页话

无法运行kubectl?

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

代码语言:javascript
复制
###左右滑动
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

代码语言:javascript
复制
###左右滑动
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文件中即可:

代码语言:javascript
复制
###左右滑动
#### bash completion for kubectl
echo "source <(kubectl completion bash)" >> $HOME/.bashrc
source $HOME/.bashrc

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

代码语言:javascript
复制
###左右滑动
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
source /etc/bash_completion.d/kubectl

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

代码语言:javascript
复制
###左右滑动
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的修改):

代码语言:javascript
复制
###左右滑动
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确实方便许多。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 七禾页话 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装OS并初始化
  • 安装K3s Server
  • 无法运行kubectl?
  • kubectl的tab补全
  • 我的VM模版
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档