【DevOps:一、开始】
初步了解k8s和jenkis
名词 | |
---|---|
安全组 | 类似于防火墙的设置,打开安全组,但要防止被当成矿机,需要设置主机的容器密码 |
VPC | 专有网络,私有网络:VPC虽然网段相同:但资源物理层隔离,不能使用内网相互通 |
Ipv4网段 | |
子网计数器 | |
容器平台跨云多集群统一管理 | 青云KubeSphere平台 |
高可用性 N个9 | 99.999....% |
限制源 | 限制入方向端口 |
EOF | 在操作系统中表示资料源无更多的资料可读取 |
\命令\命令 | 命令长时,分隔符 |
中间件 | 存储分布式多实例有状态的数据 |
版本slim | Linux版 |
多层镜像 | Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。&& 符号连接命令多条Run指令 |
匿名卷 | 在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。 |
exec函数 | |
金丝雀(Canary)灰度部署 | |
组内互信 | 不受防火墙影响 |
22端口 | |
交换分区Swapp | |
K8s网络calico | |
UI面包屑 | |
pod netwrk cidr pod网络范围域 | 集群中任意机器以及任意应用可以通过IP访问,外部不能访问 |
域名工具 utools | |
路径重写Rewrite | |
| 短竖线 大文本 redis.conf:| | |
存储层管理数据文件 | Glusterfs 、NFS、 CephFS |
Mysql Workbench | |
Prometheus | (普罗米修斯)监控 |
lowcode低代码 | |
内网代码管理平台 | |
Blue Ocean | |
Linux三剑客之awk命令详解 | |
Groovy沙盒 SCM |
公有云 | 私有云 | 混合云 |
---|---|---|
第三方购买公共服务 | 硬件自己搭载 |
命令
tee
//----显示程序的输出并将其复制到一个文件中。
reboot
//----用来重新启动计算机。
scp [option] [原路径] [角色@IP:目标路径]
//----将文件从本地系统复制到远程节点;或将文件从远程系统复制到本地系统。
wget
下载
curl
发送web请求
Telnet
远程连接指令
Watch -n 1 kubectl get pod
每隔几秒执行此指令
nohup
后台启动Java 程序,在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中
环境准备:
- Electerm、WinSCP、Xshell (蓝凑云或者git下载)
- yum
- 下载nginx 启动一个nigix web应用,外部测试访问
注意:
- 休息时停机,配置保存,收取磁盘词用
- 外部IP 外部链接使用,会变。私有IP 内网访问,固定。(内部访问不会使用外网公网费用)
- 释放服务器时,释放绑定的公网IP,否则花钱
- 如果不能拉下来可以 wget 或 yum install -y wget或直接“科学上网”赋值 VI dashbord.yaml粘贴
- discribe或观察 pod log 如果端口错误:k8s 会永远重试
回顾Docker容器:
不同进程指令制作为“镜像”,Docker的每个软件包称为“镜像”,用统一Docker指令操作。
虚拟化技术 | 容器化技术 | |||
---|---|---|---|---|
GB级别虚拟机隔离强, | MB级别隔离 | K8S在Docker容器基上封装为 pod (Pod是运行的一组容器) 有的pod里一组容器,有的pod里一个容器类似于员工宿舍 | ||
移植不方便带上其他环境,环境的同步 | 基于OS差异化环境,其他软件OS已经存在。 携带与OS差异的部分 | |||
不同的指令 | 统一化的指令 Dockerhub会告诉你上传镜像的指令 | |||
Docker的主机叫Docker主机,Docker客户端 | ||||
下载到本地 | 安装包 | 镜像 | 资源对象(Yaml或指令行) | |
运行的实例 | 进程 | 容器(端口不冲突可多实例运行) | Pod | |
远程仓库 | DockerHub Harbor(私有) | Helm | ||
配置资源放置中间件 | JenkinsFile | |||
重量级,启动慢 | 资源控制、多沙箱root、网络隔离 | |||
大主机 | 小主机 | |||
公网 -> 大Linux:端口 -> 小Docker: 端口 | ||||
1、映射挂载 2、容器命令台操作 |
环境准备:
- yum下载Docker,修改配置:添加Docker加速器url
- 准备Nginx容器,配置端口映射
镜像下载
docker pull <nginx>
//----默认下载最新latest版
docker pull <niginx:version>
//----下载指定版本
镜像删除
//----删除默认删除latest最新版
//----rmi 指定 镜像唯一ID
查看主机已下载镜像
docker images
docker ps
//----查看主机运行的容器进程
//----注意:如果有容器没有在后台运行,则会阻塞Docker Ps指令
docker run -help
//----显示如何运行容器
Docker run [Options] IMAGE [COMMAND] [ARG。。。]
//----docker run <--name=容器名> <-d:后台运行> <模糊镜像名>
//----docker run <--name=***命名> <-d后台运行 > <--restrt=always开启自动启动> <-p 85:80端口映射> <nginx镜像名>
使用 docker ps -a 可以看见
//----rmi删除镜像 rm删除容器/id
rm 容器-f
//----删除rm容器,后模糊删除 不需要通配符
//----rm删除id也可以模糊
docker start
//----开启容器
docker stop
//----停止容器/id
docker update
//---- docker 部分参数如果没有加入
Docker exec -it <容器名>
//---- 进入容器命令行界面:/bin/bash 或 /bin/sh,app的功能路径在Hub商城描述
docker logs
//----显示容器的运行日志,可以排错
docker logs -f
//----跟踪日志:如果日志不够把Java程序日志调高
构建指令
docker commit --help
docker commit -a "xxxx" -m
//----以当前配置从容器创建一个新的镜像
docker build
//----配合 Dockerfile 文件创建镜像
镜像传输(离线安装)
docker save -o
//----将镜像保存称tar包
docker load -i
//----解压镜像tar包
远程仓库(在线安装:DockerHub需要登陆)
docker login
//----需要登录
docker logout
//----退出
docker tag
//----修改为仓库需要的新版名。本地镜像打标签 新的仓库名:版本号
docker push
//----新的标签标识
docker pull
//----公有不需要登录hub提示的标签名
挂载(映射思想)
docker run <-v挂载路径> <rw/ro>
//----公有不需要登录hub提示的标签名挂载写卷或挂载只读卷,将外部文件写入容器路径,外部不同可以启动多份
docker run -v 外部主机:内部容器
//----公有不需要登录hub提示的标签名反向写挂载:由外挂内,首启动读取内部容器配置文件
docker cp <容器:容器路径> <主机挂载路径>
//----如果挂载路径是空的,访问也是空的。可以提前将容器内部路径下文件copy到挂载路径上;docker会寻找映射的文件,否则报错
DockerFile
- 分析镜像依赖:SpringBoot可执行的jar包 + maven + jre + 中间件
- 环境openjdk
- 登录 -> 将旧镜像build的包将其tag -> (docker images查看)准备 -> push到dockerhub
FROM 基础镜像
LABEL key=value作者
COPY target/*.jra容器 /app.jar外部机器根
EntryPoint或CMD ["java","-jar","外部机器根的jar包"] 启动时的指令或指定要制行的sh脚本
docker build -t(tag) <镜像名:版本> -f <**Dockerfil(如果同名可以省略)> <.>
//----构建镜像
K8s 容器“编排”系统
服务发现 | |
剔除 | |
服务起步依赖 | 监控探针检测、就绪探针、存活探针 |
负载均衡 | 多副本 |
故障转移 | 本机无法恢复,经过一会阈值,运行的Pod从其他机器拉起:称为“故障转移” |
存储编排管理: | 中心化管理子存储 |
自动部署和回滚功能: | 一键恢复 |
装箱计算 | 控制app的内存和CPU,进行监控 |
自愈: | 本机尝试恢复:称 restarts 为“自愈”,强制关机后重启也可以恢复 |
配置管理中心: | 配置中心,放置故障转移配置丢失 |
灰度部署: | 多实例单台资源镜像逐个升级 |
- 服务发现和负载均衡:k8s可以通过DNS或者是IP地址来暴露容器中的服务。如果某个容器的流量/请求特别高,k8s能够主动实现负载均衡来降低该容器的流量/请求从而保证容器的稳定运行
- 存储编排:k8s允许我们根据自己的实际需求和选择来挂载存储系统,支持但不限于本地存储、云存储等各种方式
- 自动部署和回滚:我们可以使用k8s来声明已经部署的容器的期望状态,它可以以受控的速率将实际状态切换到期望状态。例如我们可以声明某个容器的运行数量的期望值为10,k8s会自动将容器的数量调整到该期望状态;我们还可以使用自动化 Kubernetes 来为部署创建新容器, 删除现有容器并将它们的所有资源用于新容器
- 自动装箱计算:我们可以在k8s中指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,k8s会根据每个node节点的状态和每个容器所需要的资源来进行智能调度,确保资源的最大化利用
- 自我修复
k8s能够自动重启运行失败的容器、替换容器、杀死不响应用户定义的运行状况检查
的容器,并且在准备好服务之前不将其通告给客户端,从而保证客户端的请求不会被分发到有问题的容器中 - 密钥与配置管理
k8s允许我们存储和管理如密码、OAuth 令牌和 ssh 密钥等敏感信息,我们可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也不需要在配置中暴露密钥等敏感信息
--------------------------------
架构
Node 分为不同的工厂,通过api沟通(通过部署不同数量的实例来进行缩放从而适应不同的流量)。
Node( Kubelet 厂长 -> k-proxy 保安 与 后勤长 联络同步其他Node)
Control Plane集中控制中心
api Node协调者(通过部署不同数量的实例来进行缩放从而适应不同的流量)
Sched 调度者(监视那些新创建的未指定运行节点的 Pod,并选择节点让 Pod 在上面运行)
c-m 决策者(从逻辑上讲,每个控制器都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行)
etcd资料库(高可用性的键值key-value
数据库,负责保存Kubernetes Cluster的配置信息和各种资源的状态信息,当数据发生变化时,etcd 会快速地通知Kubernetes相关组件)
c-c-m 外联部 联络其他Cloud云(运行特定于云平台的控制回路)
---------------------------------
kubectl ceate deploy myapp --image=nginx
apiserver是架构访问,kube-proxy是应用间访问,kubelet是检测本地应用
环境准备:
- 3台机各自拥有 docker、 kubelet(用于执行指令)、 和 kubeadm(搭建集群的工具)
- 防火墙设置SVC,修改了初始化式service-cidr 和 pod-network-cidr
- Docker Containerd.io-1.4.6,sudo升权限执行docker加速器,docker info查看配置是否生效
- K8s web UI dashboard
-------------------------------
kubeadm init
初始化主节点机器为Control Plane,组件架构自动安装
kubeadm join
从节点称为Node,加入Control Plane后被动安装核心组件 kube-proxy
kubectl get nodes
打印集群节点,根据引导下载”网络插件";kubectl主节点Master可以查看全局结点,必要组件就绪Node状态为 ready
kubectl edit svc kub-dash -n kub-das
暴露接口
kubectl get svc -A | kub-dash
安全组打开L端口
kubeadm token create --print-join-command
如果集群加入的令牌过期,获取令牌
kubectl -n kub-dash<pod应用> get secret ${密钥} -o go-template="***"
获取令牌,令牌会失效,需要重复获取
kubectl apply -f calico.yaml
根据yaml配置文件,给集群创建资源
kubectl get pods -A
查看运行的进程,像是docker ps指令
kubectl run <pod> <image>
kubectl get <pod>
查看default名称空间pod
kubectl describe pod <pod>
如果卡住没有变化展示pod事件 和 结点位置
kubectl get <ns/namespace>
名称空间:对资源进行隔离,不隔离网络,网络可以访问(但可以设置网络访问策略),属于逻辑隔离
kubectl create ns <命名>
kubectl delete ns <命名>
会删除名称空间下连带的资源
kubectl delete -filename <pod>
删除配置文件yaml生成的资源
kubectl discrebe
UI事件启动时信息
kubectl logs 【-f阻塞时运行式打印】 pod名
kubectl create deployment <deployment > <--image=指定镜像>
使用kubectl detele deploy部署对象,会使pod自愈恢复
kubectl delete deploy <应用部署名>
kubectl get deploy
kubectl create deployment <deployment > <--image=指定镜像> <--replicase=副本数量>
创建多副本
kubectl scale
副本扩容
kubectl scale <-n 名称空间> <--replicas=预期副本数> <缩容的deploy>
副本缩容
kubectl edit delpoy
已经创建的deploy 会进入资源配置设置
kubectl get deploy <部署名> -oyaml
kubectl get deploy/部署名 -oyaml | gerp image
kubectl set image <deploy/部署名> <已存在镜像:预期新镜像> --record
灰度升级镜像
kubectl rollout status deploy/部署名
查看资源状态
kebectl rollout history deploy/部署名
打印历史记录
kubectl rollout undo undo deploy/部署名 -- to-revision=版本数则会回滚恢复
版本回退
kubectl get pod -owide
打印更详细pod的信息
kubectl get pod -w
长期打印
kubectl exec -it pod名 -- /bin/bash
如果想进入pod修改某配置文件,ls / 打印出当先路径
kubectl expose deploy <deploy> <--port=定义一组Service的端口> <--taget-port=容器目标端口>
kubectl get service
可以看见当前的是否为ClusterIP类型
kubectl get pod --show-lables
打印pod的标签
kubectl expose deploy 部署名 --port=*** --target-prot=** --type=ClusterIP
kubectl get service(svc)
内部访问IP <服务名>.<名称空间>.svc(service)
kubectl get <ingress/ing>
可以展示所有ingres资源的hosts,访问到Igress 和 被转发到 Service的Pod处理 不一样,Pod能处理就会返回否则就是404
kubectl edit ing <***网关名> <-n名称空间>
打开资源文件,可以修改保存并执行
kubectl describe pod <pod>
查看事件 或图形化界面
kubectl get <persistentvolume/pv/pvc>
先有PV -> 后PVC申请书,申请书,pv状态为Bound;申请书delete,则 pv 状态Release
Kubectl create cm redis-conf --fom-file=redis.conf
获取配置集 yaml形式
kubectl get cm redis-conf -oyaml
kubectl get cm
kubectl edit cm redis.conf
外部配置集文件修改,配置需要重启Pod才可以生效,客户端配置也将改变
kubectl get secret
Base64编码解码 ,实际UI界面可以看见
kubectl get sc
kubectl top nodes -a
kubectl top pods -a
资源对象 | ||||
---|---|---|---|---|
Pod | 无法自愈 | 同一个Pod里共享网络空间,可以使用127.0.0.1:8080 | ||
namespace | 名声空间 | 展示N的代表下的,不带N的是全局K8的 | ||
Deployment | 应用部署 | 拥有多副本,自愈,扩充容量 | 无状态应用,数据不存储 | |
StatefulSet | 有状态Pod 提供稳定固定网络,且数据保证挂载到其他位置 | |||
DameonSwt | 守护进程集,如日志收集,在每个机器有则只有一个 | |||
Job/CronJob | 定时任务:垃圾消息清理组件 | |||
Service | 服务发现 | 多个Pod是一组网络公开服务的负载均衡 与 服务发现,Service,对pod标签加组,暴露端口,设置TCP协议 | ClusterIP类型/ | |
Igress | 网管入口 | 搭配Nginx,Rule规则.Ingress Nginx网关层-反向代理到Service | Igress路径重写,流量限制 ,全局限流,限流等待状态码 | |
PersistentVolume (PV) | 存储抽象 | |||
PV池 | 删除Pod将会归还持久空间会从存储池拿取解决的持久空间 | |||
PersisitentVolumeClaim (PVC) | ||||
ConfigMap | 配置集 | 将 ConfigFile 制作为 配置集 存储在ETC | ||
Secret | 存储密文信息 密码 Oauth令牌 SSH密钥 | |||
StorageClass | 默认存储 | |||
serviceAccount | 集群指标监控组件 metrics-server |
KuberSphere(多租户系统 多集群)
kubekey 快速一键安装 <kubeShpare最小化缩水版>
KubeKey帮助你创建集群
./kk create cluster --wirh-kubernetes v1.20.4 --with-kubespere v3.1.1
RuoYi Cloud 若一云 (常用架构脚手架Project)
前端 - 网关 - 配置中心 - 监控 - Seata - Nacos - 缓存 - 数据库 - 服务远程调用 - 对象存储oss
--------------------------------------
初始化
名词:Fork指令,获取当前库到自己库
一、阅读架构图的组件,有状态数据导入,无状态制作镜像(端口是微服务),网络如何访问,生产配置分离 URL
二、阅读代码核心配置,【阅读Nacos配置列表】调制配置
三、下载RuoYi核心组件、注册中心
- 运行注册中心Nacos本地程序:根据官网教程 配置 Mysql
- 执行Nacos初始化SQL表
- 登录Nacos
- 尝试连接Ruoyi的DB实例数据
- Conf关闭不需要的组件,防止微服务报错
- Node.JS- npm 构建RuoYi-UI前端依赖
四、准备指定RuoYi数据库,手动执行Ruoyi数据表
五、本地成功运行、打镜像上传镜像仓库,分架构上云->
--------------------------------------
DevOps 流程实现自动化
- CI 持续集成 Continuous intergration
- build test merger
- CD 继续交付 Continuous delivery
- automatically release to repository
- CD 升级更新 Continuous deployment
- automatically deploy to production
落地案例 | ||
developer(Jira) | repository (Git) | build (Jenkins) |
Code Analysis (SonarQube) | Test(JUnit) | 制品 Artifact(Nexus) |
Build Report | Docker horbor/Docker(OOS) | K8S |
后期运维 | ||
监控 | 提交问题 | Jira |
一:分析项目,画出项目结构图<自顶向下>
二、编写Jenkisfile
可视化Jenkins Piepine、流水线Base GO Maven NodeJS
Template:以下顺序可以改变
拉取代码 | 执行主步骤后做后操作 |
项目编译 | 不同微服务不同路径 并行parallel:构建镜像 docker bulid -t tag版本 -f dockerfile位置 执行的微服务 tag推送规则 |
测试 | |
镜像推送到仓库 | |
登录 打tag push推送 | |
部署 | kubectl 需要Master其他系欸但没有权限 readinessProdbe就绪探针 |
人工卡点 | |
打印打针 | |
webhook | 触发Git钩子 |
三、Jenkins脚本片段
- 基础:SSH相关下载 Sheel脚本 Linux命令 Docker Git/SVN玩法
- 内存:5+1+1
hook | 根据Git动作触发钩子 |
Pre部分前任务 | |
Post部分后任务 | |
配置跳板机 | |
Configuration | 运维邮箱通知事件 |
poll SCM Jenkins | 主动检Core规则测托管Git代码发生变化则 构建 |
脚本思路:
- 停止容器、杀死旧进程
- 删除容器 、 清理旧jar包
- 构建新的镜像、上传新的jar包
- 启动容器、运行新程序
【Pipeline 流水线脚本】
agent 指定的构造器
stages
stage -------------环节1
stetps -------------步骤1
stetps -------------步骤2
stage -------------环节2
流水线语法 | |
声明式流水线 | 代码语法检测,逻辑弱,简单规范 |
脚本时流水线 | 自定义功能多,复杂度高,难调试,本地操作权限需要解决 |
更多推荐
所有评论(0)