云原生入门 第五章:kubernetes学习实践

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475


1. 简介

在本章中,我们将学习不同的Kubernetes对象,它们的用途以及如何与它们交互。
在设置集群或使用现有集群之后,我们可以开始部署一些工作负载。Kubernetes中最小的计算单元不是一个容器,而是一个Pod对象。也就是说,Pod不是我们用于工作负载的唯一抽象。Kubernetes有各种各样的工作负载对象来控制如何部署、扩展和管理pod。
部署工作负载并不是开发人员或管理员必须执行的唯一任务。Kubernetes为容器和编配的一些固有问题提供了解决方案,比如配置管理、跨节点网络、外部流量路由、负载平衡或pod的扩展。

2. 学习目标

在本章结束时,你应该能够:

  • 解释什么是Kubernetes对象以及如何描述它。
  • 讨论Pod的概念及其解决的问题。
  • 了解如何使用工作负载资源来扩展和安排pod。
  • 了解如何用服务抽象Pods,以及如何公开它们。

3. Kubernetes对象

Kubernetes的核心概念之一是提供大量抽象资源(也称为对象),您可以使用这些资源来描述应该如何处理工作负载。其中一些用于处理容器编排的问题,如调度和自愈,另一些用于解决容器的一些固有问题。
Kubernetes对象可以区分为面向工作负载的对象(用于处理容器工作负载)和面向基础设施的对象(例如处理配置、网络和安全)。其中一些对象可以放在一个名称空间中,而其他对象可以跨整个集群使用。
作为用户,我们可以用流行的数据序列化语言YAML描述这些对象,并将它们发送到api服务器,在创建它们之前要对它们进行验证。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec: 
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.19
        ports:
        - containerPort: 80

红色突出显示的字段是必填字段。它们包括:

  • apiVersion:每个对象都可以进行版本控制。这意味着对象的数据结构可以在不同的版本之间变化。
  • kind:应该创建的对象类型。
    metadata:可以用来识别它的数据。每个对象都需要一个名称,并且必须是唯一的。如果需要多个具有相同名称的对象,可以使用名称空间。
  • spec:对象的说明。在这里你可以描述你想要的状态。要小心,因为对象的结构可能会随着它的版本而改变!

创建,修改或删除一个对象只是一个意图记录,在那里你描述你的对象应该处于的状态,你不像你在本地机器上做的那样主动启动pods或甚至容器,并获得直接反馈,如果它工作与否。

4. 与Kubernetes交互

要访问API,用户可以使用名为kubectl的官方命令行接口客户端。让我们看看Kubernetes日常使用的一些基本命令。
注意:您可以在官方文档中了解如何安装kubectl。
你可以用下面的命令列出集群中可用的对象:

$ kubectl api-resources

NAME                    SHORTNAMES  APIVERSION  NAMESPACED  KIND
...
configmaps              cm          v1          true        ConfigMap
...
namespaces              ns          v1          false       Namespace
nodes                   no          v1          false       Node
persistentvolumeclaims  pvc         v1          true        PersistentVolumeClaim
...
pods                    po          v1          true        Pod
...
services                svc         v1          true        Service

注意对象是如何使用短名称的。这对于名称较长的对象(如configmapspersistentvolumeclaims)非常有用。该表还显示了哪些对象具有名称空间以及它们的可用版本。
如果你想了解更多关于对象的信息,kubectl有一个内置的explain函数!
让我们进一步了解pod:

$ kubectl explain pod

KIND:     Pod
VERSION:  v1

DESCRIPTION:
     Pod is a collection of containers that can run on a host. This resource is     
     created by clients and scheduled onto hosts. 

FIELDS: 
   apiVersion  
 APIVersion defines the versioned schema of this representation of an
 object. Servers should convert recognized schemas to the latest internal 
 value, and may reject unrecognized values.
...
 kind 
...
 metadata 
...
 spec 

要了解更多关于pod规范的信息,您可以深入了解对象定义。使用如下格式:.[.]

$ kubectl explain pod.spec

KIND:     Pod
VERSION:  v1 

RESOURCE: spec  

DESCRIPTION:
 Specification of the desired behavior of the pod. More info:

https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status 

 PodSpec is a description of a pod. 

FIELDS:
 activeDeadlineSeconds <integer> 
 Optional duration in seconds the pod may be active on the node relative to 
 StartTime before the system will actively try to mark it failed and kill 
 associated containers. Value must be a positive integer. 

 affinity  
 If specified, the pod's scheduling constraints 

 automountServiceAccountToken  
 AutomountServiceAccountToken indicates whether a service account token 
 should be automatically mounted. 

 containers <[]Object> -required-
...

让我们看看基本的kubectl命令。你可以使用——help标志来查看它们:

$ kubectl --help

kubectl controls the Kubernetes cluster manager. 

 Find more information at: https://kube
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值