K8S 基础

667 阅读4分钟

相关概念

Pod

Pod是K8S系统中可以创建和管理的最小单元,一个Pod(就像一个豌豆荚)是一个组,这个组中包含一个或多个容器(比如,Docker容器),具有共享存储/网络,以及如何运行容器的规范。同一个Pod中的容器共享一个IP地址和端口空间,并且可以通过localhost相互查找;不同Pods中的容器有不同的IP地址,不同Pod之间通过IP地址彼此通信

Pod特点

  • 最小部署的单元
  • Pod里面是由一个或多个容器组成【一组容器的集合】
  • 一个pod中的容器是共享网络命名空间
  • Pod是短暂的
  • 每个Pod包含一个或多个紧密相关的用户业务容器

yaml 配置字段说明

  • apiVersion: API 版本
  • kind: Pod 资源类型
  • metadata 资源元数据
  • spec 资源规格
  • imagePullPolicy 镜像拉取规则
    • IfNotPresent:默认值,镜像在宿主机上不存在才拉取
    • Always:每次创建Pod都会重新拉取一次镜像
    • Never:Pod永远不会主动拉取这个镜像
  • restartPolicy 重启规则
    • Always:当容器终止退出后,总是重启容器,默认策略 【nginx等,需要不断提供服务】
    • OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
    • Never:当容器终止退出,从不重启容器 【批量任务】

如何快速编写YAML文件

# 尝试运行,并不会真正的创建镜像
kubectl create deployment web --image=nginx -o yaml --dry-run

如果要输出一个文件

kubectl create deployment web --image=nginx -o yaml --dry-run > hello.yaml

导出一个已经存在的Pod的yaml配置文件

kubectl get deploy nginx -o=yaml --export > nginx.yaml

使用YAML创建Pod

kubectl apply -f nginx.yaml

暴露端口,供外部访问

kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=nginx-service -o yaml > nginx-service.yaml

删除一个pod

// 
kubectl get deployment -n XXX
// 先删除对应的控制器
kubectl delete deployment jenkins2
// 再删除Pod

Controller

Controller是在集群上管理和运行容器的对象,Pod是通过Controller实现应用的运维,比如弹性伸缩,滚动升级等。Pod 和 Controller之间是通过label标签来建立关系

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
spec:
  replicas: 1 // 一个副本
  selector:
    matchLabels:
      app: web  // 控制Pod的label
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: web
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}

有状态和无状态 无状态:

  • 认为Pod都是一样的
  • 没有顺序要求
  • 不用考虑在哪个Pod运行
  • 随意进行伸缩和扩展

有状态

  • 上面因素都需要考虑到 例子:有序 比如MySQL主从

Deployment

Deployment主要是用来部署无状态应用

StatefulSet

Statefulset主要是用来部署有状态应用。对于StatefulSet中的Pod,每个Pod挂载自己独立的存储,如果一个Pod出现故障,从其他节点启动一个同样名字的Pod,要挂载上原来Pod的存储继续以它的状态提供服务。 适合StatefulSet的业务包括数据库服务MySQL 和 PostgreSQL,集群化管理服务Zookeeper、etcd等有状态服务

DaemonSet

DaemonSet 即后台支撑型服务,主要是用来部署守护进程

Replication Controller

Replication Controller 简称 RC,是K8S中的复制控制器。RC是K8S集群中最早的保证Pod高可用的API对象。通过监控运行中的Pod来保证集群中运行指定数目的Pod副本。指定的数目可以是多个也可以是1个;少于指定数目,RC就会启动新的Pod副本;多于指定数目,RC就会杀死多余的Pod副本

Replica Set

Replica Set 简称 RS,也就是副本集。RS是新一代的RC,提供同样高可用能力,区别主要在于RS后来居上,能够支持更多种类的匹配模式。副本集对象一般不单独使用,而是作为Deployment的理想状态参数来使用

Job

Service

定义一组Pod的访问规则 作用: 1 服务发现 2 定义一组Pod的访问规则(负载均衡)

ClusterIP:内部使用 NodePort: 外部访问 每个节点都会暴露这个端口
NodeBalance:外部公有云接入

Ingress

Pod和Ingress通过Service进行关联,Ingress作为统一入口,由Service关联一组Pod

Helm

Helm是一个K8S的包管理工具,可以很方便的将之前打包好的yaml文件部署到k8s上,让我们部署服务更加方便高效。

解决问题:

  • 使用helm可以把这些yaml作为一个整体进行管理
  • 实现yaml高效复用
  • 使用helm应用级别的版本管理

三个概念 (1)Helm:一个命令行的工具 (2)chart 把yaml打包,是yaml的集合 (3) 基于chart部署实体应用级别的版本管理

K8S从私有仓库拉取镜像

从私有仓库拉取镜像

集群管理工具 Kubectl

Kubernetes集群管理工具kubectl

参考资料