前言:纯个人记录使用。
- 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。
- 搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。
- 搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。
参考: https://www.yuque.com/fairy-era/yg511q/xyqxge
文章目录
1、Kubernets介绍
1.1 简介
Kubernetes是Google 团队发起的一个开源项目,用于自动部署、扩展和管理容器化(docker)的应用程序。主要目的是管理跨多个主机的容器。
Kubernetes 中的绝大多数概念都抽象成 Kubernetes 管理的一种资源对象(一切皆资源)。
1.2 架构与组件

Master : 负责管理集群,协调集群中的所有活动,例如调度应用程序、维护应用程序的所需状态、扩展应用程序和滚动更新。
- kube-apiserver:集群控制的访问入口,提供HTTP REST服务。
- kube-controller-manager:集群中所有资源对象的自动化控制中心,负责维护集群的状态,比如程序部署、故障检测、自动扩展、滚动更新等。
- kube-scheduler:负责集群资源调度,按照策略将Pod调度到相应node上。
- etcd:负责存储集群中各种资源对象信息(键值对形式)。
Node:k8s集群工作节点。每个工作节点都有一个kubelet,它管理本节点并且负责与Master主节点通信。每个节点上都需安装Docker相关服务。
-
kubelet :负责维护容器的生命周期,通过控制docker来创建、更新、销毁容器(负责Pod的创建、启动、监控、重启、销毁等工作),同时与Master 节点通讯,实现集群管理的基本功能。
-
kube-proxy:实现集群内部服务发现和负载均衡(代理应用的访问入口,如jupyterhub应用)。
-
docker:负责pod容器应用。
Kubernetes 核心组件:
- etcd:保存了整个集群的状态,就是一个数据库
- apiserver :提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
- controller manager: 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
- scheduler :负责资源的调度、按照预定的调度策略将Pod调度到相应的机器上
- kubelet :负责维护容器的生命周期、同时负责Volume(CSI/Container Storage Interface)和网络(CNI/Container Network Interface)的管理
- kube-proxy :负责为Service提供cluster 内部的服务发现和负载均衡
- docker:负责镜像管理以及Pod和容器的真正运行(CRI/Container R untime Interface)
其他插件:
-
Dashboard :提供集群GUI
-
Metrics-scraper: 为Dashboard提供资源监控
-
Ingress Controller :为服务提供外网接口
-
Coredns: 负责为整个集群提供DNS服务
2、重要资源实战
-
kubectl:k8s集群命令行工具
kubectl [command] [type] [name] [flags]
● command:指定要对资源执行的操作,比如create、get、delete。
● type:指定资源的类型,比如deployment、pod、service。
● name:指定资源的名称,名称大小写敏感。
● flags:指定额外的可选参数。-
command 资源操作命令
# 基本命令 create 创建一个资源 edit 编辑一个资源 get 获取一个资源 patch 更新一个资源 delete 删除一个资源 explain 解释展示资源文档 # 运行调试命令 run 在集群中运行一个指定的镜像 expose 暴露资源为Service,常用于暴露应用端口 describe 显示资源内部信息 logs 输出容器在Pod中的日志 attach 连接运行中的容器,通常用于与正在运行的进程进行交互,查看进程的输出或向进程发送输入。 exec 执行容器中的一个命令(bin/bash) 参数 -i(interactive)交互式 ,-t 启用伪终端 cp 在Pod内外复制文件 rollout 管理版本的发布 scale 扩(缩)容Pod的数量 autoscale 自动调整Pod的数量 # 高级命令 apply 通过yaml文件对资源进行配置 label 更新资源上的标签 # 其他 cluster-info 集群信息 显示集群信息 version 显示当前Client和Server的版本 api-resources 查看集群资源对象 -
type 资源操作类型
# 查看集群所有资源对象 [root@k8s-master ~/test]$ kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KIND namespaces ns v1 false Namespace pods po v1 true Pod nodes no v1 false Node # Pod资源控制器 replicasets rs apps/v1 true ReplicaSet deployments deploy apps/v1 true Deployment # 负载均衡和服务发现 services svc v1 true Service ingresses ing extensions/v1beta1 true Ingress # 资源存储 persistentvolumeclaims pvc v1 true PersistentVolumeClaim persistentvolumes pv v1 false PersistentVolume ...
-
-
常规使用方式
# 创建或更新资源 kubectl apply -f xxx.yaml # 删除资源 kubectl delete -f xxx.yaml # 查看资源 kubectl get(describe) 资源名称
2.1 Namespace
-
Namespace:命名空间,用于进行资源隔离。
-
kubernetes系统中一种非常重要的资源,它的主要作用是用来实现
多套系统的资源隔离或者多租户的资源隔离。 -
默认情况下,kubernetes集群中的所有Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那么此时就可以将两个Pod划分到不同的Namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的“组”,以方便不同的组的资源进行隔离使用和管理。
-
可以通过kubernetes的授权机制,将不同的Namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。
# 查看所有命名空间 [root@k8s-master /data/s0/kubernetes/test]$ kubectl get namespace NAME STATUS AGE default Active 7d5h # 所有未指定的Namespace的对象都会被分配在default命名空间。 kube-node-lease Active 7d5h # 集群节点之间的心跳维护,v1.13开始引入。 kube-public Active 7d5h # 此命名空间的资源可以被所有人访问(包括未认证用户)。 kube-system Active 7d5h # 所有由kubernetes系统创建的资源都处于这个命名空间(calico网络pod) kubernetes-dashboard Active 2d1h # 人为自定义集群资源可视化命名空间 # 查看命名空间中资源 [root@k8s-master /data/s0/kubernetes/test]$ kubectl get pods -n kubernetes-dashboard -o wide(/json/yaml:结果输出形式) NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES dashboard-metrics-scraper-7b59f7d4df-l6ngh 1/1 Running 0 28d 10.244.235.195 k8s-master <none> <none> kubernetes-dashboard-548f88599b-k7824 1/1 Running 1 28d 10.244.169.132 k8s-node2 <none> <none> # 创建命名空间 [root@k8s-master /data/s0/kubernetes/test]$ kubectl create ns test namespace/test created -
2.2 Pods
- pods: Pod 是Kubernetes调度的基本单位,是一组紧密相关的容器集合(至少一个),它们共享PID、IPC、Network 和 namespace。Pod 设计理念是支持多个容器在一个Pod中共享网络和文件系统,可以通过进程间通讯和文件共享这种简单高效的方式组合完成整个服务。每个Pod可以由一个或多个业务容器和一个根容器(Pause)组成。一个Pod表示某个应用的一个实例。



-
Pod 创建与删除
-
pod资源清单
apiVersion: v1 #必选,版本号,例如v1 kind: Pod #必选,资源类型,例如 Pod metadata: #必选,元数据 name: string #必选,Pod名称 namespace: string #Pod所属的命名空间,默认为"default" labels: #自定义标签列表 name: string spec: #必选,Pod中容器的详细定义 containers: #必选,Pod中容器列表 - name: string #必选,容器名称 image: string #必选,容器的镜像名称 imagePullPolicy: [ Always|IfNotPresent|Never] #获取镜像的策略,always:总是从镜像仓库拉取;IfNotPresent:优先使用本地镜像,无再从镜像仓库拉取;Never 只使用本地镜像 command: [string] #容器的启动命令列表,如不指定,使用打包时使用的启动命令 args: [string] #容器的启动命令参数列表 workingDir: string #容器的工作目录 volumeMounts: #挂载到容器内部的存储卷配置 - name: string #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名 mountPath: string #存储卷在容器内mount的绝对路径,应少于512字符 readOnly: boolean #是否为只读模式 ports: #需要暴露的端口库号列表 - name: string #端口的名称 containerPort: int #容器需要监听的端口号 hostPort: int #容器所在主机需要监听的端口号,默认与Container相同 protocol: string #端口协议,支持TCP和UDP,默认TCP env: #容器运行前需设置的环境变量列表 - name: string #环境变量名称 value: string #环境变量的值 resources: #资源限制和请求的设置 limits: #资源限制的设置 cpu: string #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数 memory: string #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数 requests: #资源请求的设置 cpu: string #Cpu请求,容器启动的初始可用数量 memory: string #内存请求,容器启动的初始可用数量 lifecycle: #生命周期钩子 postStart: #容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启 preStop: #容器终止前执行此钩子,无论结果如何,容器都会终止 livenessProbe: #对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器 exec: #对Pod容器内检查方式设置为exec方式 command: [string] #exec方式需要制定的命令或脚本 httpGet: #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port path: string port: number host: string scheme: string HttpHeaders: - name: string value: string tcpSocket: #对Pod内个容器健康检查方式设置为tcpSocket方式 port: number initialDelaySeconds: 0 #容器启动完成后首次探测的时间,单位为秒 timeoutSeconds: 0 #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒 periodSeconds: 0 #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次 successThreshold: 0 failureThreshold: 0 securityContext: privileged: false restartPolicy: [Always | Never | OnFailure] #Pod的重启策略 nodeName: <string> #设置NodeName表示将该Pod调度到指定到名称的node节点上 nodeSelector: obeject #设置NodeSelector表示将该Pod调度到包含这个label的node上 imagePullSecrets: #Pull镜像时使用的secret名称,以key:secretkey格式指定 - name: string hostNetwork: false #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络 volumes: #在该
-

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



