k8s知识

statefulset和deployment的区别?

statefulsetdeployment
pod启动有顺序,按照后缀0、1、2的顺序启动;
并且pod-0状态变为ready或running之后,pod-1才会启动
随机
管理有状态应用管理无状态应用

无状态应用是什么概念?

无状态应用的本质就是一个应用的多个实例之间完全没有区别,每个请求在不同的实例返回的结果都是一样的,k8s对他们的处理也是随机的,比如缩容。

pod有哪些状态?

pending
ready
running

kube scheduler的作用?

先随便说一个:调度pod部署在哪个node上。

存储部分

volume这个概念的引入是为了解决什么问题?

  1. 容器重启后,原本的文件丢失,volume可以把文件存储到外面,不随着容器的生命周期而存亡。
  2. pod中几个容器需要共享文件。

volume可以单独定义吗?

不能,只能在pod中定义。
这个问题的重点应该是和pv区分(我猜)。pv可以单独定义,volume应该算是个抽象概念。
pod定义是这么写的:

spec:
    template:
        volumes:				# 这里定义volume
        - name: hub-db-dir
          persistentVolumeClaim:
            claimName: hub-db-dir-dev

volume的生命周期有多长?

和挂载它的pod一样长,但是Volume里面的文件可能在Volume消失后仍然存在,这取决于Volume的类型。
这个问题。。我觉得是为了强调volume是一个抽象概念,在k8s里不是一个有实体的东西(相对的,pv,pvc,emptyDir这些都是有具体定义的东西)

k8s的卷有哪两种大类?分别有哪些常用的?(不知道咋问)

(待编辑)
临时卷和持久卷。
临时卷:emptyDir,ConfigMap,Secret
持久卷:hostPath,PV,PVC

  • emptyDir:一种简单的空目录,主要用于临时存储。
  • hostPath:将主机某个目录挂载到容器中。
  • ConfigMap、Secret:特殊类型,将Kubernetes特定的对象类型挂载到Pod。
  • persistentVolumeClaim:Kubernetes的持久化存储类型,

emtpyDir具体是怎么存储的?

将Volume的内容写在Pod所在node的磁盘上。当pod部署到具体node时便会创建,随着pod死亡而一起消失。

什么场景用emtpyDir?

因为它的内容会随着pod删除而消失,所以它不能用作持久化存储。我觉得有的用处是可以让pod内容器的共享文件(测试时候用起来方便点)。
(上面都是猜的)
网上抄的:

  • 缓存空间,例如基于磁盘的归并排序。
  • 为耗时较长的计算任务提供检查点,以便任务能从崩溃前状态恢复执行。

hostPath具体怎么存储的?

它是存储在node上,有一个限制是:如果pod重启后没有调度到上一次的node上,就读不到之前hostPath存的东西。

HostPath存储的内容与节点相关,所以它不适合像数据库这类的应用,想象下如果数据库的Pod被调度到别的节点了,那读取的内容就完全不一样了。

hostPath的缺点?

  • HostPath的内容是存储在节点上,导致只适合读取。(相对的是“跨节点存储“,不管pod调度到哪个node都可以读取)

  • Files or directories created with HostPath on the host are only writable by root. Which means, you either need to run your container process as root or modify the file permissions on the host to be writable by non-root user, which may lead to security issues

  • You should NOT use hostPath volume type for StatefulSets

  • Helm不能兼容hostPath Volume(?)

hostPath的主要应用场景?

抄的:
Some uses for a hostPath are:

  • running a Container that needs access to Docker internals; use a hostPath of /var/lib/docker
  • running cAdvisor in a Container; use a hostPath of /sys

statefulset为什么不能用hostPath的volume类型?

pv和pvc在k8s中属于什么概念?

api资源

pv是什么级别的资源?

集群级别,不需要申明namespace

pv和pvc的关系是什么?

pvc消费pv

pv有哪两种供应方式?分别怎么实现?

静态供应和动态供应。

persistentVolumeReclaimPolicy有哪几种?分别代表什么意思?

“Retain”, “Recycle”, and “Delete”

  • Delete:For dynamically provisioned PersistentVolumes, the default reclaim policy is “Delete”. This means that a dynamically provisioned volume is automatically deleted when a user deletes the corresponding

  • Retain:The automatic behavior of “delete” might be inappropriate if the volume contains precious data. In that case, it is more appropriate to use the “Retain” policy. With the “Retain” policy, if a user deletes a PersistentVolumeClaim, the corresponding PersistentVolume will not be deleted. Instead, it is moved to the Released phase, where all of its data can be manually recovered.
    当删除与之绑定的PVC时候,这个PV被标记为released(PVC与PV解绑但还没有执行回收策略)且之前的数据依然保存在该PV上,但是该PV不可用,需要手动来处理这些数据并删除该PV。
    这里你可能会觉得矛盾,你让这个PV变为可用,为什么还要删除这个PV呢?其实所谓可用就是删除这个PV然后建立一个同名的。

  • Recycle:1.14之后已经废弃

pv、pvc是如何绑定的?

绑定规则:

参数描述
VolumeMode主要定义 volume 是文件系统(FileSystem)类型还是块(Block)类型,PV 与 PVC 的 VolumeMode 标签必须相匹配。
StorageclassPV 与 PVC 的 storageclass 类名必须相同(或同时为空)。
AccessMode主要定义 volume 的访问模式,PV 与 PVC 的 AccessMode 必须相同。
Size主要定义 volume 的存储容量,PVC 中声明的容量必须小于等于 PV,如果存在多个满足条件的 PV,则选择最小的 PV 与 PVC 绑定。

在这里插入图片描述

“如果当前环境中没有合适的PV和我的PVC绑定,那么我创建的POD不就失败了么?”

的确是这样的,不过如果发现这个问题,那么就赶快创建一个合适的PV,那么这时候持久化存储循环控制器会不断的检查PVC和PV,当发现有合适的可以绑定之后它会自动给你绑定上然后被挂起的POD就会自动启动,而不需要你重建POD。

网络

CNI是什么

容器网络接口CNI(Container Network Interface)。
Kubernetes本身并不负责网络通信,Kubernetes提供了CNI,具体的网络通信交给CNI插件来负责。

常见的CNI插件说几个

Flannel,Calico

K8s要求pod要怎么通信?

使用非NAT网络连接,即收到的数据包的源IP就是发送数据包Pod的IP。同时Pod与节点之间的通信也是通过非NAT网络。但是Pod访问集群外部时源IP会被修改成节点的IP。

简述k8s的网络。

见另一篇详细:

Service主要是为了解决什么问题?

一句话:pod的ip会随着重启更新经常变,需要有一个固定的ip去访问。
详细点:
举个例子,一个deployment里有3个相同功能的pod,他们的功能相同,都是数据库操作。他们分别有自己的ip1,ip2,ip3,我需要做数据库操作时可以单独使用ip1或ip2或ip3,但是如果我一直用的ip1,某一天pod1挂了,我就需要去找ip2或ip3具体的ip值是多少。这样的话,每次pod出问题都要换ip,很麻烦。
service的作用,粗浅地说,就是可以把上面说的3个pod的ip统一成一个ip,或者域名,而且pod重启或怎么样也不会改变。
参考:https://support.huaweicloud.com/basics-cce/kubernetes_0024.html
在这里插入图片描述

service如何对应到pod?

pod上有label,service通过selector选择label
例子见:

如何访问service?或者说service的ip?

service有哪些类型?区别是?

  • clusterIP

service里的endpoints是干嘛用的?

Kubernetes的一种资源对象。Kubernetes正是通过Endpoints监控到Pod的IP,从而让Service能够发现Pod。

$ kubectl get endpoints
NAME         ENDPOINTS                                     AGE
kubernetes   192.168.0.127:5444                            7h19m
nginx        172.16.2.132:80,172.16.3.6:80,172.16.3.7:80   5h48m

$ kubectl describe svc nginx
Name:              nginx
......
Endpoints:         172.16.2.132:80,172.16.3.6:80,172.16.3.7:80
......

服务发现是什么意思?

服务发现实际上包含两个功能点:

  • 服务注册
  • 服务发现

服务发现怎么实现的?

通过node上的kube-proxy实现。实际上Service相关的事情都由节点上的kube-proxy处理。
除了记录Service和IP/端口对的关系,kube-proxy还会监控Service和Endpoint的变化,从而保证Pod重建后仍然能通过Service访问到Pod。

负载均衡指什么?

service把请求分发到它对应的几个pod上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值