首页 > 其他分享 >第64篇 Kubernetes的简单介绍

第64篇 Kubernetes的简单介绍

时间:2024-12-06 12:12:59浏览次数:3  
标签:kubectl k3s Kubernetes multipass -- get nginx 64 简单

1.什么是Kubernetes

Kubernetes是⼀个开源的容器编排引擎,可以⽤来管理容器化的应⽤,包括容器的⾃动化的部署、扩容、缩容、升级、回滚等等,它是Google在2014年开源的⼀个项⽬,它的前身是Google内部的Borg系统。

2.为什么要使用Kubernetes

在Kubernetes出现之前,我们⼀般都是使⽤Docker来管理容器化的应⽤,但是Docker只是⼀个单机的容器管理⼯具,它只能管理单个节点上的容器,当我们的应⽤程序需要运⾏在多个节点上的时候,就需要使⽤⼀些其他的⼯具来管理这些节点,⽐如Docker Swarm、Mesos、Kubernetes等等,这些⼯具都是容器编排引擎,它们可以⽤来管理多个节点上的容器,但是它们之间也有⼀些区别,⽐如Docker Swarm是Docker官⽅提供的⼀个容器编排引擎,它的功能⽐较简单,适合于⼀些⼩型的、简单的场景,⽽Mesos和Kubernetes则是⽐较复杂的容器编排引擎,Mesos是Apache基⾦会的⼀个开源项⽬,⽽Kubernetes是Google在2014年开源的,⽬前已经成为了CNCF(Cloud Native Computing Foundation)的⼀个顶级项⽬,基本上已经成为了容器编排引擎的事实标准了。

3.使⽤minikube搭建kubernetes集群环境

minikube是⼀个轻量级的kubernetes集群环境,
可以⽤来在本地快速搭建⼀个单节点的kubernetes集群,

3.1 安装minikube

minikube的安装:

# macOS
brew install minikube
# Windows
choco install minikube
# Linux
curl -LO
https://storage.googleapis.com/minikube/releases/latest/minikubelinux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

也可以到官⽹直接下载安装包来安装:https://minikube.sigs.k8s.io/docs/start/

3.2 启动minikube

# 启动minikube
minikube start

4.使⽤Multipass和k3s搭建kubernetes集群环境

minikube只能⽤来在本地搭建⼀个单节点的kubernetes集群环境,
下⾯介绍如何使⽤Multipass和k3s来搭建⼀个多节点的kubernetes集群环境,

4.1 Multipass介绍

Multipass是⼀个轻量级的虚拟机管理⼯具,
可以⽤来在本地快速创建和管理虚拟机,
相⽐于VirtualBox或者VMware这样的虚拟机管理⼯具,
Multipass更加轻量快速,
⽽且它还提供了⼀些命令⾏⼯具来⽅便我们管理虚拟机。
官⽅⽹址: https://Multipass.run/

4.1.1 安装Multipass

# macOS
brew install multipass
# Windows
choco install multipass
# Linux
sudo snap install multipass

4.1.2 Multipass常⽤命令

关于Multipass的⼀些常⽤命令我们可以通过 multipass help 来查看,
这⾥⼤家只需要记住⼏个常⽤的命令就可以了,

# 查看帮助
multipass help
multipass help <command>
# 创建⼀个名字叫做k3s的虚拟机
multipass launch --name k3s
# 在虚拟机中执⾏命令
multipass exec k3s -- ls -l
# 进⼊虚拟机并执⾏shell
multipass shell k3s
# 查看虚拟机的信息
multipass info k3s
# 停⽌虚拟机
multipass stop k3s
# 启动虚拟机
multipass start k3s
# 删除虚拟机
multipass delete k3s
# 清理虚拟机
multipass purge
# 查看虚拟机列表
multipass list
# 挂载⽬录(将本地的~/kubernetes/master⽬录挂载到虚拟机中的~/master⽬录)
multipass mount ~/kubernetes/master master:~/master

Multipass有个问题,每次M1芯⽚的Mac升级之后Multipass的虚拟机都会被删除,不知道⼤家有没有遇到类似的问题。

# 镜像位置
/var/root/Library/Application Support/multipassd/qemu/vault/instances
# 配置⽂件
/var/root/Library/Application Support/multipassd/qemu/multipassd-vminstances.json

4.2 k3s介绍

k3s 是⼀个轻量级的Kubernetes发⾏版,它是 Rancher Labs 推出的⼀个开源项⽬,
旨在简化Kubernetes的安装和维护,同时它还是CNCF认证的Kubernetes发⾏版。

4.2.1 创建和配置master节点

⾸先我们需要使⽤multipass创建⼀个名字叫做k3s的虚拟机,

multipass launch --name k3s --cpus 2 --memory 8G --disk 10G

虚拟机创建完成之后,可以配置SSH密钥登录,不过这⼀步并不是必须的,
即使不配置也可以通过 multipass exec 或者 multipass shell 命令来进⼊虚拟机,然后我们需要在master节点上安装k3s,

使⽤k3s搭建kubernetes集群⾮常简单,只需要执⾏⼀条命令就可以在当前节点上安装k3s,打开刚刚创建的k3s虚拟机,执⾏下⾯的命令就可以安装⼀个k3s的master节点,

# 安装k3s的master节点
curl -sfL https://get.k3s.io | sh -

国内⽤户可以换成下⾯的命令,使⽤ranher的镜像源来安装:

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

安装完成之后,可以通过 kubectl 命令来查看集群的状态,

sudo kubectl get nodes

4.2.2 创建和配置worker节点

接下来需要在这个master节点上获取⼀个token,⽤来作为创建worker节点时的⼀个认证凭证,
它保存在 /var/lib/rancher/k3s/server/node-token 这个⽂件⾥⾯,我们可以使⽤ sudo cat 命令来查看⼀下这个⽂件中的内容,

sudo cat /var/lib/rancher/k3s/server/node-token

将TOKEN保存到⼀个环境变量中

TOKEN=$(multipass exec k3s sudo cat /var/lib/rancher/k3s/server/nodetoken)

保存master节点的IP地址

MASTER_IP=$(multipass info k3s | grep IPv4 | awk '{print $2}')

确认:

echo $MASTER_IP

使⽤刚刚的 TOKEN 和 MASTER_IP 来创建两个worker节点并把它们加⼊到集群中

# 创建两个worker节点的虚拟机
multipass launch --name worker1 --cpus 2 --memory 8G --disk 10G
multipass launch --name worker2 --cpus 2 --memory 8G --disk 10G
# 在worker节点虚拟机上安装k3s
for f in 1 2; do
 multipass exec worker$f -- bash -c "curl -sfL https://ranchermirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn 
K3S_URL=\"https://$MASTER_IP:6443\" K3S_TOKEN=\"$TOKEN\" sh -"
done

这样就完成了⼀个多节点的kubernetes集群的搭建。

5.在线实验环境

Killercoda
Play-With-K8s

6.kubectl常⽤命令

6.1 基础使用

# 查看帮助
kubectl --help
# 查看API版本
kubectl api-versions
# 查看集群信息
kubectl cluster-info

6.2 资源的创建和运行

# 创建并运⾏⼀个指定的镜像
kubectl run NAME --image=image [params...]
# e.g. 创建并运⾏⼀个名字为nginx的Pod
kubectl run nginx --image=nginx
# 根据YAML配置⽂件或者标准输⼊创建资源
kubectl create RESOURCE
# e.g.
# 根据nginx.yaml配置⽂件创建资源
kubectl create -f nginx.yaml
# 根据URL创建资源
kubectl create -f https://k8s.io/examples/application/deployment.yaml
# 根据⽬录下的所有配置⽂件创建资源
kubectl create -f ./dir
# 通过⽂件名或标准输⼊配置资源
kubectl apply -f (-k DIRECTORY | -f FILENAME | stdin)
# e.g.
# 根据nginx.yaml配置⽂件创建资源
kubectl apply -f nginx.yaml

6.3 查看资源信息

# 查看集群中某⼀类型的资源
kubectl get RESOURCE
# 其中,RESOURCE可以是以下类型:
kubectl get pods / po # 查看Pod
kubectl get svc # 查看Service
kubectl get deploy # 查看Deployment
kubectl get rs # 查看ReplicaSet
kubectl get cm # 查看ConfigMap
kubectl get secret # 查看Secret
kubectl get ing # 查看Ingress
kubectl get pv # 查看PersistentVolume
kubectl get pvc # 查看PersistentVolumeClaim
kubectl get ns # 查看Namespace
kubectl get node # 查看Node
kubectl get all # 查看所有资源
# 后⾯还可以加上 -o wide 参数来查看更多信息
kubectl get pods -o wide
# 查看某⼀类型资源的详细信息
kubectl describe RESOURCE NAME
# e.g. 查看名字为nginx的Pod的详细信息
kubectl describe pod nginx

6.4 资源的修改、删除和清理

# 更新某个资源的标签
kubectl label RESOURCE NAME KEY_1=VALUE_1 ... KEY_N=VALUE_N
# e.g. 更新名字为nginx的Pod的标签
kubectl label pod nginx app=nginx
# 删除某个资源
kubectl delete RESOURCE NAME
# e.g. 删除名字为nginx的Pod
kubectl delete pod nginx
# 删除某个资源的所有实例
kubectl delete RESOURCE --all
# e.g. 删除所有Pod
kubectl delete pod --all
# 根据YAML配置⽂件删除资源
kubectl delete -f FILENAME
# e.g. 根据nginx.yaml配置⽂件删除资源
kubectl delete -f nginx.yaml
# 设置某个资源的副本数
kubectl scale --replicas=COUNT RESOURCE NAME
# e.g. 设置名字为nginx的Deployment的副本数为3
kubectl scale --replicas=3 deployment/nginx
# 根据配置⽂件或者标准输⼊替换某个资源
kubectl replace -f FILENAME
# e.g. 根据nginx.yaml配置⽂件替换名字为nginx的Deployment
kubectl replace -f nginx.yaml

6.5 调试和交互

# 进⼊某个Pod的容器中
kubectl exec [-it] POD [-c CONTAINER] -- COMMAND [args...]
# e.g. 进⼊名字为nginx的Pod的容器中,并执⾏/bin/bash命令
kubectl exec -it nginx -- /bin/bash
# 查看某个Pod的⽇志
kubectl logs [-f] [-p] [-c CONTAINER] POD [-n NAMESPACE]
# e.g. 查看名字为nginx的Pod的⽇志
kubectl logs nginx
# 将某个Pod的端⼝转发到本地
kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...
[LOCAL_PORT_N:]REMOTE_PORT_N]
# e.g. 将名字为nginx的Pod的80端⼝转发到本地的8080端⼝
kubectl port-forward nginx 8080:80
# 连接到现有的某个Pod(将某个Pod的标准输⼊输出转发到本地)
kubectl attach POD -c CONTAINER
# e.g. 将名字为nginx的Pod的标准输⼊输出转发到本地
kubectl attach nginx
# 运⾏某个Pod的命令
kubectl run NAME --image=image -- COMMAND [args...]
# e.g. 运⾏名字为nginx的Pod
kubectl run nginx --image=nginx -- /bin/bash

7.Portainer的安装和使⽤

Portainer 是⼀个轻量级的容器管理⼯具,
可以⽤来管理Docker和Kubernetes,
它提供了⼀个Web界⾯来⽅便我们管理容器,
官⽅⽹址: https://www.portainer.io/

7.1 安装Portainer

# 创建⼀个名字叫做portainer的虚拟机
multipass launch --name portainer --cpus 2 --memory 8G --disk 10G

当然也可以直接安装在我们刚刚创建的master节点上,

# 在master节点上安装portainer,并将其暴露在NodePort 30777上
kubectl apply -n portainer -f https://downloads.portainer.io/ce2-
19/portainer.yaml

或者使⽤Helm安装

# 使⽤Helm安装Portainer
helm upgrade --install --create-namespace -n portainer portainer 
portainer/portainer --set tls.force=true

然后直接访问 https://localhost:30779/ 或者 http://localhost:30777/ 就可以了,

8.Helm的安装和使⽤

Helm 是⼀个Kubernetes的包管理⼯具,
可以⽤来管理Kubernetes的应⽤,
它提供了⼀个命令⾏⼯具来⽅便我们管理Kubernetes的应⽤,
官⽅⽹址: https://helm.sh/

8.1 安装Helm

使⽤包管理器安装:

# macOS
brew install helm
# Windows
choco install kubernetes-helm
# 或者
scoop install helm
# Linux(Debian/Ubuntu)
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee
/usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signedby=/usr/share/keyrings/helm.gpg] 
https://baltocdn.com/helm/stable/debian/ all main" | sudo tee
/etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
# Linux(CentOS/Fedora)
sudo dnf install helm
# Linux(Snap)
sudo snap install helm --classic
# Linux(FreeBSD)
pkg install helm

使⽤脚本安装

$ curl -fsSL -o get_helm.sh 
https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh

或者

curl https://raw.githubusercontent.com/helm/helm/main/scripts/gethelm-3 | bash

标签:kubectl,k3s,Kubernetes,multipass,--,get,nginx,64,简单
From: https://www.cnblogs.com/chenshibao/p/18588544

相关文章

  • java敏感词检测 简单实现
    模仿网上的dfa算法,感觉自己写的处理方法效率不行,记录一下,总归是自己写的下面是实体类packagecom.htht.business.utils;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;/***@authorlinjunwei*@version2024/......
  • 使用 Go 语言实现简单的文字识别(OCR)
    随着人工智能技术的迅猛发展,文字识别(OCR,OpticalCharacterRecognition)已经广泛应用于文档扫描、自动化数据输入等领域。在这篇文章中,我们将通过Go语言实现一个简单的文字识别程序,来提取图片中的文字。为了方便操作,我们将使用GoCV库,这是一个基于OpenCV的Go语言绑定,提供了......
  • 使用 Dart 实现简单的文字识别程序
    文字识别(OpticalCharacterRecognition,OCR)是计算机视觉中的一种技术,通过将图片中的文字提取为可编辑的文本,使得计算机能够理解图像中的信息。在这篇文章中,我们将用Dart语言实现一个简单的文字识别程序。为了简化工作,我们将使用Dart的第三方库firebase_ml_vision来实现O......
  • django在线音乐网站-计算机毕业设计源码11764
    摘要本文旨在研究基于Python的Django+MySQL和Vue.js框架的在线音乐网站的设计与实现,旨在提供一个功能完善、用户友好且具有交互性的音乐分享和播放平台。随着互联网技术的不断发展,用户对于多样化音乐的需求也越来越高。传统的音乐分享方式存在版权管理、获取途径有限等问题,需......
  • BUUCTF Pwn jarvisoj_level2_x64 题解
    1.下载checksec64位用IDA64打开SHIFT+F12查找字符串找到了binsh函数里面也有system进主函数看看看到了栈溢出漏洞这是64位程序所以构造ROP链时要用rdi传参+用ret栈平衡找到这两个的地址:构造exp:运行得到flag  flag{4b1340f5-06be-4377-9630-fd2c77f016......
  • 洛谷题单指南-线段树-P6492 [COCI2010-2011#6] STEP
    原题链接:https://www.luogu.com.cn/problem/P6492题意解读:一个序列,初始L,可以指定一个位置修改,L修改成R,R修改成L,可以令L=0,R=1,然后每次修改后输出序列最长不连续0、1(0/1交替出现)的长度。解题思路:序列支持单点修改(0->1,1->0),区间查询(最长不连续0、1长度),因此可以采用线段树,不需要懒标......
  • 超简单!动手搭建‘仲景’中医药大模型,体验线上中医问诊
    得益于大模型技术的发展,中医的传承与发展形式也得到了创新,目前已经有多个中医药大语言模型公开亮相。国内的首个中医药大语言模型是由复旦大学和同济大学联合开发的“仲景”中医药大模型(CMLM-ZhongJing)。仲景中医大语言模型融入了多项创新技术,称得上是一个真正意义上......
  • 处理简单验证码(LOW版)
    处理简单验证码(LOW)创建时间:2024年2月28日背景:在公司项目中,我们面临一个问题:需要在某个平台上实现自动登录,以便在我们的平台上使用,从而下载所需数据。针对这一需求,我们提出了以下思路:观察二维码图片,我们发现它们通常以白色为背景,而验证码部分被一条不规则的黑色线条分隔。基于......
  • jQuery简单带记事功能的日历插件
    e-calendar是一款jquery简单带记事功能的日历插件。通过该jQuery日历插件你可以记录或设置某天某个时刻发生的事情,具有工作备忘录的功能。通过简单的参数设置你就可以定制该日历插件的外观。 在线演示 下载  使用方法要使用该jQuery日历插件首先引入jQuery和jquery.e-......
  • 【开源】A064—基于JAVA的民族婚纱预定系统的设计与实现
    ......