目录

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. Nebula Graph 在网易游戏业务中的实践

    本文首发于 Nebula Graph Community 公众号 当游戏上知识图谱,网易游戏是如何应对大规模图数据的管理问题,Nebula Graph 又是如何帮助网易游戏落地游戏内复杂的图的业务呢? ...

  2. select、poll和epoll的区别

    操作系统在处理io的时候,主要有两个阶段: 等待数据传到io设备 io设备将数据复制到user space 我们一般将上述过程简化理解为: 等到数据传到kernel内核space kernel内核区域 ...

  3. mycat的安装及使用 看这一篇就够了

    1.环境准备 ​ 本次使用的虚拟机环境是centos6.5 ​ 首先准备四台虚拟机,安装好mysql,方便后续做读写分离和主从复制. 192.168.85.111 node01 192.168.85. ...

  4. 随意写文件命令?怎么向屏幕输出带空格的字符串,比如”hello world”?

    写文件命令:vi 向屏幕输出带空格的字符串:echo hello world

  5. 您使用了哪些 starter maven 依赖项?

    使用了下面的一些依赖项 spring-boot-starter-activemq spring-boot-starter-security 这有助于增加更少的依赖关系,并减少版本的冲突.

  6. 为什么使用 Executor 框架?

    每次执行任务创建线程 new Thread()比较消耗性能,创建一个线程是比较耗时. 耗资源的. 调用 new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制的创建, 线程之间的相互 ...

  7. Spring Cloud 解决了哪些问题?

    在使用 Spring Boot 开发分布式微服务时,我们面临的问题很少由 Spring Cloud解决.与分布式系统相关的复杂性 – 包括网络问题,延迟开销,带宽问题,安 全问题.处理服务发现的能力 ...

  8. 哪些是重要的 bean 生命周期方法?你能重载它们吗?

    有两个重要的 bean 生命周期方法,第一个是 setup , 它是在容器加载 bean 的时候被调用.第二个方法是 teardown 它是在容器卸载类的时候被调用. The bean 标签有两个重要 ...

  9. read,readline,readlines的特点与区别

    1.read 读取全部文件 with open("test.text", "r",encoding='utf8') as f: print(f.read()) ...

  10. linux命令手册

    常⻅系统服务命令 常用命令 作用 chkconfig --list 列出系统服务 service <服务名> status 查看某个服务 service <服务名> start ...