使用 Kubectl 管理 Kubernetes 容器平台

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 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搭建和管理企业级网站应用
相关文章
|
8天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
15天前
|
Kubernetes 监控 Cloud Native
|
8天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
34 4
|
9天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
36 3
|
10天前
|
存储 运维 Kubernetes
云端迁移:备份中心助力企业跨云迁移K8s容器服务平台
本文将简要介绍阿里云容器服务ACK的备份中心,并以某科技公司在其实际的迁移过程中遇到具体挑战为例,阐述如何有效地利用备份中心来助力企业的容器服务平台迁移项目。
|
12天前
|
运维 Kubernetes Cloud Native
云原生入门:Kubernetes和容器化的未来
【10月更文挑战第23天】本文将带你走进云原生的世界,探索Kubernetes如何成为现代软件部署的心脏。我们将一起揭开容器化技术的神秘面纱,了解它如何改变软件开发和运维的方式。通过实际的代码示例,你将看到理论与实践的结合,感受到云原生技术带来的革命性影响。无论你是初学者还是有经验的开发者,这篇文章都将为你开启一段新的旅程。让我们一起踏上这段探索之旅,解锁云原生技术的力量吧!
|
1月前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。
|
1月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
29天前
|
Kubernetes Cloud Native 调度
深入探讨容器化技术:Kubernetes 的魅力
【10月更文挑战第6天】深入探讨容器化技术:Kubernetes 的魅力
59 0
|
1月前
|
运维 Kubernetes Cloud Native
云原生时代的容器编排:Kubernetes入门与实践
【10月更文挑战第4天】在云计算的浪潮中,云原生技术以其敏捷、可扩展和高效的特点引领着软件开发的新趋势。作为云原生生态中的关键组件,Kubernetes(通常被称为K8s)已成为容器编排的事实标准。本文将深入浅出地介绍Kubernetes的基本概念,并通过实际案例引导读者理解如何利用Kubernetes进行高效的容器管理和服务部署。无论你是初学者还是有一定经验的开发者,本文都将为你打开云原生世界的大门,并助你一臂之力在云原生时代乘风破浪。

相关产品

  • 容器服务Kubernetes版