文章目录
-
- 1、监控Docker命令
- 2、K8s的组件有哪些
- 3、常用控制器以及特点?
- 4、Service的类型有哪些?
- 5、Ingress-Nginx的工作原理
- 6、从ingress到pod的流程
- 7、控制器、service、ngress管理pod的方式?
- 8、主容器的作用
- 9、Pod的生命周期
- 10、在k8s中yaml配置清单的最基本结构
- 11、Ingress 设置重定向的方式有哪些,区别是什么?
- 12、部署Wordpress的流程
- 13、Docker的四种网络模式
- 14、Dockerfile常用指令
- 15、K8s组件及协同关系
- 16、K8s存储卷有哪些
- 17、健康检查的方式+针对点+错误处理方式
- 18、将Pod调度到master节点的方法
- 19、简单说明emptyDir与hostPath
- 20、部署Discuz的步骤
- 21、K8s的配错方法有哪些?
- 22、K8s网络流量入栈到出栈的流程
- 23、说明PV/PVC
- 24、部署Discuz的流程
- 25、部署MySQL一主多从的步骤
- 26、怎样使用动态PV持久化数据库
- 27、K8s中的安全机制是什么
- 28、Secret挂载到容器的环境变量写法
- 29、怎样随时随地的修改Docker容器启动命令
- 30、Git是什么?
- 31、Git仓库的手动建立过程
- 32、Git如何回滚
- 33、Git提交文件到远程仓库的流程
- 34、部署代码一般用什么来拉取代码?
- 35、Git pull与Git Clone 区别是什么?
- 36、Git Branch与Git Tag的区别是什么?
- 37、GitLab与Git的关系是什么?
- 38、GitLab设置权限的流程是什么?
- 39、在K8s上部署MySQL主从的设计方案
- 40、如何处理Jenkins忘记Admin密码?
- 41、K8s工作中遇到的问题?
- 42、Jenkins设置权限流程
- 43、简单说明Jenkins源码管理、构建、构建后分别在哪台服务器执行?
- 44、构建之前 --> 在Jenkins服务器
- 45、Devops由哪些组成?
- 46、使用Jenkins部署Java的流程
- 47、Jenkins部署PHP的流程
- 48、Jenkins自由风格主要的部署步骤
- 49、列举参数化构建中你熟悉的参数
- 50、为何使用git tag而不是git branch?
- 51、Jenkins流水线的步骤是什么?
- 53、Jenkins连接K8s
- 54、Jenkins部署Golang的流程?
- 55、Jenkins创建pipline的流程
- 56、普罗米修斯的组件有哪些?
- 57、普罗米修斯UI页面的三种实现方法?
- 58、普罗米修斯怎样监控一台Linux主机?
- 59、普罗米修斯怎样监控一台MySQL主机?
- 60普罗米修斯获取数据的方式有哪些?
- 61、Jenkins流水线容器化步骤?
- 62、简单介绍微服务?
- 63、如何用普罗米修斯监控其他K8s集群?
- 64、普罗米修斯监控的架构图
- 65、普罗米修斯监控获取数据的接口是什么?
- 66、普罗米修斯监控 的类型有哪些?
- 67、PromeQL的作用及增长率?
- 68、普罗米修斯预测如何监控?
- 69、部署一个Discuz到k8s的步骤
- 70、docker要隔离的的6种namespace
- 71、在部署中你遇到那些问题,怎么解决的?
1、监控Docker命令
docker inspect -f {"state"}
2、K8s的组件有哪些
负责处理来自用户的请求,其主要作用就是对外提供RESTful的接口
包括用于查看集群状态的读请求以及改变集群状态的写请求,也是唯一一个于etcd集群通信的组件。
管理器运行了一系列的控制器进程,这些进程会按照用户的期望状态在后台不断地调节整个集群中的对象
当服务的状态发生改变,控制器就会发现这个改变并且开始向目标状态迁移。
调度器其实为Kubernetes中运行的Pod选择部署的Worker节点
它会根据用户的需要选择最能满足请求的节点来运行Pod,它会在每次需要调度Pod时执行。
负载存储集群中各种资源对象的信息

3、常用控制器以及特点?
Deployment
DaemonSet
StatufluSet
4、Service的类型有哪些?
ClusterIP
NodePort
LoadBalancer
ExtennalName
5、Ingress-Nginx的工作原理
根据ingress配置清单,实时生成Nginx配置,并且使其生效,之后通过nginx反向代理转发流量到pod中
6、从ingress到pod的流程
ingress ---> endpoints(HeadLess Service) ---> pod
7、控制器、service、ngress管理pod的方式?
控制器 ---> 通过标签
Service ---> endPoints
ingress ---> endpoints
8、主容器的作用
1.提供一个Pod的基础网路命名空间
2.提供共享存储
3.监控业务容器
9、Pod的生命周期
1.调度服务到节点
2.创建Pod
2.创建主容器
3.依次创建业务容器
4.执行开始回调钩子
5.进行健康检查:存活探测、就绪探测
6.执行结束回调钩子
7.依次结束业务容器
8.结束主容器
9.销毁Pod

10、在k8s中yaml配置清单的最基本结构
apiVersion:
kind:
metadata:
spec:
status:
11、Ingress 设置重定向的方式有哪些,区别是什么?
1.注解
2.configmap
12、部署Wordpress的流程
1.将Wordpress打包到镜像并构建
2.编写配置清单(Service、Deployment、Ingress)
3.部署、访问测试
13、Docker的四种网络模式
Brigre
None
Host
Container
14、Dockerfile常用指令
FROM
ADD
RUN
ARG
ENV
COPY
LABEL
EXPOSE
VOLUME
ONBUILD
WORKDIR
CMD
15、K8s组件及协同关系
所有服务均是由Apiserver调度
1.Kubectl发送了一个部署nginx的任务
2.进入Master节点进行安全认证
3.通过认证后,Apiserver接受指令
4.将部署的命令数据记录到ETCD中
5.Apiserver再读取ETCD中的数据
6.Apiserver找到Scheduler,告诉它要部署服务
7.Scheduler向Apiserver调取工作节点数据,看部署在哪台合适
8.Apiserver调取ETCD中粗出的数据,并发送给Scheduler
9.Scheduler通国计算比较,找到最合适的Node节点并发送给Apiserver
10.Apiserver把要部署在Node节点的计划储存到ETCD中
11.Apiserver读取ETCD中的部署计划,通知Node节点的Kubelet来部署容器
12.Kubelet根据指令部署Nginx容器,kube-proxy为Nginx容器创建网桥
13.容器网桥部署完成后,Kubelet通知Apiserver已完成部署工作
14.Apiserver将部署状态存储在ETCd中,同时通知Controller-Manager来活了
15.Controller-Manager向Apiserve要需监控容器的数据
16.Apiserver找ETCD读取相应数据,同时通知Kubelet要源源不断发送监控的数据
17.Apiserver找Kubelet发送来的数据存储到ETCD中
18.Apiserver将ETCD的数据返回给Controller-Manager
19.Controller-Manager根据数据计算判断容器是否存在或健康
16、K8s存储卷有哪些
empyDir
hostPath
PV/PVC
StoageClass
configmap
两种方式:挂载、存储卷
secret
17、健康检查的方式+针对点+错误处理方式
存活性监测
就绪性检测
18、将Pod调度到master节点的方法
1.删除污点:
删除master节点上打的污点标签,用亲和性使Pod调度到master(scheduler)
2.容忍污点:
设置Pod容忍污点,使用selectNode调度到master
19、简单说明emptyDir与hostPath
emptyDir
hostPath
20、部署Discuz的步骤
1.编写配置清单
创建命名空间
创建Service提供负载均衡
使用控制器部署Discuz
创建命名空间
创建Service提供负载均衡(headless service)
创建服务并挂载代码
Discuz连接MySQL --> mysql.mysql.svc.cluster.local
2.部署~
21、K8s的配错方法有哪些?
1.权限不足
2.内存不足
33.网络问题
22、K8s网络流量入栈到出栈的流程
ingress ---> endprints ---> pod
23、说明PV/PVC
PV
PVC
24、部署Discuz的流程
1.构建镜像
php:MySQL+php-fpm
nginx
2.设计网络流程
Ingress --> endpoints --> Pod
若discuz中包含第三方服务,则使用ExternalName(别名)
3.编写配置文件
mysql.yaml
word.yaml
4.测试
25、部署MySQL一主多从的步骤
1.准备MySQL主、从节点的配置文件 my.cnf
2.创建主、从节点的镜像
3.设计网络流程
主节点:
namespace.ymal
stoage.yaml
job.yaml
mysql.yaml
从节点:
namespace.yaml
config.yaml
mysql.yaml
mysql-cluster-mysqldump.yaml
4.部署测试
26、怎样使用动态PV持久化数据库
只要不删除PVC即可
27、K8s中的安全机制是什么
集群组件之间的安全机制:证书
集群内部之间的安全机制: 准入机制
28、Secret挂载到容器的环境变量写法
env:
- name: nginx
valueFrom:
secretkeyRef:
key: nginx
name: configmap-name
29、怎样随时随地的修改Docker容器启动命令
通过外界脚本随时随地的监控修改
30、Git是什么?
代码管理工具
31、Git仓库的手动建立过程
mkdir data
cd data
git init
32、Git如何回滚
git reset --hard [回滚id]
33、Git提交文件到远程仓库的流程
git add .
git commit -m 'init' .
git push -u origin master
34、部署代码一般用什么来拉取代码?
通过标签或分支名称来拉取
git clone -b [tag name | branch name] [仓库地址]
35、Git pull与Git Clone 区别是什么?
git pull
git clone
36、Git Branch与Git Tag的区别是什么?
git tag
git branch
37、GitLab与Git的关系是什么?
git
gitlab
38、GitLab设置权限的流程是什么?
Guest
Reporter
Developer
Maintainer
Owner
39、在K8s上部署MySQL主从的设计方案
先设计主节点,再设计从节点
1.主节点
创建一个复制用户
保持server_id唯一
备份
2.从节点
保持server_id唯一
连接上主节点
40、如何处理Jenkins忘记Admin密码?
参考:https://blog.csdn.net/qq_23995091/article/details/116240686
41、K8s工作中遇到的问题?
主节点有多个apiserver同时工作
ETCD数据不一致,导致集群错乱(apiserver,ETCD脑裂)
42、Jenkins设置权限流程
创建权限组 --> 部署用户 --> 分配权限组
43、简单说明Jenkins源码管理、构建、构建后分别在哪台服务器执行?
构建之前 --> 在Jenkins服务器
构建之后 --> 在部署服务的机器
44、构建之前 --> 在Jenkins服务器
1.使用 git 工具将源代码上传到GitLab远程代码仓库
2.使用 Jenkins 将远程代码仓库的源代码拉取下来
3.将源代码部署到对应的项目上并构建
4.将构建的项目通过SSH连接部署到其他服务器上
45、Devops由哪些组成?
git、gitee、gitlab、Jenkins
jenkins + gitlab + HarBor
46、使用Jenkins部署Java的流程
1、部署流程
1、容器化部署
部署环境
编译型语言
1、开发编写代码,推送到gitlab中
2、拉取代码,同时进行环境检查。
3、编译代码
4、构建镜像,并推送至镜像仓库
5、部署至k8s
6、发送部署成功邮件
脚本型语言
1、开发编写代码,推送到gitlab中
2、拉取代码,同时进行环境检查。
4、构建镜像,并推送至镜像仓库
5、部署至k8s
6、发送部署成功邮件
运行环境
k8s -> (deployment、service、ingress、configmap、secret、pv/pvc)
2、非容器化部署
部署环境
编译型语言
1、开发编写代码,推送到gitlab中
2、拉取代码,同时进行环境检查。
3、编译代码
5、部署至tomcat
6、发送部署成功邮件
脚本型语言
1、开发编写代码,推送到gitlab中
2、拉取代码,同时进行环境检查。
4、构建镜像,并推送至镜像仓库
5、部署至服务器
6、发送部署成功邮件
运行环境
2、业务流程
1、开发环境(dev)
2、测试环境(test)
3、预发布环境(pre)
3.1、测试人员编写发布申请单(签名确认),于星期四下午六点准时发布
3.2、将预发布分支代码合并至master分支,并打tag
3.3、将发布申请单交给运维,等待发布
3.4、到六点时,开始发布
4、生产环境(master)
4.1、产品经理去线上环境进行验收
4.2、产品经理签字确认,发布成功
47、Jenkins部署PHP的流程
1.准备代码,并上传至代码仓库
2.用Jenkins拉取代码并编译
3.部署PHP到web服务器
4.测试
48、Jenkins自由风格主要的部署步骤
1.参数构建
2.源代码管理
3.构建
4.构建后操作
5.系统管理 -> 全局配置 -> publish over ssh -> 配置Jenkins服务器私钥+远程服务器的ssh
49、列举参数化构建中你熟悉的参数
文本参数
密码参数
凭证参数
下拉参数
字符串参数
50、为何使用git tag而不是git branch?
因标签是不可以修改的,每个标签版本都是固定不变的
51、Jenkins流水线的步骤是什么?
1.在建立一个代码仓库(空的,不能有README.md)Gitlab或Gitee,用来存放jenkinsfile
2.编写流水线步骤,填写仓库地址
3.根据业务要求对应修改(Jenkins)
4.测试运行
53、Jenkins连接K8s
在K8s中创建证书 --> 在Jenkins上配置连接
54、Jenkins部署Golang的流程?
1.将源代码上传至gitlab远程代码仓库
2.Jenkins拉取代码并编译
3.运行部署代码
4.测试
55、Jenkins创建pipline的流程
1.登录Jenkins,点击左侧的新建,创建新的构建任务。
2.跳转到如下界面,输入自己的任务名称和描述信息之后,选择“流水线”选项并点击下方的确定按钮即创建了一个Pipeline任务。
跳转到Pipeline的设置页面,我们可以看到有四个tab,我们会针对每一个tab做详细介绍。
pipeline {
agent any //agent 必须放在pipeline的顶层定义或stage中可选定义,放在stage中就是不同阶段使用
stages { //Pipeline 的主体部分,声明不同阶段,比如 构建,部署,测试
stage('Build') { //编译阶段
steps {
sh 'pwd'
git(url: 'https://xxx.xxx.xxx.xxx/xxxxxxxx/xxxxxxx', poll: true, credentialsId: '0000000-0000-0000-0000-000000000000') //拉取代码
echo '使用你的编译工具进行编译' //编译
archiveArtifacts(artifacts: 'testProject', onlyIfSuccessful: true) //编译制品归档
}
}
stage('Docker Build') //编译docker 镜像文件
agent any
steps {
unstash 'test'
sh "docker login"
sh "docker build"
sh "docker push "
sh "docker rmi"
}
}
stage('Deploy') { //部署阶段
agent { //在stage中特别声明agent,该stage就在声明的agent中去执行
docker {
image 'image_name'
}
}
steps { //执行步骤
sh "mkdir -p ~/.kube"
echo '添加部署步骤完成部署 '
echo '启动服务'
}
stage('Test') { //测试阶段
steps {
echo '测试阶段'
git(url: 'https://xxx.xxx.xxx.xxx/xxxxxxxx/xxxxxxx', poll: true, credentialsId: '0000000-0000-0000-0000-000000000000')
echo '执行测试用例'
}
}
}
environment { //环境变量,在satge中使用${variable name}来调用
image_name = 'testProject'
project_path = '../testProject'
K8S_CONFIG = credentials('jenkins-k8s-config')
GIT_TAG = sh(returnStdout: true,script: 'git describe --tags --always').trim()
}
}
56、普罗米修斯的组件有哪些?
Prometheus Server
pushgateway
Exporters/Jobs
Service Discovery
Alertmanager
57、普罗米修斯UI页面的三种实现方法?
Granafa
Prometheus web UI
API Clients
58、普罗米修斯怎样监控一台Linux主机?
1.在被监控主机上安装node组件,解压到/usr/local并启动
2.在管理主机上修改配置文件,添加被监控主机的信息
3.启动管理主机
59、普罗米修斯怎样监控一台MySQL主机?
1.在被监控主机上安装MySQL组件,解压到/usr/local
2.在组件路径编写.my,cnf配置文件,指定并启动
2.在管理主机上修改配置文件,添加被监控主机的信息
3.启动管理主机
60普罗米修斯获取数据的方式有哪些?
pull
push
61、Jenkins流水线容器化步骤?
1.Jenkins连接K8s集群
在Jenkins SSH Server连接
通过pipline kubeconfig连接
2.编写Dockerfile
4.创建流水线任务
62、简单介绍微服务?
分布式:将多台Linux主机组到一起,做成像一台主机一样来使用,像MySQL主从一样
微服务:将一台Linux主机拆分成多台Linux使用,像部署discuz,将nginx+php放一起,MySQL单独
微服务:按不同功能、业务拆分成多个模块,以至于某一个模块出问题后,不至于导致全站的服务不可用
63、如何用普罗米修斯监控其他K8s集群?
带有metricts接口的服务(ETCD):
64、普罗米修斯监控的架构图

65、普罗米修斯监控获取数据的接口是什么?
metricts
66、普罗米修斯监控 的类型有哪些?
1.携带metricts接口的服务
2.不携带metricts接口的服务
67、PromeQL的作用及增长率?
作用:用于查询普罗米修斯监控的数据
增长率:rate
68、普罗米修斯预测如何监控?
predict_linear
69、部署一个Discuz到k8s的步骤
1、设计网络、镜像
2、编写配置,构建镜像
3、部署
4、测试
5、配置Jenkins
6、测试使用Jenkins部署
70、docker要隔离的的6种namespace
UTS 主机和域名
IPC 信号量、消息队列和共享内容
PID 进程编号
network 网络设备、网络栈、端口等
mount 挂载点(文件系统)
user 用户和用户组
71、在部署中你遇到那些问题,怎么解决的?
1、容器化部署时,jenkins master和容器化的client节点端口冲突
2、容器化编译Java时,maven下载的各种包太多,而且使用的时国外的网站,导致部署超时,最终导致部署失败。
3、在普通部署的情况下,由于部署的节点太多,导致部署超时,进而导致部署失败。