K8S学习
K8s具体了解(笔记)大约3个月一更新,迭代速度快Cloud Native Apps云服务app(现在流行)Serverless,Knative,(后面的发展)FaaS: 函数即服务微服务架构单体应用程序(巨石应用) ->分层->微服务(服务注册,服务发现)30-50个微型的独立的服务,网状的关系非静态,动态服务发现(在服务总线上查找有没...
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 #进入容器里面
更多推荐
所有评论(0)