Kubectl 命令使用及 API 概念简介 | 学习笔记

简介: 快速学习 Kubectl 命令使用及 API 概念简介

开发者学堂课程【Kubernetes 入门实战演练2020版Kubectl 命令使用及 API 概念简介学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/656/detail/10864


Kubectl 命令使用及 API 概念简介


内容介绍

一、命令集

二、Token 获取

三、api 资源

四、K8s 的 API

五、yaml 和 json

 

一.命令集

1.命令集

基础命令:

create, editc, get

delete(删除数据)

describe,logs(结合用于排错)

Exec(进容器进行操作) scale(进容器伸缩,无需手动维护) explain(命令说明)

配置命令:Apply(动态配置)  ;Label :给 node 标记 label,实现亲 pod 与 node 亲和性(使用较多)

label 打标签,实现 pod 亲和性,以实现 pod 在创建时让其运行指定标签的主题,所以是 node 结点。

集群管理命令:

cluster-info/top (集群状态)

cordon:警戒线,标记 node 不被调度

uncordon:取消警戒线

drain驱逐 node 上的 pod,用户 node 下线等场景

taint 给 node 标记污点,实现反亲 pod 与 node 反亲和性

api-resources   version   api-version

2.性能

一个公司在通常情况下一个业务有20多个小夫,通常情况下一个业务有3~5个节点,有3~5个高配的物理机,128g 内存,且至少4块盘,甚至8块盘。

一个节点跑20~30个 pod,每个 pod 获得1个服务,近似于存在20~30个服务。

硬件性能差导致pod运作效果差,服务慢,磁盘差。

使用1w 帧或1.5w 帧(7000帧磁盘差,跑数据卡,性能差且卡顿较严重)

生产环境:15K

一个服务器4个盘,Server 盘3年使用损坏率高。

3.kubectl top 命令观察集群状态

需要 heapster 收集 node 节点数据,找不到返回数据

在新版本 heapster 被废弃,后面会讲用其他服务来替代heapster实现数据

没有 services  ,kubectl  top  node显示不到数据

heapster 在1.8~1.9 ~1.10 1.13 1.14版本的画面能收到,1.15开始使用停止。

CPU 的内存,资源率低,后面会用以上来实现数据。

Heapster 是由每个节点上运行的Kubelet提供的集群范围的数据聚合器。

Heapster 基本发现集群中所有节点,并通过机上Kubernetes代理查询集群中Kubernetes 节点的使用信息。

从前使用 Heapster 收集 pod 资源,(第一次安装后效果显著)在每个 pod 上会显示资源利用率(类似下图,存在一些状态但没有提及pod)

若安装完毕或有其他采集数据的服务,在执行 kubectl  top 时,会有一些数据返回,类似于使用 kubectl describe node  存在一个 node 结点,会返回 node 结点内存数据。

Kubectl get node  node结点

数据是用 Kubectl  lit 收集的,因此可以 describe 数据。

客户需要 top,需要查看 heapster 内数据。

早期用 heapster 监控,观察举报数据,与下图类似

可以通过 top 查看 node 和 pod 数据。

4.cluster-info/top

显示当前的集群内的一些服务访问的方式,运行哪些服务,服务如何进行访问。(通过api 的方式去访问)

如果存在其它服务也会显示

查看集群服务状态  kubectl cluster--help

5.master

不用来跑容器,创建 pod 做的调动任务(整个集群的任务调配)

保证 master 不跑容器:cordon  uncordon   drain  taint

cordon:警戒线(给结点警戒线标记),标记node保证结点不被调度

Mark node as unschedulable :标记为不调度动。

标记方法如下

首先拿到 node 名称 kubectl get node

此名称在 master 上也参与调度,而且没有任何标记可以使它处于不调度状态。

通常给 master 结点标记  Master 不参与调度,即不跑容器。

此时观察 master 后出现disabled, 将所有 master kubeadm 后, Master 就变成不调度

Master 后存在 master  node 后不存在 node:

打磨标记可通过 kubectl get node 查看,master 充当角色无实质作用,最终是否参与调度与下图有关。

uncordon:取消警戒线

在生产中,如果一个新的节点更加 kubernetes,临时打一个 kubernete标记加入,先不进行跑容器,加入调整配置。kubernete 装好后再取消。此时kubernete向其它结点分配容器。

当 kubernete 集训比较大时,会专门安置 kubernete 机器实现调度,这些机器类似于 kubernete 内的 service 访问的入口服务器,访问入口的服务器一般存在3~5个,此入口会被 HaProxy 连接。

获得服务器的时候不会出现业务机。

Haproxy :处理外网用户访问  实现访问入口

访问入口服务器:在kubernete集群内(不跑容器)

只负责接受Haproxy转发的请求,根据相应的node pod,将请求转化到Service,在转化到相应的 pod。最终转化到主机端口。

缺点 :

比较消耗服务器,但若环境大,经济费用可以满足可选择专门入口服务器。

(选择业务机)配置不太高,硬盘不太大,不跑容器,内存配置16/32g。

假如把none3标记成上述服务器,但是none3中已经存在运行的容器,容器存在服务器上,除非强制性驱逐,否则这些容器等到下一次做代码升级时涉及到容器重建,涉及调度不会往此节点调度容器在其他几个节点上创建,创建后删除,久而久之,将不存在新的容器。

驱逐方法:

若硬盘掉线或服务器损坏,立刻迁走运行在结点的容器。

6.Drain

驱逐 node 上的 pod,用户 node(紧急)下线等场景

Kubectl -drain 查看选项

--delete-local

--dry-run=false

--force=false等

Kubectl -drain +名称 :紧急驱逐pod

驱逐无状态服务(业务紧急下线)

Web服务器被驱逐,但有些服务还存在。

7.taint

Taint:给 node 标记污点,实现反亲 pod 与 node 反亲和性

Taint--help 实现反亲和

Label:给 node 标记 label,实现亲 pod与node 亲和性(使用较多)

Kubectl taint node foo dedicated 打标签

:或= (较多)分割

Uncordon node3取消 taint标记消失,新创建taint被调度。


二.Token 获取

1.获取 token

修改文件 Kubectl describe secret -n 此方法过于繁琐

两种修改方法:

Token延长登录(默认15分钟)

加 token:    token(粘贴token后内容)

(输入4个空格,保证token值是user子选项)

Kuboconfig:放置固定位置(桌面)  登录直接选择文件

 

三.api 资源

1.version

Kubectl version 版本关系

查看磁条版本

2.api-resources

Kubectl api-resources

资源版本 (把资源对象分组)

NAME:名称   SHORTNAMES:短名称(简称)

KIND:访问类型(注意大小写)

不同版本的API 分组不同(API当前分组不同,查到失败)

全称  -- 简称

Node  -- no

Developments -- deploy

Pod  --  po(依赖namespaces,创建时指定namespaces)

Namespaces -- ns

Developments 分组到apps

3.api-version

Kubectl  api-version

版本 v1beta1(较多) 测试版本 ; 若没有beta1,v1将成为正式版本。

Apps/v1存在deployments需求资源对象

创建资源要求APL版本 ,账号密码,语法,类型 ,配置等全部正确,否则被拒绝。

提交端口做审核


四.K8s 的 API

1.K8s 重要概念

对象用 k8s 和什么打交道?    K8s 声明式 API(创建容器,使用定向)

在service机开端口30004,可以访问到service 80。再通过service80转到port80端口,只需把目的写出即可。

Yaml文件   怎么打交道?   调用声明式API Kubectl  explain service apiVersion 查看分组(若分组未出现,则直接看V1)

必须字段   怎么声明?

Kubectl delete 创建/get 数据

1.apiVersion——创建该对象所使用的Kubernetes API的版本

2.kind ——创建对象类型

3.metadata— 识别对象唯一性的数据,包括 name名称,可选的namespace

4.spec 定义容器状态,名称,端口。(可定义多个容器,容器名称不可冲突)

5.status(Pod 创建完成后k8s自动生成status状态)

通过get,pod可返回状态

Kubectl  get pod

查看更详细信息用Describe


五.yaml 和 json

1.Yaml 文件

需提前创建好yaml文件,并创建好pop运行所需要的namespace,yaml文件等资源。

创建业务namespace yaml文件

#pwd

/pot/k8s-data/yaml

#mkdir namespaces linux36

#cd namespace

#cat Linux36.yaml

apiVersion:v1 #api版本

kind :namespace #类型为namespac

metadata:  #定义元数据

name:Linux 36 #namespace名称

创建并验证Namespace:

kubect1 apply if linux36.yam1

namespace/linux36 created

#kubect1 get  namespaces

NAME    STATUS    AGE

default  Active  21d

kube-public Active  21d

kube-system Active    21d

1inux36  Active 45S

创建namespace目录

Yaml文件必须字段

每个API对象都有3大类属性:

元数据metadata  规范 spec 和状态status

apiVersion:apps/v1beta1

kind: Deployment

metadata:

name:nginx-deployment

spec:

replicas:3

tempate:

metadata:

labels:

app:nginx

spec:

containcrs:

name:nginx

image: nginx:1.7.9

ports:

- containerPort:80

Json 格式:

{人员名单":

{“张三”: [ “年龄”: 18, “职业”: “Linux运维工程师”,”“爱好”:[“看书”,”学习”,“加班”]}

“李四”: {“年龄”: 20, “职业”: “Java开发工程师”, “爱好”: [“开源技术”, “微服务”,“分布式存储”]}}}

#json 缺点:

不能注释

可读性差

语法要求严格

用于配置文件较少。

yaml格式:

人员名单:

张三:

年龄: 18

职业: L inux运维工程师

爱好:

-看书(列表)

-学习

-加班

李四:

年龄: 20

职业: Java 开发工程师#

爱好:

开源技术

微服务

分布式存储

大小写敏感

使用缩进表示层级关系

缩进时不允许使用Tal健,只允许使用空格

缩进的空格数目不重要,只要相同层级的元表左侧对齐即可

使用”#”表示注释,从这个字符一直到行尾,都会被解析器忽略比json更适用于配置文件。

注意事项:严格区分大小写

一个列表多个值通过 “ - ”表示,传多个名称,实现一个pod跑多个容器。

2.yaml 文件主要特征

K8s 中的 yaml 文件以及其他场景的 yaml 文件大部分都是以下类型

上下级关系

列表

键值对(也称为 maps 即 key value 格式的键值对数据)

Key:年龄

Value:20

注意:json 格式返回年龄方便

处理后可得到指定位置的数据。

Template下级:metadata

metadata下级:k8s-apps

k8s-apps下级:spec

Containers下级:-name

-name是一个容器,在容器的下级定义容器的镜像,端口等,包括一些参数。

— (列表)传递多个容器的名称,已实现在pod里跑多个容器的目的。

获取到指定位置的数据,叫下标位,称为 index 。

目的:表示一个列表当中的某些数据

3.yaml 和 json 对比

yaml和json对比,在线yaml与json编辑器(可使yaml与json相互转换)

:http://www.bejson.com/validators/yaml editor/

校验成功

优点:

通过json返回的数据在Python很轻易获取到某字段值。

4.kubements

官方的yaml文件 查找:

找到官方网站,通常使用中文,点击右上角在线文档,(首页介绍Kubernetes用于自动部署,扩展和管理。容器化应用程序的开源系统。

它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现,Kubernetes源自谷歌15年生产环境的运维经验,同时凝聚了社会的最佳创意和实践。

Borg :谷歌内部容器调动系统。

星际尺度

谷歌每周运行数10亿个容器,kubernetes基于与之相同的原则来设计能够在不扩张运维团队的情况下进行规模扩展.

处处适用

无论是本地测试还是跨国公司,kubernetes的灵活性都能让你在应对复杂系统时得心应手(基于镜像跑服务)永不过时是开源系统,kubernetes可以自由的部署在企业内部,私有云,混合云或公有云,让您轻松地做出合适的选择。

5.Kubernetes 文档

Kubernetes 是一个开源容器编排引擎,用于容器化应用的自动化部署,扩展和管理,该项目托管在CNCF。

了解基本知识

尝试Kubernetes

设置集群(实行部署)

了解如何使用Kubernetes

参考

(kubectl 概述

kubectl 备忘单

API 总览)

为该文档作出贡献

跑文档教程

右上角搜索内容

创建和探究一个 nginx deployment

Api 版本在不同的apps内不同。(右上角修改版本)

Kubernetes 概念

更新证书(默认时间一年)

查看有效期 $ kubeadm alpha certs check-expiration

官方网站有教程

可重新编译证书有限期

重新编译Kubeadm

重新修改源码

修改 constants.go 文件,操作如下:

$ vim cmd/kubeadm/app/constants/constants.go

########### 后面追加个 * 100 (注掉部分为源代码,后面跟着的是修改后的代码)

#const duration365d = time.Hour * 24 * 365

const duration365d = time.Hour * 24 * 365 * 100

// Config contains the basic fields required for creating a certificate

type Config struct {

CommonName   string

Organization []string

AltNames     AltNames

Usages       []x509.ExtKeyUsage

}

修改 cert.go 文件,操作如下:

$ vim staging/src/k8s.io/client-go/util/cert/cert.go

########### 修改10年为100年(注掉部分为源代码,后面跟着的是修改后的代码)

#NotAfter:             now.Add(duration365d * 10).UTC(),

NotAfter:              now.Add(duration365d * 100).UTC(),

KeyUsage:              x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,

BasicConstraintsValid: true,

IsCA:                  true,

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7月前
|
分布式计算 Java 大数据
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
723 0
|
1月前
|
缓存 负载均衡 测试技术
‌API开发的基础概念和作用‌
API(Application Programming Interface)是一组定义了软件组件之间交互规则的接口。它提供了一种标准化的方式,让不同的软件组件之间可以进行通信和交互。
41 2
|
2月前
|
消息中间件 NoSQL Kafka
大数据-52 Kafka 基础概念和基本架构 核心API介绍 应用场景等
大数据-52 Kafka 基础概念和基本架构 核心API介绍 应用场景等
65 5
|
7月前
|
自然语言处理 Java API
Java 8的Stream API和Optional类:概念与实战应用
【5月更文挑战第17天】Java 8引入了许多重要的新特性,其中Stream API和Optional类是最引人注目的两个。这些特性不仅简化了集合操作,还提供了更好的方式来处理可能为空的情况,从而提高了代码的健壮性和可读性。
177 7
|
7月前
|
SQL Java 程序员
Java 8中的Stream API:简介与实用案例
【5月更文挑战第23天】本文将深入探讨Java 8中的Stream API,这是一种能够极大提升Java程序员生产力的新特性。我们将从基础概念开始,然后通过一些实用的案例来展示如何使用Stream API进行数据处理和操作。无论你是Java的初学者还是经验丰富的开发者,本文都将为你提供有价值的信息。
|
4月前
|
监控 安全 测试技术
API 管理的概念是什么?Apifox 为什么值得推荐?
在互联世界中,API如同软件间的“翻译官”,让应用能相互交流、共享数据。随着API数量激增,有效管理变得至关重要。API管理确保API的质量、安全与性能,提升开发效率及用户体验。它覆盖API从设计到废弃的全过程。利用如Apifox这样的工具,可以轻松实现API的设计、测试、文档管理和模拟等。Apifox集多种功能于一体,简化工作流程,提高团队协作效率。在选择API管理工具时,Apifox以全面的功能和友好的使用体验脱颖而出,成为开发者们的优选。随着技术发展,未来API管理将更加智能化和高效。
API 管理的概念是什么?Apifox 为什么值得推荐?
|
4月前
|
人工智能 监控 安全
F5社区学习笔记:API和AI如何改变应用安全?
F5社区学习笔记:API和AI如何改变应用安全?
54 1
|
4月前
|
XML API 数据库
商品详情数据API接口概念(sku详情图属性等全面的解析)
商品详情数据API接口是指一种编程接口(API, Application Programming Interface),它允许开发者或系统以编程方式获取商品的详细信息,包括但不限于SKU(Stock Keeping Unit,库存量单位)的详细信息、商品图片、商品属性、价格、库存状态、用户评价等。这种接口通常由电商平台、商品数据库服务商或第三方数据提供商提供,旨在帮助开发者或企业快速集成商品数据到其应用程序或系统中。
|
4月前
|
jenkins API 持续交付
jenkins学习笔记之十五:SonarSQube API使用
jenkins学习笔记之十五:SonarSQube API使用
|
4月前
|
JSON 前端开发 API
一文讲清 API 接口的概念、设计和实现
总结 在这个例子中,我们创建了一个简单的Express服务器,并定义了一个/api/auth/login的POST接口来处理登录请求。我们使用body-parser中间件来解析请求体中的JSON数据,并在接口内部进行简单的用户名和密码验证。