使用 Kubectl 管理 Kubernetes 容器平台

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Kubectl 是一个用于操作 Kubernetes 集群的命令行接口,通过利用 Kubectl 的各种命令可以实现各种功能。

使用 Kubectl 管理 Kubernetes 容器平台



一、Kubectl 概述


二、Kubectl 创建和删除 Pod 相关操作


1.在集群上运行一个镜像

2.Kubectl run 语法

3.Pod 常见的状态

4.使用 Kubectl Delete 删除创建的对象

1)删除 Pod

2)删除 Deployment


三、YAML 语法规则


1.YAML 语法的基本语法规则

2.YAML 支持的三种数据结构


四、Kubectl Create 创建 Deployment


1.生成 Deployment 文件

2.使用 Create 创建 Deployment

3.使用 Get 命令查看 Pod 详细信息

4.使用 Describe 查看 K8s 中的详细信息


五、Kubectl 其他常用命令和参数说明


1.Kubectl Logs

2.Kubectl Exec

3.Kubectl Attach


六、使用 Kubectl 管理集群中 Deployment 资源和 Service 服务


1.生成 Deployment 和 Service 服务的配置文件

2.创建 Deployment 和 Serveice


准备工作:


  • 如果未部署 Kubernetes 容器集群管理系统需看:部署 Kubernetes 容器集群管理系统 来进行部署。
  • 该实验所需软件包从这个链接下载:https://pan.baidu.com/s/1cNdRaG5bIHr2YNo47-N1Fw
  • 提取码:ozfk


一、Kubectl 概述



Kubectl 是一个用于操作 Kubernetes 集群的命令行接口,通过利用 Kubectl 的各种命令可以实现各种功能。


二、Kubectl 创建和删除 Pod 相关操作



image.png


1.在集群上运行一个镜像


将 docker.io-nginx.tar 和 pod-infrastructure.tar 上传到 node1 和 node2 上并导入镜像:


[root@node1 ~]# ls
anaconda-ks.cfg      k8s-package         pod-infrastructure.tar
docker.io-nginx.tar  k8s-package.tar.gz
[root@node1 ~]# docker load -i docker.io-nginx.tar 
[root@node1 ~]# docker load -i pod-infrastructure.tar


image.png


2.Kubectl run 语法


Kubectl run 和 Docker run 一样,Kubectl run 能将一个 Pod 运行起来。


  • 格式:kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas]


在 master 上启动 Pod:


[root@master ~]# kubectl run nginx-1 --image=docker.io/nginx --replicas=1 --port=9000   


image.png


查看 Deployment:


[root@master ~]# kubectl get deployment


image.png


查看生成的 Pod,Kubernetes 将容器运行在 Pod 中以方便实施卷和网络共享等管理:


[root@master ~]# kubectl get pods


image.png


3.Pod 常见的状态


  • Running:正常运行的状态。
  • ContainerCreating:容器正在创建。
  • ImagePullBackOff:镜像拉取失败。
  • terminating:终止,删除 Pod 时的状态。


4.使用 Kubectl Delete 删除创建的对象


1)删除 Pod


[root@master ~]# kubectl delete pod nginx-1-2637872784-5kg5l
[root@master ~]# kubectl get pod


image.png


过 2 分钟左右,再次确认,发现已经运行


image.png


2)删除 Deployment


直接删除 Pod 触发了 Replicas 的确保机制,所以需要删除 Deployment


[root@master ~]# kubectl delete deployment nginx-1
[root@master ~]# kubectl get pod


image.png


三、YAML 语法规则



YAML 语言的设计目标,就是方便人类读写。它实质上是一种数据串行化格式。


1.YAML 语法的基本语法规则


  • 大小写敏感。
  • 使用缩进表示层级关系。
  • 缩进时不允许使用 Tab 键,只允许使用空格。
  • # 表示注释,从这个字符一直到行尾,都会被解析器忽略。
  • 在 YAML 里面,连续的项目(如:数组元素、集合元素)通过减号 - 来表示,Map 结构里面的键值对 key/value 用冒号 : 来分割。


2.YAML 支持的三种数据结构


  • 对象:键值对的集合,又称为 mapping 映射,hashes 哈希,dictionary 字典。
  • 数组:一组按次序排列的值,又称为 sequence 序列,list 列表。
  • 纯量(scalars):单个的、不可再分的值。


四、Kubectl Create 创建 Deployment



  • 使用 Kubectl run 在配置很复杂的需求时,需要非常长的一条语句,也很容易出错,也没法保存;
  • 所以更多场景下会使用 yaml 或者json 文件。


1.生成 Deployment 文件


上传 docker.io-mysql-mysql-server.tar 到 node1 和 node2 上:


[root@node1 ~]# docker load -i docker.io-mysql-mysql-server.tar


编写 Deployment 文件:


[root@master ~]# vim mysql-deployment.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: mysql
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: mysql
    spec:
      containers:
      - name: mysql
        image: docker.io/mysql/mysql-server
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3306
          protocol: TCP
        env:
          - name: MYSQL_ROOT_PASSWORD
            value: "123123"


image.png


2.使用 Create 创建 Deployment


[root@master ~]# kubectl create -f mysql-deployment.yaml 


image.png


  • 注意:当一个目录下,有多个 yaml 文件的时候,使用 kubectl create -f 目录 的方式一下全部创建。


3.使用 Get 命令查看 Pod 详细信息


[root@master ~]# kubectl get pod
[root@master ~]# kubectl get deployment


image.png


加上 -o wide 参数可以查看更详细的信息,如:看 Pod 在哪个 Node 上运行,Pod 的 IP 地址等信息。


[root@master ~]# kubectl get pod -o wide


image.png


  • 注意:10.255.5.2 这个 IP 地址是 flannel 中定义的网段中的一个 IP 地址(Pod 通过这个 IP 和 Master 进行通信)


在 node2 上查看运行的 Container:


[root@node2 ~]# docker ps


image.png


4.使用 Describe 查看 K8s 中的详细信息


image.png


五、Kubectl 其他常用命令和参数说明



image.png


1.Kubectl Logs


[root@master ~]# kubectl get pod
[root@master ~]# kubectl logs mysql-2388517676-588kb


image.png


2.Kubectl Exec


exec 命令用于到 pod 中执行一条命令。


[root@master ~]# kubectl get pod
[root@master ~]# kubectl exec -it mysql-2388517676-588kb -- /bin/bash
bash-4.2# exit


3.Kubectl Attach


attach 用于取得 Pod 中容器的实时信息,可以持续不断实时的取出消息。


[root@master ~]# kubectl attach mysql-2388517676-588kb


image.png


  • 到现在,所创建 Nginx 和 MySQL 都只是 Deployment,并没有对应 Service 服务;
  • 所以现在还不能直接在外网进行访问 Nginx 和 MySQL 服务。


六、使用 Kubectl 管理集群中 Deployment 资源和 Service 服务



1.生成 Deployment 和 Service 服务的配置文件


使用 Deployment 方式启动 Nginx 的 Pod 和 Service:


[root@master ~]# vim nginx-deployment.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: nginx
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
      - name: nginx
        image:  docker.io/nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          protocol: TCP


创建 Service:


[root@master ~]# vim nginx-svc.yaml             # 创建 Service
kind: Service
apiVersion: v1
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  type: NodePort
  ports:
  - protocol: TCP
    nodePort: 31001
    targetPort: 80
    port: 80
  selector:
    name: nginx


image.png


2.创建 Deployment 和 Serveice


[root@master ~]# kubectl create -f nginx-deployment.yaml 
[root@master ~]# kubectl create -f nginx-svc.yaml


image.png


查看:


[root@master ~]# kubectl get service
或者
[root@master ~]# kubectl get svc


image.png


查看详细信息:


[root@master ~]# kubectl get pod -o wide


image.png


  • 现在 Nginx Pod 的 80 端口已经映射到 Node 节点的 31001 端口上。


使用浏览器访问验证:


image.png


尽管 Nginx Pod 是在 node1 运行的,但我们去访问任意 node,都可以正常访问 Nginx 的;因为已经做了负载均衡,所以在 node2 上也可以成功访问 Web 服务。


image.png


修改一下默认主页:


[root@master ~]# kubectl get pod
[root@master ~]# kubectl exec -it nginx-1011335894-shsfx bash
root@nginx-1011335894-shsfx:/# echo Nginx > /usr/share/nginx/html/index.html     
root@nginx-1011335894-shsfx:/# exit


image.png


使用浏览器访问测试:


image.png


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
1月前
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
2月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
303 78
|
29天前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
117 21
|
1月前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
2月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
178 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
1月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
209 11
|
2月前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
2月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
1月前
|
人工智能 运维 监控
容器服务Kubernetes场景下可观测体系生产级最佳实践
阿里云容器服务团队在2024年继续蝉联Gartner亚洲唯一全球领导者象限,其可观测体系是运维的核心能力之一。该体系涵盖重保运维、大规模集群稳定性、业务异常诊断等场景,特别是在AI和GPU场景下提供了全面的观测解决方案。通过Tracing、Metric和Log等技术,阿里云增强了对容器网络、存储及多集群架构的监控能力,帮助客户实现高效运维和成本优化。未来,结合AI助手,将进一步提升问题定位和解决效率,缩短MTTR,助力构建智能运维体系。

相关产品

  • 容器服务Kubernetes版