K8s具体了解(笔记)

大约3个月一更新,迭代速度快

Cloud Native Apps云服务app(现在流行)

Serverless,Knative,(后面的发展)   

FaaS: 函数即服务

微服务架构

​ 单体应用程序(巨石应用) -> 分层 ->微服务(服务注册,服务发现)

​ 30-50个微型的独立的服务,网状的关系

​ 非静态,动态服务发现(在服务总线上查找有没有自己需要的服务,一旦出现故障,服务会被消除)

​ 服务编排系统(把服务给编排系统,系统会选择最合适的节点) 容器 镜像

​ 容器本身提供了托管运行应用的底层逻辑,而容器编排(Orchestration)才是真正产生价值的位置所在

​ 任务:

  • ​ 1.容器的提供和部署
  • ​ 2.容器的冗余及可用性
  • ​ 3.应用规模的自动伸缩
  • ​ 4.容器之间自动迁移
  • ​ 5.容器之间资源分配
  • ​ 6.必要的服务暴露到外端,让外部的客户端能够访问
  • ​ 7.负载均衡
  • ​ 8.健康状态检测
  • ​ 9.应用程序的配置

​ 总结:

  • ​ (1)服务注册和服务发现
  • ​ (2)负载均衡
  • ​ (3)配置和存储管理
  • ​ (4)健康状态检测
  • ​ (5)自动扩容缩容部署
  • ​ (6)零宕机

编排系统:K8S、Docker Swarm、Apache Mesos and Marathon

k8s物理结构 kubernetes Cluster : Masters(control plane) + Nodes(worker)

在这里插入图片描述
镜像运行在node上面,来自于Registry

Master构造

在这里插入图片描述

etcd 专门用来保存配置的系统

Scheduler调度器来调度哪个node节点

API为声明式(应用程序开发中有两种范式:声明式和陈述式)

在这里插入图片描述

容器是利用内核中的6种名称空间技术来实现的程序运行的环境隔离

​ PID,Network, Mount, IPC, USER,UTS

Dokcer中的网路模型:closed,bridge,joined,host

一个Pod中可以存在多个容器,容器之间好多是共享的,

Pod底层还有一个容器,infra(提供共享的东西)

Kubernetes Components

  • Master Components
    
    - kube-apiserver
    - etcd
    - kube-scheduler
    - kube-controller-manager
    - cloid-controller-manager
    
    Node Components
    
    - kubelet
    - kube-proxy
    - Container Runtime
    
    Addons(附加组件)
    
    - DNS
    - CNI(容器网络插件 fannel,calico...)(必须的基础组件)
    - Web UI(Dashboard)
    - Container Resource Monitoring
    - Cluster-level Logging
    

k8s api:REST API(http/https)

  • resource -> object
  • method: GET,PUT,POST,DELETE,PATCH,…
  • 人:

Kubernetes Objects

​ Basic

  • ​ pod

  • ​ Service

  • ​ Namespace

  • ​ Volume

    High-level(建立在基础对象之上)

  • ReplicaSet

  • Deployment

  • DaemonSet

  • StatefulSet

  • Job

Pod Controller, -> 依靠 Deployment

给每一个资源对象创建一个标签label

在这里插入图片描述

守护进程,不需要容器,kubelet 和 docker 都不需要

在这里插入图片描述

Pod运行

在这里插入图片描述

创建Pod两种方法:自己创建+Pod Controller

Pod Controller:

​ Deployment ->ngx-deploy ->ngx Pod

​ Service ->ngx-svc

一些常用命令

-o wide(长格式)

-o json

-o yaml

kubectl api-resources #查看支持的api

kubectl get ns(namespace) #查看命名空间

删除资源之前先指定类型

kubectl delete namespace deploy

kubectl delete ns/deploy1 ns/deploy2 一次删除多个

kubectl describe #输出描述信息

kubectl create deployment -h

kubectl create service clusterip <pod_name> --tcp=80:80 #创建一个service

kubectl create deploy NAME --image=[镜像]

kubectl get svc -n kube-system #查看kube-dns

kubectl scale #扩容

kubectl scale --replicas=3 deployment myapp

在这里插入图片描述

apiserver是唯一的etcd的客户端

kubernetes API is a HTTP API with JSON (额外支持gRPC协议)

RESTful 表征状态转移的架构范式

http://localhost:9999/restfulservices/v1/users/{id}

API Server:

api接口中的资源分成多个逻辑组合

每个组合: API group,群组

每个组可以独立演进,每个组可以多版本并存

资源对象的配置格式

    • api server接受和返回的所有的json对象都遵循同一个模式,他们都具有“kind"和”apiVersion“字段,用于标识对象所属的资源类型、API群组及相关的版本
    • 大多数的对象或列表类型的资源还需要具有三个嵌套型的字段matedata、spec和status
  • metadata字段为资源提供元数据信息,例如名称、隶属的名称空间和标签等;
  • spec用于定义用户期望的状态,不通的资源类型,其状态的意义各有不同,例如pod资源最为核心的功能在于运行容器;
  • status则记录着活动对象的当前状态信息,它由kubernetes系统自行维护,对用户来说就是只读

“kubectl api-resources”命令可以获取集群支持使用的所有资源类型

和解循环

在这里插入图片描述

资源对象管理方式

kubectl的命令可分为三类

  • 陈述式命令(Imperative Commands)
  • 陈述式对象配置(Impoerative Object Configuration)
  • 声明式对象配置(Declear Onject Configuration)

NMT Nginx,MySQL,Tomcat

kubectl explain

进入容器交互(-c当多个容器的时候用)

kubectl exec pod-demo -c bbox -n prod -it – /bin/sh

获取日志(-c多个容器的时候用)

kubectl logs pod-demo -n pord -c myapp

外部访问集群内部

  • Service, NodePort
  • hostPort
  • hostNetwork

一个pod里面可以运行多个容器

(CNCF组织)

label, label selector
在这里插入图片描述

示例:

在这里插入图片描述

标签选择器用于表达标签的查询条件或选择标准,Kubernetes API目前支持两种选择器

基于等值关系和基于集合关系

kubectl get pods -n prod --show-labels

kubectl label -h

kubectl label pods pod-demo -n prod rel- #删除rel标签

资源注解(annotation) 仅用于为资源提供“元数据”信息

kubectl exec -it – /bin/sh #进入容器里面

在这里插入图片描述

在这里插入图片描述

Logo

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

更多推荐