k8s容器云架构之dubbo微服务—K8S(02)管理核心资源的三种基本方法

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 博客地址:https://www.cnblogs.com/sseban哔哩哔哩:https://space.bilibili.com/394449264

管理k8s核心资源的三种基本方法:

目录

  • 系列文章说明
  • 管理k8s核心资源的三种基本方法:
  • 1 方法分类
  • 2 kubectl命令行工具
  • 2.0 增加kubectl自动补全
  • 2.1 get 查
  • 2.1.1 查看名称空间namespace
  • 2.1.2 查看namespace中的资源
  • 2.1.3 -o yaml查看资源配置清单详细信息
  • 2.2 创建删除名称空间
  • 2.3 管理POD控制器和POD
  • 2.4 service资源管理
  • 2.4.1 创建service资源
  • 2.4.2 扩容POD看service怎么调度
  • 2.5 explain查看属性的定义和用法
  • 3 统一资源配置清单
  • 3.1 语法格式
  • 3.1.1 学习方法
  • 3.2 初略用法
  • 3.2.1 查看已有资源的资源配置清单
  • 3.2.2 创建并应用资源配置清单
  • 3.2.3 修改资源配置清单
  • 3.2.4 删除资源配置清单

1 方法分类

  1. 陈述式--主要依赖命令行工具kubectl进行管理
  • 优点
    可以满足90%以上的使用场景
    对资源的增、删、查操作比较容易
  • 缺点
    命令冗长,复杂,难以记忆
    特定场景下,无法实现管理需求
    对资源的修改麻烦,需要patch来使用json串更改。
  1. 声明式-主要依赖统一资源配置清单进行管理
  2. GUI式-主要依赖图形化操作界面进行管理

2 kubectl命令行工具

kubectl中文命令说明

2.0 增加kubectl自动补全

二进制安装的k8s,kubectl工具没有自动补全功能(其他方式安装的未验证),可以使用以下方式开启命令自动补全

source <(kubectl completion bash)

2.1 get 查

2.1.1 查看名称空间namespace

~]# kubectl get namespaces
NAME              STATUS   AGE
default           Active   4d11h
kube-node-lease   Active   4d11h
kube-public       Active   4d11h
kube-system       Active   4d11h
# namespaces可以简写为ns
kubectl get ns
# 但不是所有资源都可以简写,所以我还是习惯tab补全名

2.1.2 查看namespace中的资源

get all查询所有资源

kubectl get all
# 默认是查询default名称空间的资源,查询其他名称空间,需要加 -n namespaces
kubectl get all -n kube-public

image.png

一般要养成习惯,get任何资源的时候,都要加上-n参数指定名称空间

get pods查询所有pod

podsecuritypolicies.extensions  
~]# kubectl get pods -n default 
NAME             READY   STATUS    RESTARTS   AGE
nginx-ds-p66qh   1/1     Running   0          2d10h

get nodes查询所有node节点

~]# kubectl get nodes -n default 
NAME                STATUS     ROLES         AGE     VERSION
hdss7-21.host.com   Ready      master,node   2d12h   v1.15.5
hdss7-22.host.com   NotReady   <none>        2d12h   v1.15.5

2.1.3 -o yaml查看资源配置清单详细信息

-o yaml 可以查看yaml格式的资源配置清单详情

# 查看POD的清单
~]# kubectl -n kube-public get pod nginx-dp-568f8dc55-jk6nb  -o yaml
# 查看deploy的清单
~]# kubectl -n kube-public get deploy nginx-dp -o yaml
# 查看service的清单
~]# kubectl -n kube-public get service -o yaml -n kube-public

2.2 创建删除名称空间

create namespace创建名称空间

~]# kubectl create namespace app
namespace/app created
~]# kubectl get namespaces 
NAME              STATUS   AGE
app               Active   16s
default           Active   4d11h
kube-node-lease   Active   4d11h
kube-public       Active   4d11h
kube-system       Active   4d11h

delete namespaces删除名称空间

~]# kubectl delete namespaces app
namespace "app" deleted
~]# kubectl get namespaces 
NAME              STATUS   AGE
default           Active   4d11h
kube-node-lease   Active   4d11h
kube-public       Active   4d11h
kube-system       Active   4d11h

2.3 管理POD控制器和POD

deployment类型的POD控制为例,关于POD控制器类型,请参考官网

创建POD控制器

kubectl create deployment nginx-dp --image=harbor.zq.com/public/nginx:v1.17.9 -n kube-public
~]# kubectl get deployments -n kube-public 
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
nginx-dp   1/1     1            1           18s
~]# kubectl get pod  -n kube-public 
NAME                       READY   STATUS    RESTARTS   AGE
nginx-dp-568f8dc55-9qt4j   1/1     Running   0          7m50s

-o wide查看扩展信息

# 查看POD控制器信息,比基础信息多出了镜像来源,选择器等
kubectl get deployments -o wide -n kube-public
# 查看POD信息,比基础信息多出了POD的IP地址,节点位置等,
kubectl get pod -o wide -n kube-public

image.png

describe查看资源详细信息

# 查看POD控制器详细信息
kubectl describe deployments nginx-dp -n kube-public
# 查看POD详细信息
kubectl describe pod nginx-dp-568f8dc55-9qt4j -n kube-public

exec进入某个POD

kubectl -n kube-public exec -it  nginx-dp-568f8dc55-9qt4j bash

用法与docker exec类似

scale 扩容POD

kubectl -n kube-public scale deployments nginx-dp --replicas=2

delete删除POD和POD控制器

~]# kubectl -n kube-public delete pods nginx-dp-568f8dc55-9qt4j 
pod "nginx-dp-568f8dc55-9qt4j" deleted
~]# kubectl -n kube-public get pods
NAME                       READY   STATUS    RESTARTS   AGE
nginx-dp-568f8dc55-hnrxr   1/1     Running   0          13s
~]# kubectl -n kube-public delete deployments nginx-dp 
deployment.extensions "nginx-dp" deleted
~]# kubectl -n kube-public get pods
No resources found.

在POD控制器存在的情况下,删除了POD,会由POD控制器再创建出新的POD

删除POD控制器后,对应的POD也会一并删除

2.4.1 创建service资源

~]# kubectl -n kube-public create deployment nginx-dp --image=harbor.zq.com/public/nginx:v1.17.9
deployment.apps/nginx-dp created
~]# kubectl -n kube-public expose deployment nginx-dp --port=80 
service/nginx-dp exposed
~]# kubectl -n kube-public get service 
NAME       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
nginx-dp   ClusterIP   192.168.94.73   <none>        80/TCP    45s

可以看到创建了一个VIP192.168.94.73,查看LVS信息,可以看到转发条目

[root@hdss7-21 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
......    
TCP  192.168.94.73:80 nq
  -> 172.7.21.3:80                Masq    1      0          0

2.4.2 扩容POD看service怎么调度

~]# kubectl -n kube-public scale deployment nginx-dp --replicas=2
deployment.extensions/nginx-dp scaled
~]# ipvsadm -Ln
......
TCP  192.168.94.73:80 nq
  -> 172.7.21.3:80                Masq    1      0          0         
  -> 172.7.22.4:80                Masq    1      0          0

2.5 explain查看属性的定义和用法

查看service资源下metadata的定义及用法

kubectl explain service.metadata

image.png

3 统一资源配置清单

统一资源配置清单,就是一个yaml格式的文件,文件中按指定格式定义了所需内容,然后通过命令行工具kubectl应用即可

3.1 语法格式

kubectl create/apply/delete -f /path_to/xxx.yaml

3.1.1 学习方法

  1. 忌一来就无中生有自己写,容易把自己憋死
  2. 先看官方或别人写的,能读懂即可
  3. 别人的读懂了能改改内容即可
  4. 遇到不懂的用kubectl explain查帮助

3.2 初略用法

3.2.1 查看已有资源的资源配置清单

kubuctl get svc nginx-dp -o yaml -n kube-pubic

image.png

必须存在的四个部分为:

apiVersion

kind

metadata

spec

资源配置清单中有许多项目,如果想查看资源配置清单中某一项的意义或该项下面可以配置的内容,可以使用explain来获取

kubectl explain service.kind

3.2.2 创建并应用资源配置清单

创建yaml配置文件

cat >nginx-ds-svc.yaml <<EOF
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-ds
  name: nginx-ds
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx-ds
  type: ClusterIP
EOF

应用配置创建资源

kubectl create -f nginx-ds-svc.yaml
# 或
kubectl apply -f nginx-ds-svc.yaml
# 查看结果
[root@hdss7-21 ~]# kubectl  get -f nginx-ds-svc.yaml 
NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
nginx-ds   ClusterIP   192.168.48.225   <none>        80/TCP    24s

create和apply的区别

create命令和apply命令都会根据配置文件创建资源,但是:

  1. create命令只会新建,如果资源文件已使用过,则会提示错误
  2. 如果资源不存在,apply命令会新建,如果已存在,则会根据配置修改
  3. 如果是create命令新建的资源,使用apply修改时会提示
[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml 
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
  1. 意思是如果要用apply修改,就应该用apply命令创建,或者create创建时加--save-config参数
  2. 所以养成使用apply命令的习惯即可

3.2.3 修改资源配置清单

在线修改

使用edit命令,会打开一个在线的yaml格式文档,直接修改该文档后,修改立即生效

kubectl edit svc nginx-ds -n default
# 查看结果
[root@hdss7-21 ~]# kubectl get service nginx-ds 
NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
nginx-ds   ClusterIP   192.168.48.225   <none>        8080/TCP   2m37s

离线修改

离线修改就是修改原来的yaml文件,然后使用apply命令重新应用配置即可

#将对外暴露的端口改为881
sed -i 's#port: 80#port: 881#g' nginx-ds-svc.yaml
# edit修改过资源,再用apply修改,会报错
[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml 
The Service "nginx-ds" is invalid: 
* spec.ports[0].name: Required value
* spec.ports[1].name: Required value
# 加上--force强制修改选项
[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml --force 
service/nginx-ds configured
# 查看结果
[root@hdss7-21 ~]# kubectl get service nginx-ds 
NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
nginx-ds   ClusterIP   192.168.142.98   <none>        881/TCP   8s

3.2.4 删除资源配置清单

陈述式删除

即:直接删除创建好的资源

kubectl delete svc nginx-ds -n default

声明式删除

即:通过制定配置文件的方式,删除用该配置文件创建出的资源

kubectl delete -f nginx-ds-svc.yaml
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
27天前
|
Kubernetes 持续交付 开发者
探索后端技术的未来:微服务架构与容器化部署的融合
在数字化时代的浪潮中,后端技术正经历着前所未有的变革。本文将深入探讨微服务架构和容器化部署如何共同推动后端技术的发展,提升应用的性能、可扩展性和可靠性。通过分析现代软件开发的需求,我们将揭示这两种技术如何互补,以及它们在未来后端开发中的潜力和挑战。
|
8天前
|
运维 Kubernetes 安全
云时代的运维之光:容器化与微服务架构的融合之道
在数字化浪潮中,企业IT架构的演进从未停歇。本文以浅显的语言探讨了容器技术与微服务架构如何协同工作,提高运维效率。我们将从基础概念出发,逐步深入到它们在实际工作中的应用,最后分享一些行业内的最佳实践。无论你是运维新手还是资深专家,这篇文章都将为你带来新的视角和思考。
|
11天前
|
运维 Cloud Native 开发者
云原生时代:容器化与微服务架构的融合之旅
【8月更文挑战第9天】 在数字化浪潮的推动下,企业纷纷上云以追求更高效的运营模式。本文将深入探讨云原生技术的核心——容器化与微服务架构的结合,揭示它们如何共同塑造现代软件的开发与部署。通过浅显易懂的语言和实际案例,我们将一同见证这场技术变革给企业带来的创新与挑战,以及开发人员如何在这波潮流中找到自己的立足点。
16 4
|
9天前
|
运维 Cloud Native Android开发
云原生之旅:容器化与微服务架构的融合之道安卓应用开发入门指南
本文将深入探讨云原生技术的核心要素——容器化和微服务架构,并揭示它们如何共同推动现代软件的开发与部署。通过实际案例分析,我们将看到这两种技术如何相辅相成,助力企业实现敏捷、可扩展的IT基础设施。文章旨在为读者提供一条清晰的道路,指引如何在云原生时代利用这些技术构建和优化应用。 本文将引导初学者了解安卓应用开发的基本概念和步骤,从安装开发环境到编写一个简单的“Hello World”程序。通过循序渐进的讲解,让读者快速掌握安卓开发的核心技能,为进一步深入学习打下坚实基础。
19 1
|
11天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:从容器化到微服务架构的演进
在数字化浪潮中,云原生技术以其灵活性和可扩展性引领着软件开发的未来。本文将通过浅显的语言和生动的比喻,带领读者理解云原生的核心概念,探索它如何重塑我们的应用开发和部署方式,并展望这一趋势如何影响IT行业的走向。
18 1
|
16天前
|
Kubernetes 监控 开发者
探索后端开发的新境界:微服务架构与容器化技术
在数字化时代的浪潮中,后端开发不断演进,涌现出创新的架构与技术。本文深入探讨了微服务架构和容器化技术如何重塑后端开发,提升系统的可维护性、可扩展性和部署效率。通过实际案例分析,我们揭示了这些技术背后的原理,并提供了实施的最佳实践和面临的挑战,为后端开发者提供一条清晰的技术升级路径。
40 3
|
15天前
|
运维 开发者 Docker
深度探索微服务架构中的容器化技术
在现代软件开发中,微服务架构因其模块化和可扩展性而广受欢迎。而容器化技术,尤其是Docker,成为了支持微服务架构的核心工具。本文将探讨容器化在微服务架构中的作用,包括其如何提升开发效率、简化部署过程以及解决传统方法中的问题。通过具体实例和最佳实践的分析,读者将了解如何有效利用容器化技术来优化微服务架构。
|
22天前
|
运维 Kubernetes 开发者
构建高效后端服务:微服务架构与容器化部署的实践
【7月更文挑战第29天】 在现代软件开发中,后端服务的构建不再仅仅是代码的堆砌,而是需要考虑到可扩展性、可靠性和快速迭代等多重因素。本文将探讨如何通过微服务架构和容器化技术来构建一个高效的后端服务系统。我们将从微服务的概念出发,分析其在后端开发中的应用优势,并结合容器化技术,特别是Docker和Kubernetes的使用,来展示如何在保证服务高可用性和伸缩性的同时,简化开发和部署流程。文章还将涵盖如何应对微服务架构下的数据一致性挑战,以及如何利用现代云平台资源来优化后端服务的性能和成本效益。
|
1月前
|
Ubuntu 网络协议 Android开发
使用ruri快速构建跨架构chroot容器
【7月更文挑战第3天】使用ruri在x86_64系统上构建arm64 Ubuntu容器的简要步骤: 1. 确认binfmt_misc支持,检查/proc/filesystems。 2. 安装qemu-user-static以模拟arm64指令。 3. 通过rootfstool脚本获取arm64的Ubuntu rootfs。 4. 下载最新版的ruri二进制文件。 5. 解压rootfs,将qemu-aarch64-static复制进去,用ruri启动容器。 6. 在容器内配置DNS(如设置resolv.conf)。 注意:需以root权限运行ruri,并根据系统环境调整步骤。
56 20
|
24天前
|
运维 Kubernetes 负载均衡
构建高效后端:微服务架构与容器化实践
【7月更文挑战第27天】在数字化浪潮的推动下,后端技术不断演进以满足日益增长的性能和可扩展性需求。本文深入探讨了微服务架构的设计原则、优势及其挑战,并结合容器化技术,分析了如何在现代软件开发中实现高效、灵活的后端系统。通过实际案例,我们揭示了微服务与容器化相结合的最佳实践,旨在为开发者提供一条清晰的技术路线图。

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多