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,

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
API 数据安全/隐私保护 数据格式
API 资源详解:从概念到实战的完整指南
本文深入解析了 API 资源的概念、特征与设计原则,涵盖 RESTful 规范、资源分类、层级结构及实际应用示例。内容还包括版本管理、安全策略与性能优化技巧,帮助开发者构建高效、可维护的 API 系统。
308 115
|
7月前
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
485 17
|
监控 安全 测试技术
API 管理的概念是什么?Apifox 为什么值得推荐?
在互联世界中,API如同软件间的“翻译官”,让应用能相互交流、共享数据。随着API数量激增,有效管理变得至关重要。API管理确保API的质量、安全与性能,提升开发效率及用户体验。它覆盖API从设计到废弃的全过程。利用如Apifox这样的工具,可以轻松实现API的设计、测试、文档管理和模拟等。Apifox集多种功能于一体,简化工作流程,提高团队协作效率。在选择API管理工具时,Apifox以全面的功能和友好的使用体验脱颖而出,成为开发者们的优选。随着技术发展,未来API管理将更加智能化和高效。
422 126
API 管理的概念是什么?Apifox 为什么值得推荐?
|
自然语言处理 Java API
Java 8的Stream API和Optional类:概念与实战应用
【5月更文挑战第17天】Java 8引入了许多重要的新特性,其中Stream API和Optional类是最引人注目的两个。这些特性不仅简化了集合操作,还提供了更好的方式来处理可能为空的情况,从而提高了代码的健壮性和可读性。
296 7
|
SQL Java 程序员
Java 8中的Stream API:简介与实用案例
【5月更文挑战第23天】本文将深入探讨Java 8中的Stream API,这是一种能够极大提升Java程序员生产力的新特性。我们将从基础概念开始,然后通过一些实用的案例来展示如何使用Stream API进行数据处理和操作。无论你是Java的初学者还是经验丰富的开发者,本文都将为你提供有价值的信息。
|
11月前
|
缓存 负载均衡 测试技术
‌API开发的基础概念和作用‌
API(Application Programming Interface)是一组定义了软件组件之间交互规则的接口。它提供了一种标准化的方式,让不同的软件组件之间可以进行通信和交互。
338 2
|
消息中间件 NoSQL Kafka
大数据-52 Kafka 基础概念和基本架构 核心API介绍 应用场景等
大数据-52 Kafka 基础概念和基本架构 核心API介绍 应用场景等
183 5
|
人工智能 监控 安全
F5社区学习笔记:API和AI如何改变应用安全?
F5社区学习笔记:API和AI如何改变应用安全?
126 1
|
XML API 数据库
商品详情数据API接口概念(sku详情图属性等全面的解析)
商品详情数据API接口是指一种编程接口(API, Application Programming Interface),它允许开发者或系统以编程方式获取商品的详细信息,包括但不限于SKU(Stock Keeping Unit,库存量单位)的详细信息、商品图片、商品属性、价格、库存状态、用户评价等。这种接口通常由电商平台、商品数据库服务商或第三方数据提供商提供,旨在帮助开发者或企业快速集成商品数据到其应用程序或系统中。
|
jenkins API 持续交付
jenkins学习笔记之十五:SonarSQube API使用
jenkins学习笔记之十五:SonarSQube API使用