目录

1.k8s常用命令有哪些?

参数解释:
-n :指定名称空间
-o :详细信息
-w :动态监控
kubectl describe //查看详细
kubectl get //索要资源
kubectl apply -f 资源清单的路径 //创建资源
kubectl delete -f 资源清单的路径 //删除资源
kubectl exec -it test-6799fc88d8-42gkv -c nginx -- bash //进入pod容器
kubectl run test --image=nginx //启动容器
kubectl explain pod //查看帮助配置清单
kubectl --context=d get pod --show-labels // 查看标签
kubectl --context=d get namespace //查看名称空间
kubectl --context=d get deployments //查看控制器
kubectl --context=d delete -n jeff //查看控制器
kubectl --context=d describe pods -n sg-bs bikecompute-675b979885-l8xtz //查看详情
kubectl rollout history deployment test // 版本历史
kubectl rollout undo deployment test // 回滚上一个版本
kubectl rollout undo deployment test --to-revision=1 // 回滚指定版本

2.报错查看各种日志方法?

journalctl -f -u kubelet.service //查看报错日志
kubectl logs -f -n kube-system coredns-6d56c8448f-5zzwn // 查看dns日志
tail -f /var/log/messages //查看系统日志
kubectl describe pod pod服务名字 //查看pod启动失败原因,pod报错信息

3.k8s的组建有哪些?

架构图:

kube-apiserver:中央管理器,各个组件的调用入口
etcd:集群数据库,存储节点的基础数据,比如:cpu,磁盘大小等
scheduler:调度器,调度数据
kubelet:node节点接受master的kube-apiserver发来的部署信息
kube-proxy:node网桥,建立node容器网络互通
controller-manager:kube-apiserver告诉控制器pod创建好了,控制器监控pod状态,监控数据
最少需要6套认证

4.k8s中安全机制是什么?

组件之间安全机制:证书,根据上图可见最少6套证书

5.常用的控制器有哪些?

k8s中控制器分为:deployment、DaemonSet、StatufluSet
Deployment:一般用来部署长期运行的、无状态的应用
特点:集群之中,随机部署
DaemonSet:每一个节点上部署一个Pod,删除节点自动删除对应的Pod(zabbix-agent)
特点:每一台上有且只有一台
StatudfluSet: 部署有状态应用
特点:有启动顺序

6.service类型有哪些?

# CluserIP : 向集群内部暴露一个IP,外部无法访问

# NodePort : 在宿主主机中开启一个端口与负载均衡IP的端口一一对应,外界可以使用宿主主机的端口访问集群内部服务,端口随机,也可以固定端口。一般测试用,正式环境不实用,因为端口占用严重

# LoadBalancer:是实现暴露服务的另一种解决方案,它依赖于公有云弹性IP实现

# ExternalName service 是sercice的一个特例,它没有选择器,也没有定义任何端口。它的作用是返回集群外service的外部别名。它将外部地址经过集群内部的再一次封装(实际上就是集群DNS服务器将CNAME解析到外部地址上),实现了集群内部访问即可。例如你们公司的镜像仓库,最开始时用ip访问,等到后面域名下来了再使用域名访问。你不可能去修改每处的引用。但是可以创建一个ExternalName,首先指向到IP,等后面再指向域名

7.ingress-Nginx工作原理?

ingress-Nginx:负载均衡器
service主要作用:提供负载均衡
ingress主要作用:提供域名转发集群流量入口
ingress工作原理:根据ingress配置清单,动态生成Nginx配置,并且使其生效,之后通过nginx反向代理转发流量到pod中
Nginx配置文件:vi /etc/nginx/nginx.conf

8.前端请求www.baidu.con响应流程?讲出k8s内部调用?

常规版本:

1.前端输入www.xxxx.com
2.本地hosts文件寻找ip地址,如果没有找到进行第三步,找到进行第四步
3.DNS域名解析ip地址
4.浏览器带着ip访问服务器进行三次握手,建立tcp连接
5.浏览器发出http请求报文
6.进入云服务外部网关(k8s外部网关),服务器接收到请求
7.外部云服务网关根据ingress配置的域名转到对应的ingress-nginx
8.ingress-nginx生成动态nginx
9.nginx转到service
10.service转到自己编写的内部反向代理网关
11.内部代理网关转到相应的pod
12.pod有可能需要进行rpc调用
13.pod返回响应结果
14.浏览器解码渲染

9.讲讲pod的生命周期?

pod生命周期:
1.创建pod
2.创建主容器
3.依次创建业务容器
4.执行回调钩子
5.进行探测(监控容器是否活着,和监控是否能被外网访问,容器挂了会自动创建新的)
6.执行结束回调钩子
7.结束业务容器
8.结束主容器
9.销毁pod

10.主容器作用?

主容器作用:
1.提供pod中基础网络(基础命名空间)
2.提供共享储存
3.监控业务容器

11.配置清单基本结构?

apiVersion :apps/v1   #指定k8s部署的api版本号
kind : Deployment #指定资源类型(pod)
metadata : #记录部署应用的基础信息
name: admin
namespace: sg-bs
spec : #指定部署详情 # k8s部署一个yaml的应用:kubectl apply -f [配置清单]

pod清单

# kubectl explain Pod # 查看配置清单帮助
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: nginx
image: nginx
- name: tomcat
image: tomcat

12.ingress设置重定向方式有哪些?

目的:访问www.test.com重定向到https://www.baidu.com
方式一:直接在Ingress配置清单设置。
方式二:在配置中心configMap中配置,然后在Ingress配置清单中配置configMap中的值。
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: ingress-ingress-nginx-tls
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/permanent-redirect: https://www.baidu.com
spec:
rules:
- host: www.test.com
http:
paths:
- path: /
backend:
serviceName: wordpress-nginx
servicePort: 80

13.configmap?使用configmap挂载方式

configmap是配置中心,其他地方需要使用就挂载configmap

创建configmap:

# 创建名称空间
apiVersion: v1
kind: Namespace
metadata:
name: sg-bs
labels:
app: sg-bs
--- # ConfigMap是名称空间级资源
apiVersion: v1
kind: ConfigMap
metadata:
name: test-configmap
namespace: sg-bs
data: # 健 : 值
level: debug # 配置的信息

使用configmap:

使用configmap中的level:debug

## 使用挂载方式,将配置文件挂载到容器中
# 使用
kind: Deployment
apiVersion: apps/v1
metadata:
name: nginx-config
spec:
selector:
matchLabels:
app: nginx-config
template:
metadata:
labels:
app: nginx-config
spec:
containers:
- name: nginx
image: nginx
volumeMounts: # 挂载
- mountPath: /etc/nginx/conf.d # 挂载路径
name: nginx-config-configmap # 存储卷名字 volumes:
- name: nginx-config
persistentVolumeClaim:
claimName: nginx-config
- name: nginx-config-configmap
configMap:
name: test-configmap # ConfigMap名字
items:
- key: level
path: level # 最终路径为:/etc/nginx/conf.d/level

14.k8s存储卷有哪些?

https://www.cnblogs.com/guyouyin123/p/15630025.html#

1.emptyDir:pod调度到节点时创建的临时目录,pod删除随之删除,用于容器间分享文件
2.hostpath:节点存储卷,挂载宿主机的文件或目录到pod中
3.pv/pvc:外部存储系统中的一款存储空间,具有持久性,生命周期独立于pod
PV:描述一个具体的Volume属性,比如Volume的类型、挂载目录、远程存储服务器地址等。相当于磁盘分区
PVC:描述 Pod想要使用的持久化属性,比如存储大小、读写权限等。
4.StorageClass:充当pv模版,动态创建pv,自动构建相对应的pv持久化存储卷
5.configmap:配置中心,挂载到pod即可以使用

15.Secret是什么?

Secret将密码转为密文,写入config中,起到加密的作用
使用方式:https://www.cnblogs.com/guyouyin123/p/15668227.html

16.什么是容器探针?

容器探针:就是检查容器的状态。

17.健康检查方式有哪些?存活性,就绪性

健康检查方式2种:
1.存活性探测:检查容器是否正常运行
2.就绪性探测:检查容器是否能够对外提供服务 两者维度不一样
两者处理方式不一样:
存活性检查失败:把容器删掉
就绪性检查失败:移除集群(移除负载均衡)

18.存活性探测有哪些方式?

存活性:livenessProbe
就绪性:readinessProbe
存活性探测有3种方式:
1.ExecAction:在容器内执行指定的命令。看执行成功与否
2.TCPSocketAction:对指定端口上Pod的IP地址执行TCP检查。相当于ping
3.HTTPGetAction:GET在指定的端口和路径上针对Pod的IP地址执行HTTP请求。相当于http请求服务内部的接口,一般服务内部创建一个ping路由。 https://www.cnblogs.com/guyouyin123/p/15603581.html

Exec:在容器内执行指定的命令

apiVersion: v1
kind: Pod
metadata:
name: probe-exec
namespace: defualt
spec:
containers:
- name: nginx
image: nginx
livenessProbe:
exec:
command:
- cat
- /tmp/health
initialDelaySeconds: 30 # 初始化时间
successThreshold: 1 # 连续成功多少次算成功
failureThreshold: 3 # 连续失败几次算失败
timeoutSeconds: 2 # 探测超时时间
periodSeconds: 2 # 执行探测等频率,单位秒。默认10秒,最小1

TCPSocket:相当于ping

apiVersion: v1
kind: Pod
metadata:
name: probe-tcp
namespace: default
spec:
containers:
- name: nginx
image: nginx
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 30 # 初始化时间
successThreshold: 1 # 连续成功多少次算成功
failureThreshold: 3 # 连续失败几次算失败
timeoutSeconds: 2 # 探测超时时间
periodSeconds: 2 # 执行探测等频率,单位秒。默认10秒,最小1

HTTPGet:相当于http请求服务内部的接口

apiVersion: v1
kind: Pod
metadata:
name: probe-http
namespace: default
spec:
containers:
- name: nginx
image: nginx
livenessProbe:
httpGet:
path: /ping
port: 80
scheme: HTTP
initialDelaySeconds: 30 # 初始化时间
successThreshold: 1 # 连续成功多少次算成功
failureThreshold: 3 # 连续失败几次算失败
timeoutSeconds: 2 # 探测超时时间
periodSeconds: 2 # 执行探测等频率,单位秒。默认10秒,最小1

19.就绪性探测?

存活性:livenessProbe
就绪性:readinessProbe 健康检查方式2种:
1.存活性探测:检查容器是否正常运行
2.就绪性探测:检查容器是否能够对外提供服务 两者维度不一样
两者处理方式不一样:
存活性检查失败:把容器删掉
就绪性检查失败:移除集群(移除负载均衡) 就绪性探测3种方式:
1.ExecAction:在容器内执行指定的命令。看执行成功与否
2.TCPSocketAction:对指定端口上Pod的IP地址执行TCP检查。相当于ping
3.HTTPGetAction:GET在指定的端口和路径上针对Pod的IP地址执行HTTP请求。相当于http请求服务内部的接口,一般服务内部创建一个ping路由。

20.什么是污点和容忍?以及作用,使用方法?

详细使用:https://www.cnblogs.com/guyouyin123/p/15604212.html

污点:被打上污点Taints的node节点,不会被调度器部署pod应用。
容忍:允许调度器部署pod应用到打上污点Taints的节点。 污点作用:比如master节点不想部署那么多的pod,因为不能让master节点压力太大。那么给master节点打上污点标签,pod就不会部署到该节点了
污点容忍:比如master节点打上污点了,但是想要部署其中一个pod到master上,那么就需要在pod配置清单中写入容忍污点。 参数:
NoSchedule: 不调度到污点节点上去
PreferNoSchedule:NoSchedule 的软策略版本,表示尽量不调度到污点节点上去
NoExecute:该选项意味着一旦Taint生效,如该节点内正在运行的pod没有对应Tolerate设置,会直接被逐出

节点标记污点:

kubectl taint node sg-14 test=sg14:PreferNoSchedule

容忍污点:

apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
spec:
replicas: 1 # pod数量
selector: # 选择器
matchLabels: # 标签
release: stable # 选择标签
template: # 模版
metadata:
name: test-tag # 控制器名字
labels:
release: stable # 设置控制器标签
spec:
containers:
- name: nginx # 镜像名称
image: nginx # 镜像
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"

21.怎么做弹性扩缩容,原理是什么?

详细教程:https://www.cnblogs.com/guyouyin123/p/15666274.html

hpa可以根据指标,来弹性增加删除pod的副本数。控制pod配置清单的replicas参。
参数:
minReplicas: 最小pod实例数
maxReplicas: 最大pod实例数
metrics: 用于计算所需的Pod副本数量的指标列表
resource: 核心指标,包含cpu和内存两种(被弹性伸缩的pod对象中容器的requests和limits中定义的指标。)
object: k8s内置对象的特定指标(需自己实现适配器)
pods: 应用被弹性伸缩的pod对象的特定指标(例如,每个pod每秒处理的事务数)(需自己实现适配器)
external: 非k8s内置对象的自定义指标(需自己实现适配器)

案例:

apiVersion: autoscaling/v2beta1 #(支持cpu,memory,及自定义)
kind: HorizontalPodAutoscaler
metadata:
name: bikesvc
namespace: sg-bs
spec:
minReplicas: 1
maxReplicas: 10
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: bikesvc
metrics:
- type: Resource
resource:
name: memory # 内存占用率(百分比)
targetAverageUtilization: 80
- type: Resource
resource:
name: cpu # cpu占用率(百分比)
targetAverageUtilization: 80

22.k8s的服务注册和服务发现?

k8s的服务注册是通过service实现的。
pod服务在启动成功后,会加载service信息。
流量调度:ingress-->service-->pod

23.打标签?标签选择?

查看标签:

kubectl get pod --show-labels

创建标签,标签选择器:

replicas: 1   决定pod部署的数量
Deploymnet:在Deployment对象中描述所需的状态,然后Deployment控制器将实际状态以受控的速率更改为所需的状态。 apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
spec:
replicas: 1 # pod数量
selector: # 选择器
matchLabels: # 标签选择器
release: stable # 选择标签
template: # 模版
metadata:
name: test-tag # 控制器名字
labels:
release: stable # 设置控制器标签
spec:
containers:
- name: nginx # 镜像名称
image: nginx # 镜像

24.部署一个服务的流程?

cicd执行

1.代码打包镜像
2.镜像上传仓库
3.编写配置清单(ingress,service,nameSpace,Deployment)
4.应用部署清单,kubectl apply -f 清单路径

25.pod的日志如何收集?

实现一个logservice服务
两种方式:
1.kafka方式
缺点:需要依赖于kafka
优点:数据不会缺失。
需要考虑的点:日志量大之后,是否影响业务服务。是否需要在k8s外面额外部署一个kafka服务。所以不建议 2.使用udp方式
实现一个udp服务端服务,再全局初始化一个客户端udp服务。
缺点:有可能日志数据丢失(内网不稳定情况)
优点:只依赖于网络,扩展性高。自己编写代码实现udp服务端,可以做一些限制。比如保存时常,或者udp日志数据包太长拦截掉。(很明显不是日志信息,而是业务数据信息)

26.谈下你对k8s集群监控的心得,口述

Promethus

27.集群如何预防雪崩,简要写出必要的集群优化措施

1、为每个pod设置资源限制
2、设置Kubelet资源预留

k8s面试1-27的更多相关文章

  1. Airbnb面试的27个奇葩问题,你 hold 住吗?

    Airbnb 目前估值 255 亿美金,排名世界科技公司第三.但如果你想去他家工作,可能首先需要回答一些很棘手的问题. 以下,是 BI 通过 Glassdoor 信息收集到的:曾经历 Airbnb 面 ...

  2. K8S面试应知必回

    目录 面试不要不懂装懂,不会就是不会,不可能每个人都接触过所有的知识! 1. 基础问题 1.1 Service是怎么关联Pod的?(课程Service章节) 1.2 HPA V1 V2的区别 1.3 ...

  3. k8s&docker面试总结

    花了大半个月对k8s&docker进行了梳理,包括之前读过的书,官方文档以及k&d在公司项目的实践等. 以下是个人对docker & k8s 面试知识点的总结: 1 docke ...

  4. net 程序员面试宝典

    第1部分 求职过程 ------------------------------------------------------------------------------------------ ...

  5. K8s二进制部署单节点 master组件 node组件 ——头悬梁

    K8s二进制部署单节点   master组件 node组件   --头悬梁 1.master组件部署 2.node   组件部署 k8s集群搭建: etcd集群 flannel网络插件 搭建maste ...

  6. C++软件开发面试题总结

    面试题有难有易,不能因为容易,我们就轻视,更不能因为难,我们就放弃.我们面对高薪就业的态度永远不变,那就是坚持.坚持.再坚持.出现问题,找原因:遇到困难,想办法.我们一直坚信只有在坚持中才能看到希望, ...

  7. 剑指offer 面试27题

    面试27题: 题目:二叉树的镜像 题:操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / ...

  8. MySQL数据库之大厂面试必备技能v8.0.27

    概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 MySQL官方地址 https://www.mysql.com/ MySQL 8系列最新版本为8.0.27,5系列的最 ...

  9. Kubernetes学习之路(27)之k8s 1.15.2 部署

    目录 一.环境准备 二.软件安装 三.部署master节点 四.部署node节点 五.集群状态检测 一.环境准备 IP地址 节点角色 CPU Memory Hostname Docker versio ...

随机推荐

  1. Git-rebase使用原理

    使用 Git 已经好几年了,却始终只是熟悉一些常用的操作.对于 Git Rebase 却很少用到,直到这一次,不得不用. 一.起因 上线构建的过程中扫了一眼代码变更,突然发现,commit 提交竟然多 ...

  2. Joplin开源笔记软件使用入门

    Joplin是一款开源免费的笔记软件,可以记录笔记.待办清单,支持Markdown,可导出Markdown格式.HTML格式.PDF格式的文档,具备自动同步功能,可定时自动备份到文件系统或网盘. Jo ...

  3. Java反射详解篇--一篇入魂

    1.反射概述 Java程序在运行时操作类中的属性和方法的机制,称为反射机制. 一个关键点:运行时 一般我们在开发程序时,都知道自己具体用了什么类,直接创建使用即可.但当你写一些通用的功能时没办法在编写 ...

  4. loj6077. 「2017 山东一轮集训 Day7」逆序对

    题目描述: loj 题解: 容斥+生成函数. 考虑加入的第$i$个元素对结果的贡献是$[0,i-1]$,我们可以列出生成函数. 长这样:$(1)*(1+x)*(1+x+x^2)*--*(1+x+x^2 ...

  5. Mybatis配置错误:java.lang.ExceptionInInitializerError

    情况一:配置文件,无法被导出或者生效 修改前: 修改后: 究其原因,这是由于Maven的约定大于配置,导致我们写的配置文件,无法被导出或者生效的问题,解决方案: 在pom.xml文件中配置导出非res ...

  6. java concurrent 并发多线程

    Concurrent 包结构 ■ Concurrent 包整体类图 ■ Concurrent包实现机制 综述: 在整个并发包设计上,Doug Lea大师采用了3.1 Concurrent包整体架构的三 ...

  7. Redis 常见的性能问题都有哪些?如何解决?

    Redis 常见的性能问题都有哪些?如何解决? Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最 ...

  8. java-設計模式-原型模式

    原型模式 是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类. 問題: 如果我們要複製一個類實例: 首先, 你必须新建一个属于相同类的对象. 然后, 你必须遍历原始对象的所 ...

  9. 什么是 REST / RESTful 以及它的用途是什么?

    Representational State Transfer(REST)/ RESTful Web 服务是一种帮助计 算机系统通过 Internet 进行通信的架构风格.这使得微服务更容易理解和实现 ...

  10. DIANA算法

    DIANA算法 DIANA算法示例 DIANA算法练习