首页 > 其他分享 >云原生|实战:快速搭一个Kubernetes集群(一)

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

时间:2024-04-30 11:33:21浏览次数:23  
标签:原生 kubectl Kubernetes k3s sudo 集群 master kube

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确实方便许多。

标签:原生,kubectl,Kubernetes,k3s,sudo,集群,master,kube
From: https://www.cnblogs.com/exd1189/p/18167701

相关文章

  • 云原生二十篇|Kubernetes核心原理
    本文主要介绍k8s的核心原理,包括浅析各个模块的运行逻辑和k8s中的网络通讯。第一部分:模块 <imgsrc="https://pic2.zhimg.com/v2-795889f97336ebfcb89bed1e712ed0a1_b.jpg"data-caption=""data-size="normal"data-rawwidth="1080"data-rawheight="488"......
  • 云原生周刊:K8s 中的服务和网络 | 2024.4.29
    开源项目推荐k8s-image-swapperk8s-image-swapper是Kubernetes的一个变更Webhook,它将镜像下载到自己的镜像仓库,并将镜像指向该新位置。它是dockerpull-throughproxy的一个替代方案。KubeIPv2KubeIPv2是DoiTKubeIPv1-main开源项目的全面改进版本,最初由AvivLau......
  • openGauss MOT查询原生编译_JIT
    MOT查询原生编译(JIT)MOT使您可以在执行之前以原生格式(使用PREPARE语句)准备并分析预编译的完整查询。这种本机格式以后可以更有效地执行(使用EXECUTE命令)。这种类型的执行效率要高得多,因为在执行期间,本机格式绕过了多个数据库处理层。这种分工避免了重复的解析分析操作。LiteExecu......
  • openGauss 查询原生编译
    查询原生编译MOT的另一个特性是,在预编译的完整查询需要执行之前,能够以原生格式(使用PREPARE语句)准备并解析这些查询。这种原生格式方便后续更有效地执行(使用EXECUTE命令)。这种执行类型速度要快得多,因为原生格式在执行期间绕过多个数据库处理层,从而获得更好地性能。这种分工避免......
  • hdp2.4 -- hbase集群replication
    liststatuslist_namespace list_peers,list_replicated_tables主节点create'replication_test','f1','f2'1hbase(main):011:0>put'replication_test','rk0001','f1:name','zhanzongxin1'......
  • 1-Linux集群搭建,分发脚本,ssh免密登录
    Linux集群部署集群规划模板机安装创建完成后全部打开并登录root账户修改克隆主机名vim/etc/sysconfig/network-scripts/ifcfg-ens33esc退出并输入:wq保存按i修改IPADDR为192.168.10.101/192.168.10.102/192.168.10.103vim/etc/hostname按i修改名字......
  • openGauss MOT查询原生编译_JIT
    MOT查询原生编译(JIT)MOT使您可以在执行之前以原生格式(使用PREPARE语句)准备并分析预编译的完整查询。这种本机格式以后可以更有效地执行(使用EXECUTE命令)。这种类型的执行效率要高得多,因为在执行期间,本机格式绕过了多个数据库处理层。这种分工避免了重复的解析分析操作。LiteExecu......
  • openGauss 查询原生编译
    查询原生编译MOT的另一个特性是,在预编译的完整查询需要执行之前,能够以原生格式(使用PREPARE语句)准备并解析这些查询。这种原生格式方便后续更有效地执行(使用EXECUTE命令)。这种执行类型速度要快得多,因为原生格式在执行期间绕过多个数据库处理层,从而获得更好地性能。这种分工避免......
  • 华为云云原生FinOps解决方案,释放云原生最大价值
    华为云云原生FinOps通过可视化的成本洞察和成本优化,帮助用户精细用云以提升单位成本的资源利用率,实现降本增效目标企业上云现状:上云趋势持续加深,但云上开支存在显著浪费根据Flexer2024年最新的一项调查显示,当前有超过70%的企业重度使用云服务,而这个数据去年是65%。由此可见,越......
  • 【kubernetes】kubernetes二次开发
    Kubernetes源码二次开发Kubernetes源码二次开发通常涉及以下步骤:环境准备:安装和配置Go环境,确保Go版本与Kubernetes项目兼容。获取源码:从GitHub克隆Kubernetes仓库到本地。设置工作环境:通过make命令设置编译环境。修改源码:根据需求修改Kubernetes源码。编译:使......