网站模板套餐,保险预约,wordpress 多少张表,全国中小企业网站最近忙于备考没关注#xff0c;有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源#xff0c;但我以交流、交换为主#xff0c;笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟#xff0c;为了避免更多人花没必要的钱#xff0c;所以决定公… 最近忙于备考没关注有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源但我以交流、交换为主笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟为了避免更多人花没必要的钱所以决定公开出来 欢迎各位大佬指正文章内容 注意1-5都是容器化部署与k8s没有关系也就是k8s出现之前的技术
记录更改容器源的方法【这个源已不能用】
sed -i s/registry.k8s.io\/pause:3.6/registry.aliyuncs.com\/google_containers\/pause:3.9/g /etc/containerd/config.toml#更改systemctl restart containerd # 重启1-5题用软件包ERP.tar.gz 后续题目用软件包CICD-Runner.tar.gz
1容器化部署 MariaDB
注意centos_7.9.2009.tar 在ERP.tar.gz里
注意docker images查看一下镜像加载后的名字后面写dockerfile的FROM需要替换为自己的镜像名字
docker load -i centos_7.9.2009.tar 注意我们这里配置的yum源与以往的不一样
[ERP]
nameERP
enabled1
gpgcheck0
baseurlfile:///root/yum因为这个yum源是给容器准备的等会dockerfile运行会将它复制到容器里
编写mysql初始化脚本这个也是要去容器中运行的
#!/bin/bash
mysql_install_db --userroot
mysqld_safe --userroot
sleep 8
mysqladmin -u root password tshoperp
mysql -uroot -ptshoperp -e grant all on *.* to root% identified by tshoperp; flush privileges;
mysql -uroot -ptshoperp -e create database jsh_erp;use jsh_erp; source /opt/jsh_erp.sql;编写docker_mariadb以下从字面意思都能读懂不多解释 这个是错的
vi docker_mariadb
# 错的错的错的这个是错的
FROM centos:7.9.2009 # 抽取镜像
MAINTAINER troml1788 # 维护者信息
RUN rm -rf /etc/yum.repos.d/* # 清空自带的源
COPY local.repo /etc/yum.repos.d/ # 复制我们准备的本地仓库
RUN mkdir /root/yum # 创建本地仓库
COPY yum /root/yum # 复制离线包到仓库
ENV LC_ALL en_US.UTF-8 # 设置环境变量LC_ALL为en_US.UTF-8这是为了支持多语言字符集
RUN yum -y install mariadb-server # 安装数据库
COPY jsh_erp.sql /opt/ # 复制数据库备份文件
COPY mysql_init.sh /opt/ # 复制数据库初始化脚本
RUN bash /opt/mysql_init.sh # 执行数据库初始化脚本
EXPOSE 3306 # 开放3306端口
CMD [mysqld_safe,--userroot] # 执行mysqld_safe命令以root用户执行mysql这个是对的
FROM centos:7.9.2009
MAINTAINER troml1788
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
COPY jsh_erp.sql /opt/
COPY yum /root/yum
COPY mysql_init.sh /opt/
ENV LC_ALL en_US.UTF-8
RUN yum install -y mariadb-server
RUN bash /opt/mysql_init.sh
EXPOSE 3306
CMD [mysqld_safe,--userroot]需要注意的是对应关系这个docker_mariadb一定要和mysql_init.sh、yum文件夹、local.repo、jsh_erp.sql在同一级下
因为要复制他们到使用centos7创建的容器中
docker build \
-t erp-mysql:v1.0 \
-f docker_mariadb .docker images总结本题的操作
加载了centos7镜像到docker中它将被用来创建镜像也可直接启动一个容器
为新建的容器编写local.repo仓库源和mysql_init.sh数据库初始化脚本
使用Docker构建一个Docker镜像基于dockerfile和centos7镜像
构建了一个erp-mysql:v1.0名字版本镜像
这个镜像将被用来启动出一个容器
2容器化部署Redis
编写dockerfile 这个是错的
vi docker_redis
# 错的错的错的这个是错的
FROM centos:centos7.9.2009
MAINTAINER troml1788
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
RUN mkdir /root/yum
COPY yum /root/yum
RUN yum install -y redis
# 修改文件内容
RUN sed -i s/127.0.0.1/0.0.0.0/g /etc/redis.conf
RUN sed -i s/protected-mode yes/protected-mode no/g /etc/redis.conf
EXPOSE 6379
# 启动 Redis并应用修改后的文件
CMD [/usr/bin/redis-server,/etc/redis.conf] 报错点在
如果没有下面添加的那一行就没有开启认证服务
那么应用程序来认证但是这边并不提供认证服务就会导致现象
账户密码错误的时候会提示错误但是账户密码正确时会提示请求错误
FROM centos:centos7.9.2009
MAINTAINER troml1788
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
COPY yum /root/yum
RUN yum install -y redis
RUN sed -i s/127.0.0.1/0.0.0.0/g /etc/redis.conf
RUN sed -i s/protected-mode yes/protected-mode no/g /etc/redis.conf
RUN echo requirepass tshoperp /etc/redis.conf # 添加这一行
EXPOSE 6379
CMD [/usr/bin/redis-server,/etc/redis.conf]正确内容
FROM centos:7.9.2009
MAINTAINER troml1788
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
COPY yum /root/yum
RUN yum install -y redis
RUN sed -i s/127.0.0.1/0.0.0.0/g /etc/redis.conf
RUN sed -i s/protected-mode yes/protected-mode no/g /etc/redis.conf
RUN echo requirepass tshoperp /etc/redis.conf
EXPOSE 6379
CMD [/usr/bin/redis-server,/etc/redis.conf]docker build \
-t erp-redis:v1.0 \
-f docker_redis .docker images这里只是定制了一个redis镜像redis一般是多节点运行的
题目只要求我们构建并没有要求我们构建redis主从因此完工
3容器化部署Nginx
nginx是一个轻量级的HTTP服务器 这个是错的
# 错的错的错的这个是错的
FROM centos:centos7.9.2009
MAINTAINER troml1788
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
COPY yum /root/yum
RUN yum install -y nginx
COPY nginx/nginx.conf /etc/nginx/nginx.conf
COPY nginx/app.tar.gz /
RUN tar -zxvf app.tar.gz
RUN /bin/bash -c echo init ok
EXPOSE 80
CMD [nginx,-g,daemon off;]正确内容
FROM centos:7.9.2009
MAINTAINER troml1788
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
COPY yum /root/yum
RUN yum install -y nginx
COPY nginx/nginx.conf /etc/nginx/nginx.conf
COPY nginx/app.tar.gz /
RUN tar -zxvf app.tar.gz
RUN /bin/bash -c echo init ok
EXPOSE 80
CMD [nginx,-g,daemon off;]docker build \
-t erp-nginx:v1.0 \
-f docker_nginx .4容器化部署ERP
ERP是企业资源计划就是工厂里面生产用的系统作为我们本次练手部署的应用服务 这个是错的
vi docker_erpFROM centos:7.9.2009
MAINTAINER troml
COPY app.jar /root
RUN mkdir -p /root/yum
COPY yum /root/yum
RUN rm -rfv /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
EXPOSE 9999
# 启动就运行app.jar
CMD java -jar /root/app.jar正确内容
FROM centos:7.9.2009
MAINTAINER troml1788
COPY app.jar /root
COPY yum /root/yum
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
EXPOSE 9999
CMD java -jar /root/app.jardocker build \
-t erp-server:v1.0 \
-f docker_erp .5编排部署 ERP
注意这里
编排也就是容器化部署应用服务k8s做的就是很强大的统一编排功能这里我们做的是docker编排
编写docker-compose.yaml 文件
就是这里出现了问题。错误保留正确往下看 这个是错的
version: 3.8
services:mysql:image: erp-mysql:v1.0redis:image: erp-redis:v1.0erp:image: erp-server:v1.0nginx:image: erp-nginx:v1.0ports:- 8888:80 # 将宿主机的 8888 端口映射到容器的 80 端口错误点在于我们之前用的mysql做了资源名称导致映射成了mysql而应用程序中写的连接是erp-mysql这就是连不上数据库的原因
不知道为什么vi中写yaml总是说没对齐所以建议用本地VSCode写好后站上去 正确内容
version: 3.8
services:erp-mysql:image: erp-mysql:v1.0erp-redis:image: erp-redis:v1.0erp-server:image: erp-server:v1.0erp-nginx:image: erp-nginx:v1.0ports:- 8888:80Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具它使用一个单一的配置文件通常称为 docker-compose.yaml 文件来定义整个应用程序
在我们的环境中他和harbor仓库一起按照
就是说它会自动寻找docker-compose.yaml 如果起了其它名字需要docker-compose -f xxx.yaml up来运行
## 按两下table
[rootk8s-master-node1 ~]# docker-
docker-compose docker-init docker-proxy 运行yaml文件
Docker 容器中通常在 docker-compose.yml 文件中声明的各个服务
docker-compose up -d这时如果不出意外的话就可以访问到ERP工厂了不过我们的app.jar出了点问题【上面已修复】
小总结
以上完整地容器化部署了一个项目刚刚启动的这些服务被称为容器
在docker中容器是最小部署单位
在k8s中pod是最小部署单位pod包含多个容器而且多个pod共享资源同一台裸机或虚拟机
完美解决问题 不是app.jar包的问题而是我们操作出现了问题
部署redis # 没开启认证
docker-compose.yaml # 映射名起错了展示
账户admin 密码123456 注意这样部署的服务重启一下就没了如果需要他自动重启那么我们就要按下面写
[rootk8s-master-node1 ERP]# cat docker-compose.yaml
version: 3.8
services:erp-mysql:image: erp-mysql:v1.0restart: alwayserp-redis:image: erp-redis:v1.0restart: alwayserp-server:image: erp-sever:v1.0restart: alwayserp-nginx:image: erp-nginx:v1.0ports:- 8888:80restart: always从这里开始就是将应用服务部署到k8s集群中的
虽然集群4G运存就能跑起来
但是到了图形化界面还是有点慢的
我这里给到了13G运存 注意下列题目该用CICD-Runner.tar.gz了
6部署 GitLab
加载镜像等步骤就不多说了题目中有
不过比赛时命令不一样咱们这是自己下载的包用脚本上传 2024-12-14更正现在k8s版本比较新用ctr加载
docker load -i images.tar记录一个快速编写kubectl模板的方法kubectl在搭建的知识点里有详细介绍
kubectl create --help创建模板再试运行直接就写入模板了
kubectl create deployment gitlab \
--imagegitlab/gitlab-ce:latest \
--port80 \
# 试运行不实际创建资源
--dry-run -oyaml gitlab.yamlkubectl create service nodeport gitlab \
--tcp80:80 \
--dry-run \
-oyaml gitlab.yaml修改成下面这样
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: gitlabname: gitlabnamespace: gitlab-ci # 添加要部署的命名空间等会记得先创建
spec:replicas: 1selector:matchLabels:app: gitlabtemplate:metadata:labels:app: gitlabspec:containers:- image: gitlab/gitlab-ce:latestimagePullPolicy: IfNotPresent #添加镜像拉取策略本地有这个镜像就不用再拉了name: gitlab-ceports:- containerPort: 80env:- name: GITLAB_ROOT_PASSWORD # 添加root用户密码
# 注意这里因为我们用的最新版gitlab镜像严格要求不能是弱密码
# 所以此处先不按题目的admin123来比赛时要填admin123value: QazWsxEdc781 # 设置root用户密码
#下面这几个不指定也可以本来就是默认的- name: GITLAB_HOST # 添加master主机value: 192.168.100.10 # 添加IP- name: GITLAB_PORT value: 80
--- # 多个资源之间要用三个横线隔开
apiVersion: v1
kind: Service
metadata:creationTimestamp: nulllabels:app: gitlabname: gitlabnamespace: gitlab-ci
spec:ports:- name: 80-80port: 80protocol: TCPtargetPort: 80nodePort: 30880 #添加暴漏端口不然会随机一个selector: # 选择器很重要它会找这个gitlab然后暴漏它的端口app: gitlabtype: NodePort回想一下命名空间的作用
kubectl create namespace gitlab-cikubectl apply -f gitlab.yaml kubectl get pod,svc -n gitlab-ci等待一会 发现出错了
[rootk8s-master-node1 CIDI-Runner]# kubectl delete pod gitlab-7cb8c45dbc-fvldt -n gitlab-ci
pod gitlab-7cb8c45dbc-fvldt deleted访问
注意出现这个不要急因为服务要一个一个启动 出现了输入我们的admin/QazWsxEdc781 开始上传demo-2048项目
点击新建项目 点击导入项目 有些版本会出现这种情况常见于新版
如果有上传按钮跳过蓝色字样的步骤【直接去看第七步】 解决方法 允许上传 继续上传 选择导入 就可以导入了 上传项目 出现404或者下图Error都不要急等一会刷新就好
20s左右没恢复基本就是出问题了看虚拟机配置有没有给足
本题完成 后面以图形化操作居多
7部署 GitLab Runner
首先查看我们的gitlab-runner 和 gitlab镜像版本 然后安装heml安装过的可以不用做 获取令牌 为GitLab Runner 创建持久化构建缓存目录/home/gitlab-runner/ci-build-cache 并将其注册到 GitLab 中
修改values.yamlvalues.yaml在gitab-runner.tar.gz压缩包里解压后进去修改改完不用动文件位置 [[runners.kubernetes.volumes.host_path]]name cachemount_path /home/gitlab-runner/ci-build-cachehost_path /opt/cache[[runners.kubernetes.volumes.host_path]]name dockermount_path /var/run/docker.sockread_only truehost_path /var/run/docker.sockhelm install --namespace gitlab-ci gitlab-runner \--set gitlabUrlhttp://192.168.100.10:30880/ \--set runnerRegistrationTokenqCcz8c2MSnxdx5_RxbGz \--set runners.tagsk8s-runner \--set rbac.createtrue .刷新界面就能看到 如果没有可能是入栈流量没开启此为刷新后没有runner的步骤 先删除之前搞的然后按照步骤重新来
helm uninstall -n gitlab-ci gitlab-runner本题完成
8部署 GitLab Agent
将 Kubernetes 集群添加到 GitLab 项目中指定名称和命名空间 我们进圈起来那个 kubectl exec -it -n gitlab-ci gitlab-5d568c5b-g44lz /bin/bash1检查组件 如果没启动去vi /etc/gitlab/gitlab.rb
修改
# gitlab_rails[gitlab_kas_enabled] true
并取消注释这里我们启动了就不管了
2修改gitlab.yml
find /opt/* -name gitlab.yml
# 回显下面那个文件编辑他
/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml这里修改为master的节点也就是harbor仓库和部署gitlab的节点 修改完后重启 不修改等会流水线会报错找不到那个gitlab-xxxxx
ctrl D 返回master节点
回到项目准备创建目录 创建的目录
.gitlab/agents/kubernetes-agent再创建一个空file在我们刚刚创建的目录下 输入名字保存 加入集群 helm install gitlab-agent --generate-name \--namespace gitlab-ci \--set config.tokenglagent-z5XMY8gEGxEdFa6AtNJ6SLWv3C2n8z1gapJ-EgswTb6Uz-ncQw \--set config.kasAddressws://192.168.100.10:30880/-/kubernetes-agent/此时注意终端所处位
开始执行部署命令
刷新界面注意这里有时响应比较慢等一会就好了大约30秒 本题完成
注意由于2024年阿里云挂了在之前我们执行加入集群后会拉去15.1.0
以前是能成功拉起来的阿里云挂了以后就拉不下来啦 解决方法给镜像重新打个标签
docker tag registry.gitlab.com/gitlab-org/cluster-integration/gitlab-agent/agentk:v15.1.0 registry.gitlab.com/gitlab-org/cluster-integration/gitlab-agent/agentk:v15.0.0或者修改yaml文件但是这种方法更简单粗暴
小记一下
如果遇到pod出现诸如ImagePullBackOff…这样的错误可使用下面命令排错
kubectl describe pod XXXX -n gitlab-ci删除pod重建
kubectl delete pod XXXX -n gitlab-ci9构建 CI/CD
本题注意分支所有操作均在drone分支下操作
进入drone分支现成的yaml文件 修改demo-2048.yaml改成harbor地址 然后配置文件已经写了现在需要去harbor创建仓库
登陆 创建 完成 下面这个文件已经存在于gitlab的仓库内切换分支进行修改
修改dockerfile 必做步骤
向harbor仓库推送镜像
docker login 192.168.100.10
docker tag tomcat:8.5.64-jdk8 192.168.100.10/library/tomcat:8.5.64-jdk8
docker push 192.168.100.10/library/tomcat:8.5.64-jdk8可能会遇到权限不足的问题
kubectl get clusterroles为用户 system:serviceaccount:gitlab-ci:default 授予 admin 角色kubectl create clusterrolebinding gitlab-ci-admin \
--clusterroleadmin \
--serviceaccountgitlab-ci:default写一个流水线脚本这里完全不会写复制的
variables:MAVEN_OPTS: -Dmaven.repo.local/home/gitlab-runner/ci-build-cache/.m2/repositoryDOCKER_CONFIG: |{insecure-registries: [192.168.100.10]}
stages:- project_build- image_build- deployproject_build:stage: project_buildimage: maven:3.6-jdk-8tags:- k8s-runnerscript:- echo nameserver 10.10.1.2 /etc/resolv.conf- echo nameserver 114.114.114.114 /etc/resolv.conf
# 新增配置阿里源- mkdir -p /home/gitlab-runner/ci-build-cache/- echo settingsmirrorsmirroridalimaven/idmirrorOfcentral/mirrorOfurlhttps://maven.aliyun.com/repository/central/url/mirror/mirrors/settings /home/gitlab-runner/ci-build-cache/settings.xml- mvn package install -B -DskipTests -s /home/gitlab-runner/ci-build-cache/settings.xml- ls target# 这一步是因为不知道为啥构建出来的是2048.war- mv target/2048.war target/demo-2048.war- jar -xf target/demo-2048.war- cp -rvf target /home/gitlab-runner/ci-build-cache/- ls /home/gitlab-runner/ci-build-cache/target/image_build:stage: image_buildimage: docker:18.09.7tags:- k8s-runnervariables:DOCKER_DRIVER: overlay2services:- name: docker:18.09.7-dindentrypoint: [dockerd-entrypoint.sh]command: [--insecure-registry,192.168.100.10]script:- mkdir -p /etc/docker- mkdir -p /usr/lib/systemd/system/- echo ExecStart/usr/bin/dockerd --insecure-registry192.168.100.10 /usr/lib/systemd/system/docker.service- cat /usr/lib/systemd/system/docker.service- echo $DOCKER_CONFIG /etc/docker/daemon.json- cat /etc/docker/daemon.json- echo Harbor12345 password.txt- cat password.txt | docker login -u admin --password-stdin 192.168.100.10- mv Dockerfiles/Dockerfile .- ls /home/gitlab-runner/ci-build-cache/- cp -rvf /home/gitlab-runner/ci-build-cache/target/2048 .- docker build -t demo:latest .- docker tag demo:latest 192.168.100.10/demo/demo:latest- docker push 192.168.100.10/demo/demo:latestdeploy:image: bitnami/kubectl:1.22stage: deploytags:- k8s-runnerscript:- kubectl apply -f template/demo-2048.yaml- kubectl apply -f template/service.yaml保存文件直接开始流水线 如果报错查看下述文章
https://www.yuque.com/wangziyang-5wpbr/rx60zg/rbhlexqumu6ralce?singleDoc# 《流水线排错记录》
运行结束 持久化缓存目录也成功了 访问masterIP:8889就可以玩游戏了
排错完毕特此记录 如果重启后这个pod错误了那么删除pod直接就会自动新建pod
启动后发现有问题 删除后自动又创建了一个然后又可以玩了 下面这三题太超纲了暂时放弃
10 服务网格创建 VirtualService
实验环境运行中的 Kubernetes 集群Istio 已经被正确安装
这个题要确定在搭建过程中istio部署成功且启用自动注入 Envoy 代理作为 Sidecar