赞
踩
docker inspect -f {"state"}
- kube-apiserver
- kube-controller-manager
- kube-scheduler
- kube-proxy
- kubelet
- Flannel
- ETCD
- DNS
- Deployment # 部署无状态应用
- DaemonSet # 每个节点上都部署一个,用于收集、监控日志
- StatufluSet # 部署有状态应用
4、Service的类型有哪些?
- ClusterIP # 向集群内部暴露服务
- NodePort # 通过宿主主机IP和端口向外部暴露服务
- LoadBalancer # 通过弹性IP向外部暴露服务
- ExtennalName # 将外部的一个服务定义一个集群内部的别名
根据ingress配置清单,实时生成Nginx配置,并且使其生效,之后通过nginx反向代理转发流量到pod中
ingress ---> endprints(HeadLess Service) ---> pod
- 控制器 ---> 通过标签
- Service ---> endPoints
- ingress ---> endpoints
- 1.提供一个Pod的基础网路命名空间
- 2.提供共享存储
- 3.监控业务容器
- 1.调度服务到节点
- 2.创建Pod
- 2.创建主容器
- 3.依次创建业务容器
- 4.执行开始回调钩子
- 5.进行健康检查:存活探测、就绪探测
- 6.执行结束回调钩子
- 7.一次结束业务容器
- 8.结束主容器
- 9.销毁Pod
10、在k8s中yaml配置清单的最基本结构
- kind:
- apiVersion:
- metadata:
- spec:
- status:
- 1.注解 # 当前ingress生效
- 2.configmap # 全局生效
- 1.将Wordpress打包到镜像并构建
- 2.编写配置清单(Service、Deployment、Ingress)
- 3.部署、访问测试
- Brigre # 默认,启动Docker进程时,会在主机上创建一个名为docker0的虚拟网桥,和物理交换机类似
- None # 容器有独立的 Network namespace,但并没有对其进行任何网络设置
- Host # 容器和宿主机共享 Network namespace
- Container # 容器与容器共享一个NameSpace,K8s中的Pod就是采用此模式
- FROM # 镜像来源
- ADD # 复制文件到镜像,支持tar包自动解压,强于COPY
- RUN # 指定构建镜像时运行的命令
- ARG # 用于指定传递给构建时的变量
- ENV # 环境变量
- COPY # 复制文件到镜像
- LABEL # 为镜像添加元数据,不常用
- EXPOSE # 制定与外界交互的端口
- VOLUME # 用于指定持久化目录
- ONBUILD # 镜像触发器,可触发基础镜像内的动作
- WORKDIR # 工作目录,类似于cd后的初始路径
- CMD # 指定容器运行时的默认命令,如启动命令
- 所有服务均是由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根据数据计算判断容器是否存在或健康
- empyDir
- # Pod调度到节点时创建的一个临时空目录,Pod删除随之删除,用于容器间分享文件
-
- hostPath
- # 节点存储卷,挂在宿主机的文件或目录到Pod中
-
- PV/PVC
- # 是外部存储系统中的一块存储空间,具有持久性,生命周期独立于Pod
-
- StoageClass
- # 是充当PV的模板,从而可以动态创建所需的PV,自动构建相对应的PV持久化存储卷
-
- configmap
- # 能使一个配置文件多台机器共用,杜绝重复修改,支持热更新,且支持挂载
- 两种方式:挂载、存储卷
-
- secret
- # 将密码转换为密文,写入配置清单中,起到加密的作用。
- 存活性监测 # 容器是否正常启动 --> 删除容器
- 就绪性检测 # 容器是否正常提供服务 --> 移出负载均衡
- 1.删除污点:
- 删除master节点上打的污点标签,用亲和性使Pod调度到master(scheduler)
- 2.容忍污点:
- 设置Pod容忍污点,使用selectNode调度到master
- emptyDir # 用来作为Pod中的临时目录
- hostPath # 类似于docker -v 参数,将存储卷挂载在本地
- 1.编写配置清单
- # 部署MySQL集群
- 创建命名空间
- 创建Service提供负载均衡
- 使用控制器部署Discuz
- # 部署Discuz应用
- 创建命名空间
- 创建Service提供负载均衡(headless service)
- 创建服务并挂载代码
- # 连接服务器
- Discuz连接MySQL --> mysql.mysql.svc.cluster.local
-
- 2.部署~
- 1.权限不足
- 2.内存不足
- 33.网络问题
- PV # 相当于磁盘分区
- PVC # 相当于磁盘请求
- 1.构建镜像
- php:MySQL+php-fpm
- nginx
-
- 2.设计网络流程
- Ingress --> endpoints --> Pod
- 若discuz中包含第三方服务,则使用ExternalName(别名)
-
- 3.编写配置文件
- mysql.yaml
- word.yaml
-
- 4.测试
- 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.部署测试
只要不删除PVC即可
- 集群组件之间的安全机制:证书
- 集群内部之间的安全机制: 准入机制
- env:
- - name: nginx
- valueFrom:
- secretkeyRef:
- key: nginx
- name: configmap-name
通过外界脚本随时随地的监控修改
代码管理工具
- mkdir data
- cd data
- git init
git reset --hard [回滚id] # 回滚id通过 git log 查询
- git add . # 添加到暂存区
- git commit -m 'init' . # 添加到缓存区
- git push -u origin master # 推送至远程仓库
- 通过标签或分支名称来拉取
- git clone -b [tag name | branch name] [仓库地址]
- git pull # 更新拉取,在已有的仓库下,更新已有的代码
- git clone # 下载克隆,将远程仓库下载到本地
- git tag # 特殊的分支,只能删除不能修改
- git branch # 可以修改
- git # 代码管理工具
- gitlab # 远程代码仓库(免费的私有化部署)
- uest # 能创建issue、发表评论,不能读写版本库
- Reporter # 能克隆代码,不能提交,QA、PM可用此权限
- Developer # 能克隆、开发、提交、推送代码,普通开发可用此权限
- Maintainer # 能创建编辑项目、添加tag、保护分支、添加项目成员、可新开发可用此权限
- Owner # 能设置项目访问权限,- Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可用此权限
39、在K8s上部署MySQL主从的设计方案
- 先设计主节点,再设计从节点
- 1.主节点
- 创建一个复制用户
- 保持server_id唯一
- 备份
-
- 2.从节点
- 保持server_id唯一
- 连接上主节点
41、K8s工作中遇到的问题?
- 主节点有多个apiserver同时工作 # 内网防火墙开启导致
- ETCD数据不一致,导致集群错乱(apiserver,ETCD脑裂)
创建权限组 --> 部署用户 --> 分配权限组
- 构建之前 --> 在Jenkins服务器
- 构建之后 --> 在部署服务的机器
- 1.使用 git 工具将源代码上传到GitLab远程代码仓库
- 2.使用 Jenkins 将远程代码仓库的源代码拉取下来
- 3.将源代码部署到对应的项目上并构建
- 4.将构建的项目通过SSH连接部署到其他服务器上
git、gitee、gitlab、Jenkins
- 1.准备代码,并上传至远程仓库
- 2.用Jenkins部署编译环境:maven
- 3.web服务器部署运行环境:tomcat
- 4.测试
- 1.准备代码,并上传至代码仓库
- 2.用Jenkins拉取代码并编译
- 3.部署PHP到web服务器
- 4.测试
- 1.参数构建
- 2.源代码管理
- 3.构建
- 4.构建后操作
- 5.系统管理 -> 全局配置 -> publish over ssh -> 配置Jenkins服务器私钥+远程服务器的ssh
- 文本参数
- 密码参数
- 凭证参数
- 下拉参数
- 字符串参数
因标签是不可以修改的,每个标签版本都是固定不变的
- 1.在Gitlab或Gitee创建空代码仓库
- 2.编写流水线步骤,填写仓库地址
- 3.根据业务要求对应修改(Jenkins)
- 4.测试运行
在K8s中创建证书 --> 在Jenkins上配置连接
- 1.将源代码上传至gitlab远程代码仓库
- 2.Jenkins拉取代码并编译
- 3.运行部署代码
- 4.测试
- Prometheus Server
- # 服务核心组件,通过pull metrics从exporter拉取、存储监控数据,并提供一套灵活的查询语言PromQL
- pushgateway
- # 接受push而来的数据,并暴露给Prometheus的Server拉取的中转站
- Exporters/Jobs
- # 负责收集目标对象(host,container..)的性能数据,并通过HTTP接口供Prometheus Server获取
- Service Discovery
- # 服务发现,Prometheus通过第三方接口查询需要监控的Target列表,轮训这些Target获取监控数据
- Alertmanager
- # 从Prometheus Server端接收到alerts后,会去重、分组,并路由到对方的接受方式发出报警(邮件、微信)
- Granafa # 美观、强大的可视化监控指标展示工具
- Prometheus web UI # 自带,不怎么好用
- API Clients # 自己开发的监控展示工具
- 1.在被监控主机上安装node组件,解压到/usr/local并启动
- 2.在管理主机上修改配置文件,添加被监控主机的信息
- 3.启动管理主机
- 1.在被监控主机上安装MySQL组件,解压到/usr/local
- 2.在组件路径编写.my,cnf配置文件,指定并启动
- 2.在管理主机上修改配置文件,添加被监控主机的信息
- 3.启动管理主机
- pull
- push
- 1.Jenkins连接K8s集群
- 在Jenkins SSH Server连接
- 通过pipline kubeconfig连接
- 2.编写Dockerfile
- 4.创建流水线任务
- 分布式:将多台Linux主机组到一起,做成像一台主机一样来使用,像MySQL主从一样
-
- 微服务:将一台Linux主机拆分成多台Linux使用,像部署discuz,将nginx+php放一起,MySQL单独
-
- 微服务:按不同功能、业务拆分成多个模块,以至于某一个模块出问题后,不至于导致全站的服务不可用
- 带有metricts接口的服务(ETCD):
- # 使用Prometheus Operator创建相应的ServiceMonitor,匹配该服务的Service,就能自动将服务纳入监控中
65、普罗米修斯监控获取数据的接口是什么?
metricts
- 1.携带metricts接口的服务
- 2.不携带metricts接口的服务
- 作用:用于查询普罗米修斯监控的数据
- 增长率:rate
predict_linear
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。