参考链接
笔记1

kubernetes架构及组件详细介绍 - Shirley的文章 - 知乎
https://zhuanlan.zhihu.com/p/669267473

常用网站

https://json2yaml.com/convert-yaml-to-json
https://jimmysong.io/book/kubernetes-handbook/architecture/perspective/

阿里云文档:https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/product-overview/common-scenarios?spm=a2c4g.11186623.0.0.60b74ffdiS3ovz

常用命令

kubectl explain pod
kubectl explain pod.metadata






实验环境搭建

准备软件,如果需要软件包,可以留言,我到时候发给诸位老铁
VMware player、centos8、mobaxterm 多窗口终端

配置

步骤1:打开VMware,导入centos iso镜像。启动一个正常的虚拟机master,然后克隆master出来做2个node节点。

步骤2: 配置静态ip地址

2.1 配置网络情况
查看VMware网关在这里插入图片描述

fig1
fig2
可以参考下面图式改一下配置,
fig3

3、配置终端
同样也是一样的操作,配置一个master,然后duplicate两个副本出来,在修改。
fig4

Minkube搭建

minikube 官网:https://minikube.sigs.k8s.io/docs/start/?arch=%2Flinux%2Fx86-64%2Fstable%2Fbinary+download
准备一台物理机:安装 docker
执行命令:




第3章 资源管理

k8s中所有的内容都抽象为资源。用户通过操作资源来管理k8s

fig1
pod里面跑容器,容器里面跑程序
fig2

yaml 语言

语法规则:大小写敏感、缩进左对齐、#表示注释

yaml 支持的数据类型

布尔类型:true|True
整型:123
浮点型:3.14
日期类型:yyyy-mm-dd
字符串
对象: 常规形式 和 用大括号包裹
数组: 使用 - 方式
 例如  
 adress:
   - a
   - b

资源管理方式

fig3
fig4
1、命令式对象管理
kubectl 是 k8s集群的命令行工具,对集群本身进行管理,并能够在集群上进行容器话应用的安装部署。

kubectl [command] [type] [name] [flag]

kuberctl --help 对资源操作的命令;

2、命令式对象配置,通过命令配置和配置文件去操作kubernets资源

kubectl create、patch -f nginx-pod.yaml

3、声明式对象配置
kubectl apply -f xx.yaml
kubectl apply -f xx.yaml

kubectl 是否可以在node节点使用命令?
kubectl 运行时根据配置文件来的 有个kube文件,如果要在node上使用命令操作k8s,就要复制该文件

第4章 实战入门

基础术语说明
Namespace资源隔离
PodK8s管理的基础单元
Label标签选择机制
Deployment管理Pod
Service通过标签跟选择器

4.1 namespace

4.2 pod

4.3 Label

添加选择标识。
标签的特点:

  • 以key/value 的形式附加到各种对象上,如 node、pod、service
  • 资源对象可以定义任意数量的label,同一个label也可以被添加到任意数量的资源对象上
  • label通常在资源对象时确定

标签选择器:

  • 基于等式的label select
  • 基于集合的label selector

4.4 Deployment

在k8s中,pod是最小的控制单元。一般都是通过Pod控制器来完成的。Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建pod。

k8s中pod的控制的种类有多种形式,其中一种就是deployment

4.5 Service

pod 重新创建,Pod的ip是虚拟的,所以会变化;

Service 可以看作是一组同类 Pod 对外的访问接口,借助service,应用可以方便地实现服务发现和负责均衡
请求先到Servcie,然后转发到后面的pod;
Service
Service的IP永远不会变的

在这里插入图片描述

第5章 Pod详解

Pod的结构:包含一个或者多个容器,分为两类

  • 用户程序所在的容器,数量可多可少
  • Pause容器,每个Pod都会有的一个根容器,它的作用有两个(1)可以以它作为依据,评估整个Pod的健康状态(2)可以在根容器上设置IP。 Pod之间的往来通信是通过虚拟二层网络技术来实现的;

在kubernetes中基本所有资源的一级属性都是一样的,主要包含5部分:

  1. apiVersion 版本,由kubernetes内部定义,版本号必须可以用kubectl api-versions 查询到
  2. kind 类型,由kubernetes内部定义,版本号必须可以用 kubectl api-resources 查询到
  3. metadata 元数据,主要是资源标识和说明,常用的有name、namespace、labels等
  4. spec 描述,这是配置中最重要的一部分,里面是对各种资源配置的详细描述
  5. status 状态信息,里面的内容不需要定义,由kubernetes自动生成

Spec常见的属性
spec描述

pod 的配置

基本配置、镜像拉去、启动命令、环境变量、端口配置、资源配额

kubectl explain pod.spec.containers	 属性是pod配置中关键的一项指标
kubectl describe pod [pod名称] -n [namespace名称]

pod的配置
imagePullPolicy 镜像拉取容器
拉取镜像策略

在这里插入图片描述

  • 容器端口
    一个物理机跑多个pod、pod里面有多个容器
    在这里插入图片描述
    访问容器中的容器需要用的podId:容器的端口
vim pod-ports.yaml
kubectl create -f pod-ports.yaml

kubernets 提供了对内存和cpu资源进行配额的机制。这种机制主要通过resources选项实现,有两个字段设置
limits:设置运行时容器的最大占用资源,超过limits时容器被终止,并进行重启;
requests:设置容器最小资源,如果环境资源不够,容器无法启动

pod 生命周期

  1. pod 创建和终止
  2. 运行初始化容器(init container)过程。在主容器运行前初始化
  3. 运行主容器
    • 容器启动后钩子,终止前的钩子
    • 容器的存活性探测(liveness probe)、就绪性探测(readiness probe)
  • pod终止过程
    容器生命周期
    Pod 生命周期出现5种相位
  • 挂起(pending):apiserver已经创建pod资源,但它尚未被调度完成或仍然处于下载镜像过程中
  • 运行成功:pod已经被调度到某节点,并且所有的容器都已经被kubelet创建完成
  • 成功(Succeeded):所有容器都已经成功终止并且不会被重启
  • 失败(Failed):所有容器都已经终止,但至少有一个容器终止失败。
  • 未知(Unkonwn)

创建pod过程
在这里插入图片描述

终止pod过程

pod终止过程

初始化容器
初始化容器是在pod的主容器之前要运行的容器,主要做一些主容器的前置工作。
在这里插入图片描述
钩子函数
钩子函数能够感知自身生命周期中的事件,并在相应的时刻到来时运行用户指定的程序代码kubernetes在主容器的启动之后和停止之前提供了两个钩子函数:
post start:容器创建之后执行,如果失败了会重启容器
pre stop :容器终止之前执行,执行完成之后容器将成功终止,在其完成之前会阻塞删除容器的操作

钩子函数 Exec命令,在容器内执行一次命令

在这里插入图片描述

容器探测:找到出了问题的pod,然后移除

在这里插入图片描述

liveness 探针决定是否重启容器,readiness probes决定是否转发流量到容器中
两种探针目前均支持三种探测方式

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐