要想掌握kubernetes,kubectl必须玩得溜

news/2024/11/24 18:49:29/

文章目录

      • 一、kubectl的安装
      • 二、kubectl的配置
      • 三、kubectl连接集群
      • 四、应用程序部署和调试
      • 五、查看和查找资源
      • 六、容器和资源管理
      • 七、使用技巧

公众号: MCNU云原生,文章首发地,欢迎微信搜索关注,更多干货,第一时间掌握!

kubectl是一个命令行工具,用于与Kubernetes集群进行交互。它可以用于部署应用程序、管理容器、查看集群资源状态等。

要想熟练使用kubernetes,掌握kubectl的用法必不可少。本文列举一些kubectl的常见用法,以期学习以后能够熟练使用kubernetes。

一、kubectl的安装

基于Centos系统,x86架构,使用以下命令下载kubectl

[k8s@node1 ~]$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

如需下载某个指定的版本,请用指定版本号替换该命令的这一部分: $(curl -L -s https://dl.k8s.io/release/stable.txt),例如替换为1.27.1。

下载验证文件:

[k8s@node1 ~]$ curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"

对下载的软件进行验证:

[k8s@node1 ~]$ echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check
kubectl: OK

安装Kubectl

[k8s@node1 ~]$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

验证安装是否成功

[k8s@node1 ~]$ kubectl version --client
WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short.  Use --output=yaml|json to get the full version.
Client Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.1", GitCommit:"4c9411232e10168d7b050c49a1b59f6df9d7ea4b", GitTreeState:"clean", BuildDate:"2023-04-14T13:21:19Z", GoVersion:"go1.20.3", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v5.0.1

二、kubectl的配置

kubectl会读取配置信息,一般配置在 $HOME/.kube 目录下一个名为 config 的配置文件,也可以通过设置 KUBECONFIG 环境变量或设置 --kubeconfig来指定新的配置文件。

单机部署默认的配置文件内容如下:

apiVersion: v1
clusters:
- cluster:certificate-authority-data: xxxxxxxxxxx=(内容太长了,这里简略)server: https://api.crc.testing:6443name: api-crc-testing:6443
- cluster:certificate-authority: /home/k8s/.minikube/ca.crtextensions:- extension:last-update: Mon, 08 May 2023 20:47:13 CSTprovider: minikube.sigs.k8s.ioversion: v1.29.0name: cluster_infoserver: https://192.168.49.2:8443name: minikube
contexts:
- context:cluster: api-crc-testing:6443namespace: defaultuser: kubeadminname: crc-admin
- context:cluster: api-crc-testing:6443namespace: defaultuser: developername: crc-developer
- context:cluster: minikubeextensions:- extension:last-update: Mon, 08 May 2023 20:47:13 CSTprovider: minikube.sigs.k8s.ioversion: v1.29.0name: context_infonamespace: defaultuser: minikubename: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: developeruser:token: sha256~1Ou45NGf93f0wxOHwTdxRXbUQUS2KIY8muAWG7uqD8M
- name: kubeadminuser:token: sha256~TqzvApNboymi9QfgGI8bEzOEiE2h6ZA3ixenkJD67UI
- name: minikubeuser:client-certificate: /home/k8s/.minikube/profiles/minikube/client.crtclient-key: /home/k8s/.minikube/profiles/minikube/client.key

配置文件中列出了集群的相关信息,包括集群地址、证书、用户信息、context信息等,若要修改相关的信息可以修改此文件,注意做好备份。

如果要查看当前的kubectl配置,可以使用以下命令:

[k8s@node1 ~]$ kubectl config view

三、kubectl连接集群

kubectl通过kubeconfig来确定连接的集群的信息,在kubeconfig文件中,使用clusters字段添加集群配置,每个集群配置需要包括集群的名称、API服务器的地址和相关证书信息,如:

clusters:
- cluster:certificate-authority-data: xxxxxxxxxxx=(内容太长了,这里简略)server: https://api.crc.testing:6443name: api-crc-testing:6443
- cluster:certificate-authority: /home/k8s/.minikube/ca.crtextensions:- extension:last-update: Mon, 08 May 2023 20:47:13 CSTprovider: minikube.sigs.k8s.ioversion: v1.29.0name: cluster_infoserver: https://192.168.49.2:8443name: minikube

可以看到默认使用minikube安装以后有两个cluster,分别是api-crc-testing:6443minikube

在kubernetes使用context在指定cluster和用户的组合,从而确定连接到哪个集群。在kubernetes中还有namespace的概念,这里展开讲一下,有助于理解。

Context(上下文)是用来确定当前连接的Kubernetes集群和用户的组合。它包含了以下信息:

  • 集群(cluster):指定连接的Kubernetes集群的配置,包括API服务器的地址和相关证书信息。
  • 用户(user):指定连接集群所使用的用户的认证凭证信息。
  • 命名空间(namespace):可选项,指定在连接集群时默认使用的命名空间。

上下文的作用是确定了与集群的连接和身份验证信息,以及默认使用的命名空间。使用不同的上下文可以连接到不同的Kubernetes集群,并使用不同的用户身份进行操作。

Namespace(命名空间)则是用来在一个Kubernetes集群中对资源进行逻辑隔离和组织的机制。它允许将不同的资源(如Pod、Service、Deployment等)划分到不同的命名空间中,以实现资源的隔离和管理。

命名空间的作用是提供资源的逻辑隔离和资源管理。不同的命名空间中的资源相互隔离,具有相同名称的资源在不同的命名空间中可以存在。命名空间提供了一种将资源组织起来的方式,便于管理和控制访问。

以本地的minikube部署的集群为例,以下是默认的context和namespace的信息,表示连接到minikube集群,用户名也是minikube。

- context:cluster: minikubeextensions:- extension:last-update: Mon, 08 May 2023 20:47:13 CSTprovider: minikube.sigs.k8s.ioversion: v1.29.0name: context_infonamespace: defaultuser: minikubename: minikube

使用一下命令可以连接到Kubernetes集群:

kubectl config use-context <context-name>

其中,<context-name>是已经存在的Kubernetes集群的名称,以上面列出来的配置为例,集群中有一个context为minikube,只用相关信息后提示如下

[k8s@node1 ~]$ kubectl config use-context minikube
Switched to context "minikube".

使用以下命令可以查看集群的信息:

[k8s@node1 ~]$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.49.2:8443
CoreDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

使用以下命令获取所有的namespace

[k8s@node1 ~]$ kubectl get namespace
NAME              STATUS   AGE
default           Active   11m
kube-node-lease   Active   11m
kube-public       Active   11m
kube-system       Active   11m

使用以下命令获取所有的context

[k8s@node1 ~]$ kubectl config get-contexts
CURRENT   NAME            CLUSTER                AUTHINFO    NAMESPACEcrc-admin       api-crc-testing:6443   kubeadmin   defaultcrc-developer   api-crc-testing:6443   developer   default
*         minikube        minikube               minikube    default

四、应用程序部署和调试

部署应用程序:使用以下命令可以创建deployment,在Kubernetes集群上部署应用程序

$ kubectl create deployment <deployment-name> --image=<image-name>

其中,<deployment-name>是要创建的部署的名称,<image-name>是要使用的容器映像的名称。

kubectl还提供了apply通过定义kubernetes资源文件的方式来管理应用,所以还可以提供kubectl apply的方式来进行pod部署,例如:

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:name: busybox-sleep
spec:containers:- name: busyboximage: busybox:1.28args:- sleep- "1000000"
EOF

**调试应用程序:**部署完成以后可以使用以下命令进行调试验证

kubectl describe pod <pod-name>
kubectl logs <pod-name>

第一个命令可以获取指定Pod的详细信息,例如事件、容器状态、容器日志等。第二个命令可以查看指定Pod的日志。

将指定的部署公开为一个服务

$ kubectl expose deployment <deployment-name> --port=<port-number> --type=LoadBalancer

在指定Pod中打开一个交互式终端,可以连接到pod

$ kubectl exec -it <pod-name> -- /bin/bash

也可以使用attch挂接到某个容器中

$ kubectl attach my-pod -i

五、查看和查找资源

查看所有的node信息,列出了状态、角色等重点信息。

[k8s@node1 ~]$ kubectl get nodes
NAME       STATUS   ROLES                  AGE   VERSION
minikube   Ready    control-plane,master   46h   v1.23.8

查看Pod列表

$ kubectl get pods

查看所有的deployments

$ kubectl get deployments

查看某个deployment

$ kubectl get deployment my-dep

获取Kubernetes集群中所有服务的列表

$ kubectl get services

创建配置configmap,以下命令创建一个名为<config-name>的配置项,其中包含一个键值对。

$ kubectl create configmap <config-name> --from-literal=<key>=<value>

以下命令可以获取Kubernetes集群中所有配置项的列表。

$ kubectl get configmaps

列举出所有的pv持久卷

$ kubectl get pv

六、容器和资源管理

集群扩缩容

$ kubectl scale deployment <deployment-name> --replicas=<number-of-replicas>

其中,<deployment-name>是要扩缩容的部署的名称,<number-of-replicas>是要设置的副本数量。

升级应用程序

$ kubectl set image deployment/<deployment-name> <container-name>=<new-image>

其中,<deployment-name>是要升级的部署的名称,<container-name>是要升级的容器的名称,<new-image>是要使用的新容器映像的名称。

回滚应用程序到上一个版本

$ kubectl rollout undo deployment/frontend

回滚到特定版本

$ kubectl rollout undo deployment/frontend --to-revision=4

删除指定的资源

$ kubectl delete <resource-type> <resource-name>

其中,<resource-type>是要删除的资源的类型,例如poddeploymentservice等,<resource-name>是要删除的资源的名称。

七、使用技巧

1、在bash shell中实现命令自动补全

需要先安装bash-completion包

[k8s@node1 root]$ sudo yum install bash-completion

在终端执行以下命令:

[k8s@node1 ~]$ echo "source <(kubectl completion bash)" >> ~/.bashrc
[k8s@node1 ~]$ source ~/.bashrc

还可以为kubectl设置一个别名,例如设置为’k’

[k8s@node1 ~]$ alias k=kubectl
[k8s@node1 ~]$ complete -o default -F __start_kubectl k

验证是否生效,使用k别名获取contexts

[k8s@node1 ~]$ k config get-contexts
CURRENT   NAME            CLUSTER                AUTHINFO    NAMESPACEcrc-admin       api-crc-testing:6443   kubeadmin   defaultcrc-developer   api-crc-testing:6443   developer   default
*         minikube        minikube               minikube    default

2、控制输出的日志的详细程度

Kubectl 日志输出详细程度是通过 -v 或者 --v 来控制的,参数后跟一个数字表示日志的级别。

如果在操作过程中有失败的情况,为了定位原则,可以设置–v=5,代表跟踪级别的详细日志信息。

kubectl的功能非常强大,本文只列出了最常用的一部分操作,更多功能可以参照官方的指南。


http://www.ppmy.cn/news/111628.html

相关文章

【Vue3+TS项目】硅谷甄选day03--layout组件搭建+路由配置+左侧菜单搭建

一、路由配置 需要至少四个一级路由&#xff1a;主页、登入页、404页、任意路由&#xff08;指向404&#xff09; 安装路由插件&#xff1a;4版本 pnpm i vue-router src下新建文件夹views 分别创建404、login、home路由组件 src下新建router文件夹---包含index.ts和rout…

让仓库“零误差”,WMS仓库管理系统助力供应链升级

现代供应链的核心是以消费者和库存管理为中心&#xff0c;通过降低库存来提高产品的流通速度和供应链效率。而在信息技术快速发展的今天&#xff0c;企业的库存管理也面临着新的挑战&#xff1a; 1.仓库货品种类多&#xff0c;数量多&#xff0c;且摆放混乱&#xff0c;加大了查…

RISC-V IDE MRS使用笔记(八):实现局域网下的远程调试功能

RISC-V IDE MRS使用笔记(八)&#xff1a;实现局域网下的远程调试功能 1.原理介绍 MRS调试时上位机与硬件的通信基于gdb客户端与服务端的连接。调试时&#xff0c;首先启动openocd以挂载gdbserver的服务到指定端口上。通信建立后&#xff0c;监听到界面操作后以gdb指令的形式发…

HUAWEI华为笔记本平板电脑MateBook E 2019款高通版PAK-AL09原装出厂Win10ARM系统1809恢复原厂OEM系统

HUAWEI华为笔记本平板电脑MateBook E 2019款 高通850版8GB256GB(PAK-AL09)原装出厂Windows10ARM系统恢复原厂系统1809 系统自带所有驱动、Office办公软件、华为电脑管家等预装程序 链接&#xff1a;https://pan.baidu.com/s/1qNr33VtRNQShj9Jfg_0EIg?pwd3b31 提取码&#xf…

ubuntu1604安装网卡驱动 联想g510

联想g510安装ubuntu1604之后不能连接无线&#xff0c;怀疑是网卡驱动没有安装。解决步骤如下&#xff1a; 输入lspci查看网卡型号&#xff1a;即Network controller:本电脑网卡驱动为BCM43142利用手机数据线连接电脑&#xff0c;作为热点传输执行以下命令&#xff1a;sudo apt…

华为台式机擎云W515 PGUV-WBY0安装银河麒麟V10

1、公司有一台国产化电脑&#xff0c;型号是华为台式机擎云W515 PGUV-WBY0&#xff0c;处理器是麒麟990&#xff0c;架构是aarch64&#xff0c;由于上个离职人员使用过&#xff0c;所以现在需要重新安装操作系统。 2、下载系统镜像&#xff0c;这个台式机配套的操作系统是银河麒…

华为AP6050DN配置手册

华为AP6050DN配置手册 一、前期准备 1.需要POE供电模块、2根网线&#xff08;至少一根8芯供电用&#xff09;&#xff0c;一台电脑。提前下载Putty软件 2.POE的IN连电脑&#xff0c;OUT口链接AP。 3.配置电脑IP&#xff1a;169.254.1.*&#xff08;AP的默认IP是169.254.1.1…

【IT资讯】财联社:华为有望获Armv9架构CPU授权

ARM在5月25日发布了Cortex-X2、Cortex-A710、Cortex-A510等3款基于ARMv9的CPU架构&#xff0c;以及新的GPU架构Mali-G710、G610、G510、G310。而5月27日&#xff0c;财联社消息称&#xff0c;经过审查后&#xff0c;华为有望获得新架构的授权。 ARM在3月31日发布的Armv9架构&…