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,

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
Linux 程序员 C++
Linux系统函数API----基本概念
Linux系统函数API----基本概念
42 0
|
5月前
|
分布式计算 Java 大数据
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
280 0
|
7月前
|
缓存 API 流计算
Flink--7、窗口(窗口的概念、分类、API、分配器、窗口函数)、触发器、移除器
Flink--7、窗口(窗口的概念、分类、API、分配器、窗口函数)、触发器、移除器
|
8月前
|
存储 Web App开发 缓存
BOM的概念和常用API
BOM的概念和常用API
|
6月前
|
API
HDFS基本命令及上传文件API
HDFS基本命令及上传文件API
|
1月前
|
XML API 数据格式
【Qt 学习笔记】QWidget的enable属性 | API的介绍
【Qt 学习笔记】QWidget的enable属性 | API的介绍
29 0
|
2月前
|
分布式计算 API 数据处理
Flink【基础知识 01】(简介+核心架构+分层API+集群架构+应用场景+特点优势)(一篇即可大概了解flink)
【2月更文挑战第15天】Flink【基础知识 01】(简介+核心架构+分层API+集群架构+应用场景+特点优势)(一篇即可大概了解flink)
70 1
|
9月前
|
存储 API 流计算
Flink DataStream API-概念、模式、作业流程和程序
前几篇介绍了Flink的入门、架构原理、安装等,相信你对Flink已经了解入门。接下来开始介绍Flink DataStream API内容,先介绍DataStream API基本概念和使用,然后介绍核心概念,最后再介绍经典案例和代码实现。本篇内容:Flink DataStream API的概念、模式、作业流程和程序。
Flink DataStream API-概念、模式、作业流程和程序
|
4月前
|
JavaScript 前端开发 IDE
Vue3【为什么选择Vue框架、Vue简介 、Vue API 风格 、Vue开发前的准备 、Vue项目目录结构 、模板语法、属性绑定 、 】(一)-全面详解(学习总结---从入门到深化)
Vue3【为什么选择Vue框架、Vue简介 、Vue API 风格 、Vue开发前的准备 、Vue项目目录结构 、模板语法、属性绑定 、 】(一)-全面详解(学习总结---从入门到深化)
54 1
|
5月前
|
存储 API 数据安全/隐私保护
FreeRTOS入门教程(信号量的概念及API函数使用)
FreeRTOS入门教程(信号量的概念及API函数使用)
135 0