一、kubernetes是什么?
个人实操学习,可以参考8S快速入门教程,很实用哦:https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/9EX8Cp45
-
k8s是什么?k8s是一个为容器化 应用提供集群部署和管理的开源工具,由 Google 开发。
-
k8s优势
高可用,不宕机,自动灾难回复;
灰度更新,不影响版本升级;
应用部署&服务版本管理,可以一键回滚到历史版本;
方便伸缩扩展(应用伸缩,机器增减),提供负载均衡; -
k8s的部署方式:minikube,裸机部署,云平台
-
K8S架构:Matser-Slave模式
-
什么是Pod? K8S调度、管理的最小单位。一个slave上可以运行一个或者多个Pod;Pod里面运行一个或多个应用容器。
-
什么是Deployment?
deployment通过lable关联pod
Deployment是一个pods控制器,这种控制器并不直接管理pod,而
是通过管理replicaset来间接管理pod。即:deployment管理replicaset,replicaset管理pod。
- Replication Controller(RC):保证一定数量的pod正常运行(副本伸缩,镜像升降)
- ReplicatSet(RS):是RC的升级
- Deployment:在RS基础上增加了版本管理。
控制器根据工作负载的又分为四类:
- Deployment(默认):适合无状态应用,所有pod等价,可替代
- StatulefulSet:有状态的应用,适合数据库这种类型。
- DaemonSet:指定在一个节点上跑一个Pod,常常用来做监控,日志收集等
- Job/CronJob:一次性任务或者根据时间重复性任务。
- 什么是Service?
如下内容来自于:https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/C0fakgwO
K8s中pos上的一个抽象层,主要是提供负载均衡和服务自动发现。
- Service通过label关联pod
- Servcie 生命周期不跟 Pod 绑定,不会因为 Pod 重创改变 IP
- 提供了负载均衡功能,自动转发流量到不同 Pod
- 可对集群外部提供访问端口
- 集群内部可通过服务名字访问
k8s中pod是随时消亡与 重建的,ip经常发生改变,这样对外暴露服务比较难以管理,引入 service可以解决这个问题。
Service 对外暴露服务方式
- ClusterIP(默认):仅在集群内部可访问;HeadLess(ClusterIP=None):当前方法不会分配ip,可以使用数据库中,通过数据库名称访问。
- NodePort:暴露端口到节点,提供了集群外部访问的入口端口范围
固定 30000 ~ 32767- LoadBalancer:需要负载均衡器(云服务商提供),会额外生成一个对外的IP
- Ingress:是集群中服务的外部访问进行管理的API对象,智能路由,反向代理;Ingress资源仅支持用于转发HTTP流量的规则。
- 什么是StorageClass(SC),PersistentVolume(PV),PersistentVolumeClaim(PVC)?
数据存储的一种方式PV/PVC
PVC/PV博客:https://blog.csdn.net/hxpjava1/article/details/103751294
- SC:将存储卷划分为不同的种类,例如:SSD,普通磁盘,本地磁盘,按需使用。 —>管理员预先创建存储类
- PVC:对存储需求的一个申明,可以理解为一个申请单,系统根据这个申请单去找一个合适的 PV 还可以根据 PVC 自动创建 PV。—> 用户创建
- PV:描述卷的具体信息,例如磁盘大小,访问模式。—>运维人员创建,目前交给k8s自动创建。
- k8s存储方式有哪些?
参考博客:https://blog.csdn.net/qq_33261700/article/details/119549172
- emptyDir:是pod调度到节点上时创建的一个空目录,当pod被删除时,emptydir中数据也随之删除,emptydir常用于容器间分享文件,或者用于创建临时目录。
- hostpath:将宿主主机中的文件挂载pod中,Pod调度到哪个节点,则直接挂载到当前节点。
- NFS:不限定节点,不受集群影响。nfs服务:网络文件存储系统。
- PV/PVC:不限定节点,不受集群影响,安全稳定;需要云服务商提供,裸机集群是没有的。
-
什么是confiMap? ConfigMap是一个或多个key/value的形式保存在k8s中,内部可以管理变量也可以管理完整的配置文件内容。
-
什么是Secret?Secret是用来保存敏感数据的k8s资源,例如密码,token,或者秘钥
-
什么是Helm?Helm类似 npm,pip,docker hub, 可以理解为是一个软件库,可以方便快速的为我们的集群安装一些第三方软件。简单化我们前面写yml的步骤。
-
Ingress是什么?Ingress 为外部访问集群提供了一个 统一 入口,避免了对外暴露集群端口。
二、k8s组件介绍
1.k8s架构图
2.K8s组件
该图来自知乎:https://zhuanlan.zhihu.com/p/409971135
三、k8s对象介绍&命令介绍
K8S中的资源对象:
Pod
Deployment|StatefulSet|DaemonSet|Job|CronJob
Service
StorageClass|PersistentVolume|PersistentVolumeClaim
ConfiMap
Secret
四、k8s yaml详解
YAML文件参考博客:https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/9EX8Cp45
Pod参考:https://blog.csdn.net/qq_32485197/article/details/88999075
1.Pod yaml
apiVersion: v1 #必选,可通过 kubectl apiversions查看
kind: Pod #必选,资源类型:Pod,[Deployment,StatefulSet,DaemonSet,Job,CronJob],Service,[StorageClass,PersistentVolume,PersistentVolumeClaim],confiMap,Secret
metadata: # 定义资源的元数据信息
name: string #必选,定义资源名称
namespace: string #必选,指定命令空间
labels: # 可选,自定义标签
- name: string #可选,自定义k-v值
annotations: #可选,自定义注释列表
- name: string
spec:
containers: #必选,pod中定义容器具体信息
- name: string
image: string
imagePullPolicy: string #镜像拉取方式:总是在线拉取;只使用本地镜像;优先使用本地,没有则在线拉取。[Always|Never|IfNotPresent]
command: [string] #容器启动命令列表
args: [strings] #容器启动命令参数
workingDir: string #指定容器的工作目录
volumeMounts: #指定容器挂载的数据卷信息
- name: string #卷名字
mountPath: string #挂载路径,少于512个字符
readOnly: boolean #指定是否为只读模式
ports: #指定需要暴露的端口
- name: string #端口名称
containerPort: int #容器端口号
hostPort: int #宿主机端口
protocol: string #端口协议
env: #指定容器运行前需要的环境变量
- name: string
value: string
resources: #资源限制和请求设置
limits: #资源限制设置
cpu: int #cpu限制,单位为core数
memory: strin #内存限制,单位可以为Mib/Gib
requests: #资源请求设置
cpu: string #设置容器启动的cpu要求
memory: string #设置容器内存要求
livenessProbe: #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
exec: #对pod的exec检查方式,进入容器执行如下命令
command: [string] #定制检查脚本
httpGet: # httpGet检测
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
tcpSocket: #tcp检测
port: number
initialDelaySeconds: 5 #容器启动完成后,kubelet在执行第一次探测前应该等待5秒默认是0秒,最小值是0。
periodSeconds: 60 #指定kubelet每隔60秒执行一次存活探测。默认是10秒。最小值是1
timeoutSeconds: 3 #对容器健康检查探测等待响应的超时时间为3秒,默认1秒
successThreshold: 1 #检测到有1次成功则认为服务是`就绪`
failureThreshold: 5 #检测到有5次失败则认为服务是`未就绪`。默认值是 3,最小值是 1。
restartPolicy: string #pod重启策略[Always|Never|OnFailure],Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
nodeSelector: #定义Node的label过滤标签,以key:value的格式指定。节点选择,先给主机打标签kubectl label nodes kube-node01 key1=value1
key1: value1
imagePullSecrets: #Pull镜像时使用的secret名称,以name:secretKeyName格式指定
- name: string
hostNetwork: false #是否使用主机网络模式,默认为false。如果设置为true,表示使用宿主机网络,不使用docker网桥
volumes: #在该pod上定义共享存储卷列表
- name: string #共享存储卷名称 (volumes类型有很多种)
emptyDir: {} #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值, 存储卷三种方式:emptyDir,gitRepo,hostPath;emptyDir:一个pod创建两个容器,一个pod提供请求服务,另一个pod提供文件存储,pod删除,存储卷就删除;gitRepo:使用docker镜像提供存储;hostPath:宿主机路径,pod删除,存储卷还在(在多个node节点要创建路径)。nfs:使用共享存储(多个pod要在共享存储中创建多个目录)。
hostPath: string #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
path: string #Pod所在宿主机的目录,将被用于同期中mount的目录
secret: #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
scretname: string
items:
- key: string
path: string
configMap: #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
name: string
items:
- key: string
path: string
2.Deployment
apiVersion: v1
kind: Service
metadata:
name: string
namespace: string
spec:
replicas: 10 #指定副本的数量
selector: #用来查找关联的Pod,通过标签匹配
matchLabels:
- name: string #根据如下pod中的 labels中的字段来填写
template: #定义Pod
metadata:
name: string
namespace: string
labels:
- name: string
containers: #可以定义多个容器,但是我们为了方便管理,一个Pod中只跑一个容器
- name: string
image: url
- name: string1
image: url1
3.Service
apiVersion: v1
kind: Service
metadata:
name: string
spec:
selector: #service也是通过label匹配的
name: string
type: CluserIp #转发K8S后端服务的四种方式: cluserIp(默认),仅仅在集群内部可用;NodePort,暴露端口到节点,提供集群外部访问入口,端口范围默认30000到32767;loadBlance,需要负载均衡器,会额外生成一个对外的IP;Headless(clusterIp=None),适合数据库,不分配IP。
port:
- port: int
targetPort: int
# type: NodePort #该段注释为多端口暴露
# port:
# - port: int
# name: string
# targetPort: int
# nodePort: 30000
# - port: int
# name: string
# targetPort: int
# nodePort: 31000
4.StorageClass(SG)
#创建SC,运维人员以来SC动态创建PV核心API: StorageClass(可以自动创建PV的机制)
# https://www.cnblogs.com/panwenbin-logs/p/12196286.html
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: slow
provisioner: kubernetes.io/aws-ebs #provisioner 存储分配器
parameters: #存储参数
type: io1
iopsPerGB: "10"
fsType: ext4
reclaimPolicy: delete #回收策略: Delete 或者 Retain,没有指定默认为Delete。
5.PersistentVolumeCliam(PVC)
#创建PVC,用户提出创建需求
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongodata
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "local-storage"
resources:
requests:
storage: 2Gi
6.PersistentVolume(PV)
# 创建PV,运维人员需要不断的创建PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodata
spec:
capacity: #PV容量
storage: 2Gi
volumeMode: Filesystem # Filesystem(文件系统) Block(块)
accessModes: #ReadWriteOnce:可以被一个node读写。缩写为RWO;ReadOnlyMany:可以被多个node读取。缩写为ROX。;ReadWriteMany:可以摆多个node读写。缩写为RWX。
- ReadWriteOnce # 卷可以被一个节点以读写方式挂载
persistentVolumeReclaimPolicy: Delete #回收机制
storageClassName: local-storage #PV和PVC通过storageClassName绑定
local:
path: /root/data
nodeAffinity:
required:
# 通过 hostname 限定在某个节点创建存储卷
nodeSelectorTerms: # nodeAffinity属性是必须要指定的,因为local模式一定要确定数据保存在哪个机器
- matchExpressions: #label匹配的volumne绑定PVC上
- key: kubernetes.io/hostname
operator: In
values:
- node2
7.ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: mongo-config
data:
mongoHost: mongodb-0.mongodb
8.Secret
apiVersion: v1
kind: Secret
metadata:
name: mongo-secret
# Opaque 用户定义的任意数据,更多类型介绍 https://kubernetes.io/zh/docs/concepts/configuration/secret/#secret-types
type: Opaque #三种类型:Opaque:base64 编码格式的 Secret,用来存储密码、密钥等;Service Account:用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount 目录中;kubernetes.io/dockerconfigjson : 用来存储私有docker registry的认证信息。
data:
# 数据要 base64。https://tools.fun/base64.html
mongo-username: bW9uZ291c2Vy
mongo-password: bW9uZ29wYXNz
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。