Kubernetes容器云服务运维
这是一个系列笔记,欢迎各位大佬给与指导和交流
第一场:模块一 OpenSatck私有云平台搭建
第一场:模块二 OpenStack私有云服务运维
第一场:模块三 私有云Python运维开发
第二场:模块一 Kubernetes容器云平台搭建
第二场:模块二 Kubernetes容器云服务运维
第二场:模块三 Kubernetes容器云运维开发
第三场:模块一 边缘计算系统运维
第三场:模块二 边缘计算云应用开发
文章目录
- Kubernetes容器云服务运维
- 前言
- 题目部分
- 【题目 1】2.2.1 容器化部署 MariaDB [0.5 分]
- 【题目 2】2.2.2 容器化部署 Redis [0.5 分]
- 【题目3】2.2.3容器化部署Nginx[0.5 分]
- 【题目 4】2.2.4 容器化部署 ERP[0.5 分]
- 【题目 5】2.2.5 编排部署 ERP
- 【题目 6】2.2.6 部署 GitLab [1 分]
- 【题目 7】2.2.7 部署 GitLab Runner [1 分]
- 【题目 8】2.2.8 部署 GitLab Agent [1 分]
- 【题目 9】2.2.9 构建 CI/CD [2 分]
- 【题目 10】2.2.10 服务网格:创建 VirtualService [1 分]
- 【题目 11】2.2.11 KubeVirt 运维:创建 VMI [1 分]
- 【题目 12】2.2.12 容器云平台优化:使用审计日志[2 分]
- 【题目 13】2.2.13 容器云平台排错:容器引擎报错[1.5 分]
- 【题目 14】2.2.14 容器云平台排错:DNS 服务报错[1.5 分]
- 最后
前言
本节内容:Kubernetes容器云服务运维
用到的资源和节点规划:
CentOS-7-x86_64-DVD-2009.iso
chinaskills_cloud_iaas_v2.0.3.iso
coreos_production_pxe.vmlinuz
节点名称 | ip | 网卡 | 备注 |
---|---|---|---|
controller | 192.168.100.10 | eth0 | 与我们交互用 |
192.168.200.10 | eth1(内) | 填脚本上 | |
compute | 192.168.100.20 | eth0 | 与我们交互用 |
192.168.200.20 | eth1(内) | 填脚本上 |
题目部分
【题目 1】2.2.1 容器化部署 MariaDB [0.5 分]
编写 Dockerfile 文件构建 mysql 镜像,要求基于 centos 完成 MariaDB 数据库的安装和配置,并设置服务开机自启。
编写 Dockerfile 构建镜像 erp-mysql:v1.0,要求使用 centos7.9.2009 镜像作为基础镜像,完成 MariaDB 数据库的安装,设置 root 用户的密码为 tshoperp,新建数据库jsh_erp 并导入数据库文件 jsh_erp.sql,并设置 MariaDB 数据库开机自启。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:ERP.tar.gz)
答:
1,上传包并解压
[root@k8s-master-node1 ~]# ls
anaconda-ks.cfg chinaskills_cloud_paas_v2.0.2.iso ERP.tar.gz
[root@k8s-master-node1 ~]# tar -zxvf ERP.tar.gz
[root@k8s-master-node1 ~]# ls
anaconda-ks.cfg chinaskills_cloud_paas_v2.0.2.iso ERP ERP.tar.gz
2,加载镜像
[root@k8s-master-node1 ~]# cd ERP
[root@k8s-master-node1 ERP]# ls
app.jar centos_7.9.2009.tar jsh_erp.sql nginx yum
[root@k8s-master-node1 ERP]# docker load -i centos_7.9.2009.tar
Loaded image: centos:7.9.2009
3,配置yum源
要等待dockerfile处理,所以按下面这个url写
[root@k8s-master-node1 ERP]# vi local.repo
[root@k8s-master-node1 ERP]# cat local.repo
[ERP]
name=ERP
enabled=1
gpgcheck=0
baseurl=file:///root/yum
4,mysql脚本
要等待dockerfile处理,所以按下面这个路径写
[root@k8s-master-node1 ERP]# vi mysql_init.sh
[root@k8s-master-node1 ERP]# cat mysql_init.sh
#!/bin/bash
mysql_install_db --user=root
mysqld_safe --user=root &
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;"
脚本解释:
#!/bin/bash
# 初始化 MySQL 数据库
mysql_install_db --user=root
mysqld_safe --user=root &
sleep 8
# 设置 root 用户密码
mysqladmin -u root password 'tshoperp'
# 授权 root 用户
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;"
5,构建镜像脚本
[root@k8s-master-node1 ERP]# vi docker_mariadb
[root@k8s-master-node1 ERP]# cat docker_mariadb
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
ENV 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
CMD ["mysqld_safe","--user=root"]
脚本解释:
# 使用centos7.9.2009作为基础镜像
FROM centos:centos7.9.2009
# 维护者信息
MAINTAINER troml1788
# 删除/etc/yum.repos.d/目录下所有文件,这个目录通常存放yum仓库配置
RUN rm --rf /etc/yum.repos.d/*
# 将本地的local.repo文件复制到容器的/etc/yum.repos.d/目录下
COPY local.repo /etc/yum.repos.d/
# 在根目录创建一个yum文件夹,用于存放yum仓库
RUN mkdir /root/yum
# 将本地的yum目录复制到容器的/root/yum目录下
COPY yum /root/yum
# 设置环境变量LC_ALL为en_US.UTF-8,这是为了支持多语言字符集
ENV LC_ALL en_US.UTF-8
# 安装MariaDB服务器,这里使用的是yum安装方式,-y参数表示自动回答yes
RUN yum -y install mariadb-server
# 将此处的jsh_erp.sql复制到容器的/opt/目录下
COPY jsh_erp.sql /opt/
# 将本地的mysql_init.sh脚本复制到容器的/opt/目录下
COPY mysql_init.sh /opt/
# 执行mysql_init.sh脚本,这个脚本用于初始化数据库
RUN bash /opt/mysql_init.sh
# 暴露3306端口,这是MySQL/MariaDB默认的端口
EXPOSE 3306
# 容器启动时执行mysqld_safe命令,--user=root表示以root用户运行MySQL服务
CMD ["mysqld_safe", "--user=root"]
6,开始执行
注意命令最后还有个 .
[root@k8s-master-node1 ERP]# docker build -t erp-mysql:v1.0 -f docker_mariadb .
Sending build context to Docker daemon 427.1MB
Step 1/13 : FROM centos:centos7.9.2009
---> eeb6ee3f44bd
Step 2/13 : MAINTAINER troml1788
---> Using cache
---> 8fc24d0ec16f
Step 3/13 : RUN rm -rf /etc/yum.repos.d/*
---> Using cache
---> 1c6408d963cb
Step 4/13 : COPY local.repo /etc/yum.repos.d/
---> Using cache
---> d1d06d6e4a53
Step 5/13 : RUN mkdir /root/yum
---> Using cache
---> db2d565bb737
Step 6/13 : COPY yum /root/yum
---> Using cache
---> 430ad035b5e8
Step 7/13 : ENV LC_ALL en_US.UTF-8
---> Using cache
---> 49f69606dfb1
Step 8/13 : RUN yum install -y mariadb-server
---> Using cache
---> bc342cb44fcf
Step 9/13 : COPY jsh_erp.sql /opt/
---> Using cache
---> 399934e9e2e3
Step 10/13 : COPY mysql_init.sh /opt/
---> d12edc976af2
Step 11/13 : RUN bash /opt/mysql_init.sh
---> Running in fa118f238235
Installing MariaDB/MySQL system tables in '/var/lib/mysql' ...
OK
...省略...
Step 12/13 : EXPOSE 3306
---> Running in cde4bd6acb23
Removing intermediate container cde4bd6acb23
---> 6e7f28fdfdcf
Step 13/13 : CMD ["mysqld_safe","--user=root"]
---> Running in d4602d3237fd
Removing intermediate container d4602d3237fd
---> 463a19d01457
Successfully built 463a19d01457
Successfully tagged erp-mysql:v1.0
解释
这行命令是使用Docker构建一个新的镜像,并给这个镜像打上标签。让我们逐部分解析这个命令:
docker build: 这是Docker CLI的一个命令,用于构建Docker镜像。
-t erp-mysql:v1.0: 这个选项指定了镜像的名称和标签。在这里,erp-mysql是镜像的名称,v1.0是这个镜像的标签。标签可以帮助你区分同一个镜像的不同版本。
-f docker_mariadb: 这个选项指定了Dockerfile的文件名。默认情况下,Docker会在构建上下文的根目录查找一个名为Dockerfile的文件。如果你的Dockerfile名称不是默认的,或者不在根目录下,你需要使用-f选项来指定Dockerfile的路径。在这个例子中,Dockerfile的名称被假设为docker_mariadb。
.: 构建上下文的路径。在这个例子中,.表示当前目录,也就是说Docker将使用当前目录作为构建上下文。构建上下文是Docker构建镜像时可以访问的文件和目录的集合。当你执行docker build命令时,Docker客户端会将构建上下文(包括Dockerfile和它引用的任何文件)发送到Docker守护进程。
总结起来,这条命令的含义是:使用当前目录作为构建上下文,根据名为docker_mariadb的Dockerfile,构建一个新的Docker镜像,并将这个镜像标记为erp-mysql:v1.0。
在执行这个命令之前,请确保当前目录中存在docker_mariadb文件,并且该文件是有效的Dockerfile。此外,确保所有Dockerfile中引用的文件都位于当前目录或其子目录中。
7,验证
[root@k8s-master-node1 ERP]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
erp-mysql v1.0 463a19d01457 About a minute ago 1.14GB
*****省略*****
【题目 2】2.2.2 容器化部署 Redis [0.5 分]
编写 Dockerfile 文件构建 redis 镜像,要求基于 centos 完成 Redis 服务的安装和配置,并设置服务开机自启。
编写 Dockerfile 构建镜像 erp-redis:v1.0,要求使用 centos7.9.2009 镜像作为基础镜像,完成 Redis 服务的安装,修改其配置文件关闭保护模式,并设置 Redis 服务开机自启。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:ERP.tar.gz)
答:
1,编写脚本
[root@k8s-master-node1 ERP]# vi docker_redis
[root@k8s-master-node1 ERP]# cat 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
CMD ["/usr/bin/redis-server","/etc/redis.conf"]
2,运行脚本注意最后那个点
[root@k8s-master-node1 ERP]# docker build -t erp-redis:v1.0 -f docker_redis .
Sending build context to Docker daemon 427.1MB
Step 1/11 : FROM centos:centos7.9.2009
---> eeb6ee3f44bd
Step 2/11 : MAINTAINER troml1788
---> Using cache
---> 8fc24d0ec16f
Step 3/11 : RUN rm -rf /etc/yum.repos.d/*
---> Using cache
---> 1c6408d963cb
Step 4/11 : COPY local.repo /etc/yum.repos.d/
---> Using cache
---> d1d06d6e4a53
Step 5/11 : RUN mkdir /root/yum
---> Using cache
---> db2d565bb737
Step 6/11 : COPY yum /root/yum
---> Using cache
---> 430ad035b5e8
Step 7/11 : RUN yum install -y redis
---> Running in baae786eab9c
Loaded plugins: fastestmirror, ovl
*****省略*****
Complete!
Removing intermediate container baae786eab9c
---> 9215813e9f66
Step 8/11 : RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/redis.conf
---> Running in 46a50097e63e
Removing intermediate container 46a50097e63e
---> e7d4e71b7972
Step 9/11 : RUN sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf
---> Running in 35dd0bf6ead7
Removing intermediate container 35dd0bf6ead7
---> d6e19999c581
Step 10/11 : EXPOSE 6379
---> Running in a5fc11360f56
Removing intermediate container a5fc11360f56
---> d12fd9d152ff
Step 11/11 : CMD ["/usr/bin/redis-server","/etc/redis.conf"]
---> Running in 37ad1a9ac737
Removing intermediate container 37ad1a9ac737
---> 295862a5ce88
Successfully built 295862a5ce88
Successfully tagged erp-redis:v1.0
3,验证
[root@k8s-master-node1 ERP]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
erp-redis v1.0 295862a5ce88 About a minute ago 542MB
erp-mysql v1.0 463a19d01457 5 minutes ago 1.14GB
*****省略*****
脚本解释
# 使用 CentOS 7.9.2009 作为基础镜像
FROM centos:centos7.9.2009
# 设置镜像的维护者(已弃用,推荐使用 LABEL)
MAINTAINER troml1788
# 删除所有默认的 yum 源配置文件,以便使用自定义 yum 源配置
RUN rm -rf /etc/yum.repos.d/*
# 将自定义的 yum 源配置文件复制到容器中【跟上一题的一样,可自定义位置】
COPY local.repo /etc/yum.repos.d/
# 在根目录创建一个yum文件夹,用于存放yum仓库
RUN mkdir /root/yum
# 将预下载的 yum 包缓存复制到容器中,加速安装过程
COPY yum /root/yum
# 安装 Redis
RUN yum install -y redis
# 修改 Redis 配置文件,将监听地址从 127.0.0.1 更改为 0.0.0.0,允许外部访问
RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/redis.conf
# 修改 Redis 配置文件,关闭保护模式,注意这可能会带来安全风险
RUN sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf
# 暴露 Redis 默认端口 6379,以便外部访问
EXPOSE 6379
# 设置容器启动时执行的命令,启动 Redis 服务并使用上述修改过的配置文件
CMD ["/usr/bin/redis-server", "/etc/redis.conf"]
【题目3】2.2.3容器化部署Nginx[0.5 分]
编写 Dockerfile 文件构建 nginx 镜像,要求基于 centos 完成 Nginx 服务的安装和配置,并设置服务开机自启。
编写 Dockerfile 构建镜像 erp-nginx:v1.0,要求使用 centos7.9.2009 镜像作为基础镜像,完成 Nginx 服务的安装,使用提供的 app.tar.gz 和 nginx.conf 启动 Nginx 服务, 并设置开机自启。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:ERP.tar.gz)
答:
1,编写脚本
[root@k8s-master-node1 ERP]# vi docker_nginx
[root@k8s-master-node1 ERP]# cat docker_nginx
FROM centos:centos7.9.2009
MAINTAINER troml
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 nginx
RUN mkdir -p /etc/nginx/
COPY nginx/nginx.conf /eitc/nginx/nginx.conf
RUN mkdir -p /usr/share/nginx/html/
COPY nginx/app.tar.gz /usr/share/nginx/html/
RUN cd /usr/share/nginx/html/ && \
tar -zxvf app.tar.gz && \
rm -f app.tar.gz
EXPOSE 80
CMD ["nginx","-g","daemon off;"]
2,执行脚本(后添加两条创建文件夹的,没有在回显中显示)
[root@k8s-master-node1 ERP]# docker build -t erp-nginx:v1.0 -f docker_nginx .
Sending build context to Docker daemon 437.9MB
Step 1/14 : FROM centos:centos7.9.2009
---> eeb6ee3f44bd
Step 2/14 : MAINTAINER troml
---> Using cache
---> 0e384b4b20d4
Step 3/14 : RUN rm -rf /etc/yum.repos.d/*
---> Using cache
---> c958c351502d
Step 4/14 : COPY local.repo /etc/yum.repos.d/
---> 795ff37c4865
Step 5/14 : RUN mkdir /root/yum
---> Running in 4b2f700ac3be
Removing intermediate container 4b2f700ac3be
---> cc73104ffc04
Step 6/14 : COPY yum /root/yum
---> f2cc6d53f2cf
Step 7/14 : RUN yum install -y nginx
---> Running in b065805cf31d
Loaded plugins: fastestmirror, ovl
*****省略*****
Step 8/14 : RUN mkdir -p /etc/nginx/
---> Running in 03aae3814cc5
Removing intermediate container 03aae3814cc5
---> 77710502215f
Step 9/14 : COPY nginx/nginx.conf /eitc/nginx/nginx.conf
---> b5ece8bcd2b1
Step 10/14 : RUN mkdir -p /usr/share/nginx/html/
---> Running in 4293e88bdfd3
Removing intermediate container 4293e88bdfd3
---> 2858c4571467
Step 11/14 : COPY nginx/app.tar.gz /usr/share/nginx/html/
---> 1b9642213bd7
Step 12/14 : RUN cd /usr/share/nginx/html/ && tar -zxvf app.tar.gz && rm -f app.tar.gz
---> Running in 50803e643bdb
3,验证
[root@k8s-master-node1 ERP]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
erp-nginx v1.0 d30e7428a20f 3 minutes ago 588MB
erp-redis v1.0 295862a5ce88 8 minutes ago 542MB
erp-mysql v1.0 463a19d01457 12 minutes ago 1.14GB
*****省略*****
脚本解释
# 使用 CentOS 7.9.2009 作为基础镜像
FROM centos:centos7.9.2009
# 设置镜像的维护者(MAINTAINER 已弃用,推荐使用 LABEL)
MAINTAINER troml
# 删除所有默认的 yum 源配置文件,以便使用自定义的yum源
RUN rm -rf /etc/yum.repos.d/*
# 将自定义的 yum 源配置文件复制到容器中的/etc/yum.repos.d/目录下
COPY local.repo /etc/yum.repos.d/
# 使用 yum 安装 nginx
RUN yum install -y nginx
# 创建文件夹
RUN mkdir -p /etc/nginx/
# 将自定义的 nginx 配置文件复制到容器中
COPY nginx/nginx.conf /etc/nginx/nginx.conf
# 将压缩过的应用程序文件复制到容器的 nginx 静态文件目录下
COPY nginx/app.tar.gz /usr/share/nginx/html/
# 创建文件夹
RUN mkdir -p /usr/share/nginx/html/
# 解压应用程序压缩包到 nginx 的静态文件目录,并删除压缩包
RUN cd /usr/share/nginx/html/ && \
tar -zxvf app.tar.gz && \
rm -f app.tar.gz
# 暴露 80 端口以供外部访问 nginx 服务
EXPOSE 80
# 设置容器启动时执行的命令,以前台模式启动 nginx
CMD ["nginx","-g","daemon off;"]
【题目 4】2.2.4 容器化部署 ERP[0.5 分]
编写 Dockerfile 文件构建 erp 镜像,要求基于 centos 完成 JDK 环境和 ERP 服务的安装与配置,并设置服务开机自启。
编写 Dockerfile 构建镜像 erp-server:v1.0,要求使用 centos7.9.2009 镜像作为基础镜像,完成 JDK 环境的安装,启动提供的 jar 包,并设置服务开机自启。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:
ERP.tar.gz)
答:
1,编写脚本
root@k8s-master-node1 ERP]# vi docker_erp
[root@k8s-master-node1 ERP]# cat docker_erp
FROM centos:centos7.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
CMD java -jar /root/app.jar
2,运行脚本
[root@k8s-master-node1 ERP]# docker build -t erp-service:v1.0 -f docker_erp .
Sending build context to Docker daemon 427.1MB
Step 1/10 : FROM centos:centos7.9.2009
---> eeb6ee3f44bd
Step 2/10 : MAINTAINER troml1788
---> Using cache
---> 8fc24d0ec16f
Step 3/10 : COPY app.jar /root
---> e511d1a9d7e2
Step 4/10 : RUN mkdir -p /root/yum
---> Running in 508fd13cb619
Removing intermediate container 508fd13cb619
---> 9b34663295e0
Step 5/10 : COPY yum /root/yum
---> fb44464567e6
Step 6/10 : RUN rm -rfv /etc/yum.repos.d/*
---> Running in 11771040f0ae
removed '/etc/yum.repos.d/CentOS-Base.repo'
removed '/etc/yum.repos.d/CentOS-CR.repo'
removed '/etc/yum.repos.d/CentOS-Debuginfo.repo'
removed '/etc/yum.repos.d/CentOS-Media.repo'
removed '/etc/yum.repos.d/CentOS-Sources.repo'
removed '/etc/yum.repos.d/CentOS-Vault.repo'
removed '/etc/yum.repos.d/CentOS-fasttrack.repo'
removed '/etc/yum.repos.d/CentOS-x86_64-kernel.repo'
Removing intermediate container 11771040f0ae
---> 3bf6ff3eb1af
Step 7/10 : COPY local.repo /etc/yum.repos.d/
---> d9549e050881
Step 8/10 : RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
---> Running in cb6d90d2c8cb
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
Resolving Dependencies
--> Running transaction check
*******省略********
Complete!
Removing intermediate container 647af9c48e46
---> c273dfcfe597
Step 9/10 : EXPOSE 9999
---> Running in 3cd56de070a0
Removing intermediate container 3cd56de070a0
---> aa36c982a0f8
Step 10/10 : CMD java -jar /root/ERP/app.jar
---> Running in bb2c15edf271
Removing intermediate container bb2c15edf271
---> 27bae0fd4cfe
Successfully built 27bae0fd4cfe
Successfully tagged erp-service:v1.0
3,验证
[root@k8s-master-node1 ERP]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
erp-service v1.0 847dab130365 58 seconds ago 818MB
erp-nginx v1.0 d30e7428a20f 11 minutes ago 588MB
erp-redis v1.0 295862a5ce88 16 minutes ago 542MB
erp-mysql v1.0 463a19d01457 20 minutes ago 1.14GB
脚本解释
# 使用 CentOS 7.9.2009 作为基础镜像
FROM centos:centos7.9.2009
# 维护者信息
MAINTAINER troml
# 复制应用程序 jar 文件到 /root 目录
COPY app.jar /root
# 复制 yum 目录到 /root/yum 目录
COPY yum /root/yum
# 清理 /etc/yum.repos.d/ 目录下的所有文件
RUN rm -rfv /etc/yum.repos.d/*
# 复制本地 yum 源配置文件到 /etc/yum.repos.d/local.repo
COPY local.repo /etc/yum.repos.d/local.repo
# 安装 OpenJDK 8
RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
# 暴露容器监听的端口
EXPOSE 9999
# 启动 Java 应用程序
CMD java -jar /root/app.jar
【题目 5】2.2.5 编排部署 ERP
管理系统[1 分]
编写 docker-compose.yaml 文件,要求使用镜像 mysql、redis、nginx 和 erp 完成 ERP管理系统的编排部署。
编写 docker-compose.yaml 完成 ERP 管理系统的部署,要求定义mysql、redis、nginx 和erp 共四个Service,分别使用镜像erp-redis:v1.0、erp-mysql:v1.0、erp-nginx:v1.0 和 erp-server:v1.0,并将 nginx 服务的 80 端口映射到宿主机的 8888 端口。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:
ERP.tar.gz)
答:
1,编写脚本注意缩进
services 下面的每个服务都缩进了两个空格
[root@k8s-master-node1 ~]# vi docker-compose.yaml
[root@k8s-master-node1 ~]# cat docker-compose.yaml
version: '3.8'
services:
mysql:
image: erp-mysql:v1.0
redis:
image: erp-redis:v1.0
erp:
image: erp-server:v1.0
nginx:
image: erp-nginx:v1.0
ports:
- "8888:80" # 将宿主机的 8888 端口映射到容器的 80 端口
前提:在包含 docker-compose.yaml 文件的目录中,并且系统中已经安装了 docker-compose 工具
检查环境
[root@k8s-master-node1 ~]# ls
anaconda-ks.cfg chinaskills_cloud_paas_v2.0.2.iso coredns-configmap.yaml docker-compose.yaml ERP ERP.tar.gz kube-dns-service.yaml
[root@k8s-master-node1 ~]# docker-
docker-compose docker-init docker-proxy
2,运行yaml
[root@k8s-master-node1 ~]# docker-compose up -d
[+] Running 4/4
⠿ Container root-erp-1 Started 0.3s
⠿ Container root-mysql-1 Running 0.0s
⠿ Container root-redis-1 Running 0.0s
⠿ Container root-nginx-1 Running 0.0s
3,验证(步骤就是这么个步骤,也访问成功了,只是app.jar环境出现了点问题)
[root@k8s-master-node1 ~]# docker ps |grep nginx
7e63d115fbf4 erp-nginx:v1.0 "nginx -g 'daemon of…" 11 minutes ago Up 11 seconds 0.0.0.0:8888->80/tcp, :::8888->80/tcp root-nginx-1
ee671924e2a0 goharbor/nginx-photon:v2.3.4 "nginx -g 'daemon of…" 2 hours ago Up 2 hours (healthy) 0.0.0.0:80->8080/tcp, :::80->8080/tcp nginx
7d5d00e073b0 goharbor/harbor-portal:v2.3.4 "nginx -g 'daemon of…" 2 hours ago Up 2 hours (healthy) harbor-portal
从现在开始建议将快照回退至容器云平台刚搭建好的快照
【题目 6】2.2.6 部署 GitLab [1 分]
将 GitLab 部署到 Kubernetes 集群中,设置 GitLab 服务 root 用户的密码,使用Service 暴露服务,并将提供的项目包导入到 GitLab 中。
在 Kubernetes 集群中新建命名空间 gitlab-ci,将 GitLab 部署到该命名空间下, Deployment 和 Service 名称均为 gitlab,以 NodePort 方式将 80 端口对外暴露为 30880, 设置GitLab 服务root 用户的密码为admin@123,将项目包demo-2048.tar.gz 导入到GitLab 中并名为 demo-2048。
完成后提交 Master 节点的用户名、密码和 IP 地址到答题框。(需要用到的软件包:CICD-Runner.tar.gz)
小提示:本实验只需要master一台机器就够了
注意:因为制作软件包的时候,把CICD错写成了CIDI,所以本题答案中的CIDI软件包实际为均为CICD
软件包已更正名字,现在名字叫CICD-Runner.tar.gz
记录一个新知识
答案在下面
快速编写yaml文件方法
[root@k8s-master-node1 ~]# kubectl create --help
......
Available Commands:
clusterrole Create a cluster role
clusterrolebinding Create a cluster role binding for a particular cluster role
configmap Create a config map from a local file, directory or literal value
cronjob Create a cron job with the specified name
deployment Create a deployment with the specified name 《《 本题用
ingress Create an ingress with the specified name
job Create a job with the specified name
namespace Create a namespace with the specified name
poddisruptionbudget Create a pod disruption budget with the specified name
priorityclass Create a priority class with the specified name
quota Create a quota with the specified name
role Create a role with single rule
rolebinding Create a role binding for a particular role or cluster role
secret Create a secret using specified subcommand
service Create a service using a specified subcommand 《《 本题用
serviceaccount Create a service account with the specified name
......
答:
1,导入镜像包
上传包并解压
[root@k8s-master-node1 ~]# ls
anaconda-ks.cfg chinaskills_cloud_paas_v2.0.2.iso CIDI-Runner.tar.gz
[root@k8s-master-node1 ~]# tar -zxvf CIDI-Runner.tar.gz
CIDI-Runner/
CIDI-Runner/demo-2048.tar.gz
CIDI-Runner/gitlab-agent-1.1.0.tgz
CIDI-Runner/gitlab-runner-0.43.0.tgz
CIDI-Runner/images/
CIDI-Runner/images/A_readme.txt
CIDI-Runner/images/bitnami_kubectl_1.22.tar
CIDI-Runner/images/docker-18.09.7-dind.tar
CIDI-Runner/images/docker-18.09.7.tar
CIDI-Runner/images/gitlab-gitlab-ce-latest.tar
CIDI-Runner/images/gitlab-org_cluster-integration_gitlab-agent_agentk_v15.1.0.tar
CIDI-Runner/images/gitlab-org_gitlab-runner.tar
CIDI-Runner/images/gitlab-org_gitlab-runner_gitlab-runner-helper.tar
CIDI-Runner/images/load_images.sh
CIDI-Runner/images/maven-3.6-jdk-8.tar
CIDI-Runner/images/tomcat-8.5.64-jdk8.tar
切换至存放镜像的目录下,运行导入脚本
[root@k8s-master-node1 ~]# cd CIDI-Runner/
[root@k8s-master-node1 CIDI-Runner]# ls
demo-2048.tar.gz gitlab-agent-1.1.0.tgz gitlab-runner-0.43.0.tgz images
[root@k8s-master-node1 CIDI-Runner]# cd images/
[root@k8s-master-node1 images]# ls
A_readme.txt docker-18.09.7.tar gitlab-org_gitlab-runner_gitlab-runner-helper.tar maven-3.6-jdk-8.tar
bitnami_kubectl_1.22.tar gitlab-gitlab-ce-latest.tar gitlab-org_gitlab-runner.tar tomcat-8.5.64-jdk8.tar
docker-18.09.7-dind.tar gitlab-org_cluster-integration_gitlab-agent_agentk_v15.1.0.tar load_images.sh
给脚本添加可执行权限
[root@k8s-master-node1 images]# chmod +x load_images.sh
[root@k8s-master-node1 images]# ./load_images.sh 《《 按回车开始导入镜像
回到根目录
[root@k8s-master-node1 images]# cd
[root@k8s-master-node1 ~]#
2,编写yaml文件
2.1,编写部署deployment的部分
kubectl create deployment gitlab:使用 kubectl 命令创建一个名为 gitlab 的 Deployment 对象。
–image=gitlab/gitlab-ce:latest:指定 gitlab 的容器镜像为 gitlab/gitlab-ce,并使用 :latest 标签。这将确保使用最新版本的 GitLab Community Edition 容器镜像来运行 Deployment 中的 Pod。
–port=80:指定 gitlab 的容器应该暴露在 80 端口上。
–dry-run:此选项告诉 kubectl 在实际创建资源之前模拟执行操作,以便检查配置是否正确,但不会实际创建、更新或删除资源。
-oyaml:将 Deployment 的配置以 YAML 格式输出。此选项告诉 kubectl 将对象的 YAML 表示形式输出到控制台,以便可以重定向到文件中。
gitlab.yaml:将命令的输出重定向到一个名为 gitlab.yaml 的文件中。这会将生成的 YAML 配置信息保存到 gitlab.yaml 文件中,以便后续可以使用该文件来创建 Deployment。
[root@k8s-master-node1 ~]# kubectl create deployment gitlab --image=gitlab/gitlab-ce:latest --port=80 --dry-run -oyaml > gitlab.yaml
W0306 18:36:12.747995 42002 helpers.go:555] --dry-run is deprecated and can be replaced with --dry-run=client.
[root@k8s-master-node1 ~]# vi gitlab.yaml
*********************************************************************
命令模式下键入dd即可删除光标所在行
插入模式下 Ctrl + K:删除光标后面的所有内容,包括光标所在位置的字符。
*********************************************************************
删除一些用不上的,留下下面那些即可
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: gitlab
name: gitlab
spec:
replicas: 1
selector:
matchLabels:
app: gitlab
template:
metadata:
labels:
app: gitlab
spec:
containers:
- image: gitlab/gitlab-ce:latest
name: gitlab-ce
ports:
- containerPort: 80
再对其添加一些
[root@k8s-master-node1 ~]# vi gitlab.yaml
[root@k8s-master-node1 ~]# cat gitlab.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: gitlab
name: gitlab
namespace: gitlab-ci # 添加要部署的命名空间,等会记得先创建
spec:
replicas: 1
selector:
matchLabels:
app: gitlab
template:
metadata:
labels:
app: gitlab
spec:
containers:
- image: gitlab/gitlab-ce:latest
imagePullPolicy: IfNotPresent #添加镜像拉取策略,本地有这个镜像就不用再拉了
name: gitlab-ce
ports:
- containerPort: 80
env:
- name: GITLAB_ROOT_PASSWORD # 添加root用户密码
# 注意这里,因为我们用的最新版gitlab镜像,严格要求不能是弱密码
# 所以此处先不按题目的admin@123来,比赛时要填admin@123
value: QazWsxEdc781 # 设置root用户密码
#下面这几个不指定也可以,本来就是默认的
- name: GITLAB_HOST # 添加master主机
value: 192.168.100.20 # 添加IP
- name: GITLAB_PORT
value: "80"
2.2,编写部署service的部分添加了注释,下面的yaml文件可直接复制
追加至刚刚写好的部署deployment的yaml文件
[root@k8s-master-node1 ~]# kubectl create service nodeport gitlab --tcp=80:80 --dry-run -oyaml >> gitlab.yaml
W0306 18:57:30.422614 76164 helpers.go:555] --dry-run is deprecated and can be replaced with --dry-run=client.
[root@k8s-master-node1 ~]#
*******************************************************
注意:一个yaml部署两个资源,需要用横杠隔开,也就是三个减号 ---
*******************************************************
[root@k8s-master-node1 ~]# vi gitlab.yaml
[root@k8s-master-node1 ~]# cat gitlab.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: gitlab
name: gitlab
namespace: gitlab-ci # 添加要部署的命名空间,等会记得先创建
spec:
replicas: 1
selector:
matchLabels:
app: gitlab
template:
metadata:
labels:
app: gitlab
spec:
containers:
- image: gitlab/gitlab-ce:latest
imagePullPolicy: IfNotPresent #添加镜像拉取策略,本地有这个镜像就不用再拉了
name: gitlab-ce
ports:
- containerPort: 80
env:
- name: GITLAB_ROOT_PASSWORD # 添加root用户密码
# 注意这里,因为我们用的最新版gitlab镜像,严格要求不能是弱密码
# 所以此处先不按题目的admin@123来,比赛时要填admin@123
value: QazWsxEdc781 # 设置root用户密码
#下面这几个不指定也可以,本来就是默认的
- name: GITLAB_HOST # 添加master主机
value: 192.168.25.100 # 添加MASTER IP
- name: GITLAB_PORT
value: "80"
---
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: gitlab
name: gitlab
namespace: gitlab-ci
spec:
ports:
- name: 80-80
port: 80
protocol: TCP
targetPort: 80
nodePort: 30880 #添加暴漏端口,不然会随机一个
selector: # 选择器很重要,它会找这个gitlab然后暴漏它的端口
app: gitlab
type: NodePort
3,建命名空间gitlab-ci,并部署deployment和service
[root@k8s-master-node1 ~]# kubectl create namespace gitlab-ci
namespace/gitlab-ci created
[root@k8s-master-node1 ~]# kubectl apply -f gitlab.yaml
deployment.apps/gitlab created
service/gitlab created
[root@k8s-master-node1 ~]#
验证是否正常运行,下面就是正常运行
[root@k8s-master-node1 ~]# kubectl get pod,svc -n gitlab-ci
NAME READY STATUS RESTARTS AGE
pod/gitlab-57948cdbcb-r875v 1/1 Running 0 11s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/gitlab NodePort 10.96.204.15 <none> 80:30880/TCP 11s
等待一会即可访问Gitlab图形化界面
接下来将项目包demo-2048.tar.gz 导入到GitLab 中并名为 demo-2048
通过$masterIP:30880
访问Gitlab图形化界面
用户root,密码QazWsxEdc781
再次提醒:题目要求的密码是admin@123,由于最新版不能弱密码只能设置这个密码
访问后,
依次点击
1,Create new project
2,Import project
************************************************************************************
!注意:如果遇到
No import options available
Contact an administrator to enable options for importing your project.
按以下步骤开启导入权限:
a,点击左侧面板左下角的 admin area
b,点击 Settings
c,点击 General
d,点击 Import and export settings 后面的 Expand
e,在 Import sources 中勾选 GitLab export
f,勾选 Allow migrating GitLab groups and projects by direct transfer 下面的 Enabled
g,拉到下面点击 Save changes
h,上方出现 Application settings saved successfully 表示成功
i,依次点击左侧面板的 Overview -> Projects -> New Project -> Import Project
************************************************************************************
3,点击 GitLab export
4,在Project name输入项目名字,题目要求demo-2048
5,project URL 下选择root
6,点击浏览文件,找到本地的demo-2048.tar.gz上传
7,点击Import Project
至此题目完成
【题目 7】2.2.7 部署 GitLab Runner [1 分]
将 GitLab Runner 部署到 Kubernetes 集群中,为 GitLab Runner 创建持久化构建缓存目录以加速构建速度,并将其注册到 GitLab 中。
将 GitLab Runner 部署到 gitlab-ci 命名空间下,Release 名称为 gitlab-runner,为GitLab Runner 创建持久化构建缓存目录/home/gitlab-runner/ci-build-cache 以加速构建速度,并将其注册到 GitLab 中。
完成后提交 Master 节点的用户名、密码和 IP 地址到答题框。(需要用到的软件包:CICD-Runner.tar.gz)
注意:因为制作软件包的时候,把CICD错写成了CIDI,所以本题答案中的CIDI软件包实际为均为CICD
软件包已更正名字,现在名字叫CICD-Runner.tar.gz
答:
1,解压包
用的是这个包
[root@k8s-master-node1 ~]# ls CIDI-Runner/ |grep runner
gitlab-runner-0.43.0.tgz
解压并进入路径
[root@k8s-master-node1 CIDI-Runner]# tar -zxvf gitlab-runner-0.43.0.tgz
gitlab-runner/Chart.yaml
gitlab-runner/values.yaml
gitlab-runner/templates/NOTES.txt
gitlab-runner/templates/_cache.tpl
gitlab-runner/templates/_env_vars.tpl
gitlab-runner/templates/_helpers.tpl
gitlab-runner/templates/configmap.yaml
gitlab-runner/templates/deployment.yaml
gitlab-runner/templates/hpa.yaml
gitlab-runner/templates/role-binding.yaml
gitlab-runner/templates/role.yaml
gitlab-runner/templates/secrets.yaml
gitlab-runner/templates/service-account.yaml
gitlab-runner/templates/service-session-server.yaml
gitlab-runner/templates/service.yaml
gitlab-runner/templates/servicemonitor.yaml
gitlab-runner/.gitlab/changelog.yml
gitlab-runner/.gitlab-ci.yml
gitlab-runner/.helmignore
gitlab-runner/CHANGELOG.md
gitlab-runner/CONTRIBUTING.md
gitlab-runner/LICENSE
gitlab-runner/Makefile
gitlab-runner/NOTICE
gitlab-runner/README.md
安装helm,压缩包在/roo/CICD-Runner/下
[root@k8s-master-node1 CIDI-Runner]# tar -zxvf helm-v3.10.2-linux-amd64.tar.gz
linux-amd64/
linux-amd64/helm
linux-amd64/LICENSE
linux-amd64/README.md
[root@k8s-master-node1 ~]# cd linux-amd64/
[root@k8s-master-node1 linux-amd64]# ls
helm LICENSE README.md
[root@k8s-master-node1 linux-amd64]# mv helm /usr/bin/helm
[root@k8s-master-node1 linux-amd64]# cd
[root@k8s-master-node1 linux-amd64]# cd /root/CIDI-Runner/gitlab-runner/
[root@k8s-master-node1 gitlab-runner]# ls
CHANGELOG.md Chart.yaml CONTRIBUTING.md LICENSE Makefile NOTICE README.md templates values.yaml
2,查看我们的gitlab-runner 和 gitlab镜像版本,这里的版本是 alpine-v15.2.0
和 v16.9.1
[root@k8s-master-node1 gitlab-runner]# docker images |grep gitlab
查看我们的runner版本
gitlab/gitlab-ce latest e9cb66792d94 2 weeks ago 3.01GB
registry.gitlab.com/gitlab-org/gitlab-runner alpine-v15.2.0 173fe605463c 19 months ago 222MB
registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper x86_64-7f093137 018c6111ad03 19 months ago 59.1MB
registry.gitlab.com/gitlab-org/cluster-integration/gitlab-agent/agentk v15.1.0 f854965ce1fa 21 months ago 73.8MB
**************************************************
查看我们的gitlab版本
1,登陆进gitlab后,依次点击 Overview -> Dashboard
在Components中会显示这么个东西:
GitLab v16.9.1
GitLab Shell14.33
**************************************************
所以,我们的 runner版本是 v15.2.0 gitlab版本是 v16.9.1
3,开始修改values.yaml 文件过长,只贴需要修改的模块
一、常规修改方法:
第一处修改点:指定为我们现有的runner版本
14 image:
15 registry: registry.gitlab.com
16 image: gitlab-org/gitlab-runner
17 tag: alpine-v15.2.0 #### 修改这里为我们的runner版本并取消注释
......
第二处修改点:指定我们的gitlab地址
******************************
http://192.168.100.20:30880/
******************************
48 ## The GitLab Server URL (with protocol) that want to register the runner against
49 ## ref: https://docs.gitlab.com/runner/commands/index.html#gitlab-runner-register
50 ##
51 # gitlabUrl: http://gitlab.your-domain.com/
第三处修改点:添加令牌
******************************************************************************************
获取令牌的方法:
登陆进gitlab后
点击左侧面板的 CICD -> Runners -> New instance runner 旁边的三个点,复制后找个地方存放起来
令牌格式如下:
R-9yUvXwNkx8reZ19BUF
******************************************************************************************
53 ## The Registration Token for adding new Runners to the GitLab Server. This must
54 ## be retrieved from your GitLab Instance.
55 ## ref: https://docs.gitlab.com/ce/ci/runners/index.html
56 ##
57 # runnerRegistrationToken: ""
第四处修改点:修改为true
151 ## For RBAC support:
152 rbac:
153 create: true ## 不创建的话,后面流水线有报错
二、推荐修改方法:(不容易错)
斜杠换行(手机版CSDN可能不会显示斜杠)
[root@k8s-master-node1 gitlab-runner]# helm install --namespace gitlab-ci gitlab-runner \
> --set gitlabUrl=http://192.168.100.20:30880/ \
> --set runnerRegistrationToken=R-9yUvXwNkx8reZ19BUF \
> --set runners.tags=k8s-runner \
> --set rbac.create=true .
NAME: gitlab-runner
LAST DEPLOYED: Thu Mar 7 03:29:59 2024
NAMESPACE: gitlab-ci
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Your GitLab Runner should now be registered against the GitLab instance reachable at: "http://192.168.100.20:30880/"
Runner namespace "gitlab-ci" was found in runners.config template.
验证:
[root@k8s-master-node1 gitlab-runner]# helm list -n gitlab-ci
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
gitlab-runner gitlab-ci 1 2024-03-07 03:29:59.876705333 +0800 CST deployed gitlab-runner-0.43.0 15.2.0
[root@k8s-master-node1 gitlab-runner]# kubectl get pod -A | grep gitlab-runner
gitlab-ci gitlab-runner-7c787c5b4-hxfzm 1/1 Running 0 41s
命令解析:
****************************************************************************
helm install:使用 Helm 安装一个新的 Chart。
--namespace gitlab-ci:指定 Helm 安装的命名空间为 gitlab-ci,即将 GitLab Runner 安装到 gitlab-ci 命名空间中。
gitlab-runner:指定要安装的 Chart 名称为 gitlab-runner。
--set gitlabUrl=http://192.168.100.20:30880/:设置 GitLab 实例的 URL 为 http://192.168.100.20:30880/,即指定 GitLab 的地址和端口号。
--set runnerRegistrationToken=R-9yUvXwNkx8reZ19BUF:设置 Runner 的注册令牌为 R-9yUvXwNkx8reZ19BUF,用于注册 Runner 到 GitLab。
--set runner.tags=k8s-runner:设置 Runner 的标签为 k8s-runner,用于为 Runner 分配特定的任务。
--set rbac.create=true:设置 Helm 在安装时创建 RBAC 规则为 true,即创建与 Helm Chart 相关的 RBAC 规则。
最后的那个. 是要找Chart.yaml ,因为和value.yaml文件在同一个目录下,所以是点,如果不在同一级目录下需要写完整路径
****************************************************************************
页面上,刷新一下如图:(下面有失败的解决方法)
如果验证发现没有,可能是入栈流量没有开启,常见于低版本
解决方法:依次点击 Settings -> Network -> Outbound requests 把里面的两个 Allow .....
都勾上并保存
再重新部署
!!!这里是验证失败后要做的步骤,如果验证成功继续往下走
*************************************************
!!!这里是验证失败后要做的步骤,如果验证成功继续往下走
*************************************************
先删除我们刚刚部署的
helm uninstall -n gitlab-ci gitlab-runner
4,为GitLab Runner 创建持久化构建缓存目录/home/gitlab-runner/ci-build-cache
,并将其注册到 GitLab 中
修改这里:
runners:
# runner configuration, where the multi line strings is evaluated as
# template so you can specify helm values inside of it.
#
# tpl: https://helm.sh/docs/howto/charts_tips_and_tricks/#using-the-tpl-function
# runner configuration: https://docs.gitlab.com/runner/configuration/advanced-configuration.html
config: |
[[runners]]
[runners.kubernetes]
namespace = "{{.Release.Namespace}}"
image = "ubuntu:16.04"
修改后:
****************************************************************************************
定义了两个 Kubernetes Runner,分别使用了不同的配置。
第一个 Runner 指定了运行在哪个命名空间、使用的容器镜像是 Ubuntu 16.04,并且挂载了一个主机路径作为缓存目录。
第二个 Runner 的名称是 "docker",它将主机上的 Docker Socket 挂载到容器内部,并设置为只读模式。
****************************************************************************************
runners:
# runner configuration, where the multi line strings is evaluated as
# template so you can specify helm values inside of it.
#
# tpl: https://helm.sh/docs/howto/charts_tips_and_tricks/#using-the-tpl-function
# runner configuration: https://docs.gitlab.com/runner/configuration/advanced-configuration.html
config: |
[[runners]]
[runners.kubernetes]
namespace = "{{.Release.Namespace}}"
image = "ubuntu:16.04"
[[runners.kubernetes.volumes.host_path]]
name = "cache"
mount_path = "/home/gitlab-runner/ci-build-cache"
host_path = "/opt/cache"
[[runners.kubernetes.volumes.host_path]]
name = "docker"
mount_path = "/var/run/docker.sock"
read_only = true
host_path = "/var/run/docker.sock"
【题目 8】2.2.8 部署 GitLab Agent [1 分]
将 Kubernetes 集群添加到 GitLab 项目中指定名称和命名空间。
将 Kubernetes 集群添加到 demo-2048 项目中,并命名为 kubernetes-agent,项目命名空间选择 gitlab-ci。
完成后提交 Master 节点的用户名、密码和 IP 地址到答题框。(需要用到的软件包:CICD-Runner.tar.gz)
注意:因为制作软件包的时候,把CICD错写成了CIDI,所以本题答案中的CIDI软件包实际为均为CICD
软件包已更正名字,现在名字叫CICD-Runner.tar.gz
可放心上传
用这个包
[root@k8s-master-node1 CIDI-Runner]# ls | grep gitlab-agent
gitlab-agent-1.1.0.tgz
答:
1,解压包
[root@k8s-master-node1 CIDI-Runner]# tar -zxvf gitlab-agent-1.1.0.tgz
gitlab-agent/Chart.yaml
gitlab-agent/values.yaml
gitlab-agent/templates/_helpers.tpl
gitlab-agent/templates/clusterrolebinding-cluster-admin.yaml
gitlab-agent/templates/configmap.yaml
gitlab-agent/templates/deployment.yaml
gitlab-agent/templates/secret.yaml
gitlab-agent/templates/serviceaccount.yaml
gitlab-agent/.gitlab-ci.yml
gitlab-agent/.helmignore
gitlab-agent/CONTRIBUTING.md
gitlab-agent/LICENSE
gitlab-agent/README.md
[root@k8s-master-node1 CIDI-Runner]# cd gitlab-agent/
[root@k8s-master-node1 gitlab-agent]# ls
Chart.yaml CONTRIBUTING.md LICENSE README.md templates values.yaml
2,进入容器检查组件
[root@k8s-master-node1 gitlab-agent]# kubectl get pod -A |grep gitlab-
gitlab-ci gitlab-5d568c5b-767tk 1/1 Running 1 (101m ago) 168m
gitlab-ci gitlab-runner-7c787c5b4-hxfzm 1/1 Running 0 17m
[root@k8s-master-node1 gitlab-agent]# kubectl exec -it -n gitlab-ci gitlab-5d568c5b-767tk /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@gitlab-5d568c5b-767tk:/# gitlab-ctl status
run: alertmanager: (pid 1238) 5962s; run: log: (pid 1113) 5988s
run: gitaly: (pid 1202) 5965s; run: log: (pid 560) 6089s
run: gitlab-exporter: (pid 1212) 5964s; run: log: (pid 954) 6006s
低版本默认不启用 》》run: gitlab-kas: (pid 754) 6078s; run: log: (pid 773) 6075s
run: gitlab-workhorse: (pid 1183) 5965s; run: log: (pid 904) 6017s
run: logrotate: (pid 2634) 2502s; run: log: (pid 510) 6101s
run: nginx: (pid 1195) 5965s; run: log: (pid 945) 6011s
run: postgres-exporter: (pid 1248) 5962s; run: log: (pid 1143) 5982s
run: postgresql: (pid 584) 6084s; run: log: (pid 673) 6081s
run: prometheus: (pid 1223) 5963s; run: log: (pid 1093) 5994s
run: puma: (pid 818) 6032s; run: log: (pid 831) 6029s
run: redis: (pid 518) 6096s; run: log: (pid 527) 6095s
run: redis-exporter: (pid 1214) 5964s; run: log: (pid 987) 6000s
run: sidekiq: (pid 838) 6026s; run: log: (pid 860) 6023s
run: sshd: (pid 40) 6112s; run: log: (pid 39) 6112s
如果是低版本没有启动
root@gitlab-5d568c5b-767tk:/# vi /etc/gitlab/gitlab.rb
进入后 直接 /kas 搜索至这里,修改为true
##! Settings used by the GitLab application
# gitlab_rails['gitlab_kas_enabled'] = true
# gitlab_rails['gitlab_kas_external_url'] = 'ws://gitlab.example.com/-/kubernetes-agent/'
# gitlab_rails['gitlab_kas_internal_url'] = 'grpc://localhost:8153'
# gitlab_rails['gitlab_kas_external_k8s_proxy_url'] = 'https://gitlab.example.com/-/kubernetes-agent/k8s-proxy/'
*******************************
我们此时是启动状态,不再过多追究这个
ctrl + D 返回master节点
******************************
root@gitlab-5d568c5b-767tk:/#
exit
3,开始加入集群
1,进入项目、点击项目旁边的加号,创建一个目录
2,在 Directory name 中直接写入 .gitlab/agents/kubernetes-agent
3,点击Create directory
4,进入创建的目录,点击加号添加一个New file ,命名为config.yaml (这个名字是固定的)拉到下面点击 Commit changes
此时config.yaml是空的
5,找到kubernetes clusters,进入【不通版本不一样,我这里是Operate -> kubernetes clusters
6,点击connecta cluster 在弹出的下拉菜单中找到我们刚刚写的文件夹,点击Register
7,会弹出一个窗口,上面记载了token和 helm语句
复制下来保存,并修改:
helm repo add gitlab https://charts.gitlab.io
helm repo update
helm upgrade --install kubernetes-agent gitlab/gitlab-agent \
--namespace gitlab-agent-kubernetes-agent \
--create-namespace \
--set image.tag=v16.9.2 \
--set config.token=glagent-qYhbYp-oE-Uhk4dNyESxJaVSbDff7_66quVfqRnxaoj17BLAEg \
--set config.kasAddress=ws://gitlab-5d568c5b-767tk/-/kubernetes-agent/
修改后:
helm repo add gitlab https://charts.gitlab.io
helm repo update
helm install gitlab-agent --generate-name \
--namespace gitlab-ci \
--set config.token=glagent-qYhbYp-oE-Uhk4dNyESxJaVSbDff7_66quVfqRnxaoj17BLAEg \
--set config.kasAddress=ws://192.168.100.20:30880/-/kubernetes-agent/
去master节点部署
[root@k8s-master-node1 gitlab-agent]# cd ../ 《《 这一步必须做,切换至agent的上一级
[root@k8s-master-node1 CIDI-Runner]# helm install gitlab-agent --generate-name \
> --namespace gitlab-ci \
> --set config.token=glagent-qYhbYp-oE-Uhk4dNyESxJaVSbDff7_66quVfqRnxaoj17BLAEg \
> --set config.kasAddress=ws://192.168.100.20:30880/-/kubernetes-agent/
NAME: gitlab-agent-1709756343
LAST DEPLOYED: Thu Mar 7 04:19:03 2024
NAMESPACE: gitlab-ci
STATUS: deployed
REVISION: 1
TEST SUITE: None
验证
[root@k8s-master-node1 CIDI-Runner]# kubectl get pod -A | grep gitlab-agent-
gitlab-ci gitlab-agent-1709756343-ff779d7bb-lxrnk 1/1 Running 0 61s
本题完成
【题目 9】2.2.9 构建 CI/CD [2 分]
编写流水线脚本触发自动构建,要求基于 GitLab 项目完成代码的编译、镜像的构建与推送,并自动发布应用到 Kubernetes 集群中。
编写流水线脚本.gitlab-ci.yml 触发自动构建,具体要求如下:
(1) 基于镜像 maven:3.6-jdk-8 构建项目的 drone 分支;
(2) 构建镜像的名称:demo:latest;
(3) 将镜像推送到 Harbor 仓库 demo 项目中;
(4) 将 demo-2048 应用自动发布到Kubernetes 集群 gitlab-ci 命名空间下。
完成后提交 Master 节点的用户名、密码和 IP 地址到答题框。(需要用到的软件包:CICD-Runner.tar.gz)
确保harboar仓库正常,使用$masterIP
访问,账号:admin,密码:Harbor12345
答:
进入demo-2048项目
1.切换至drone分支【默认处于master分支】
点击master就可以看到master和drone分支,点击drone切换
切换过来后,会发现一个template文件夹,里面有【demo-2048.yaml】和【service.yaml】
将其修改为如下:(其实就改了一行)
【demo-2048.yaml】
kind: Deployment
apiVersion: apps/v1
metadata:
name: demo-2048
namespace: gitlab-ci
labels:
app: demo-2048
name: demo-2048
spec:
replicas: 1
selector:
matchLabels:
app: demo-2048
name: demo-2048
template:
metadata:
labels:
app: demo-2048
name: demo-2048
spec:
containers:
- name: demo-2048
image: 192.168.100.20/demo/demo:latest 《《《 把这里改成harbor仓库的地址
ports:
- containerPort: 8080
protocol: TCP
resources:
limits:
cpu: 128m
memory: 256Mi
requests:
cpu: 128m
memory: 128Mi
imagePullPolicy: IfNotPresent
restartPolicy: Always
imagePullSecrets:
- name: harbor
【service.yaml】
kind: Service
apiVersion: v1
metadata:
name: demo-2048
namespace: gitlab-ci
spec:
ports:
- name: web
port: 8080
targetPort: 8080
selector:
app: demo-2048
name: demo-2048
2,修改Dockerfile
修改为如下:
首先新建文件夹,Dockerfiles
在Dockerfiles下新建文件Dockerfile
内容如下:
FROM 192.168.100.20/library/tomcat:8.5.64-jdk8
RUN rm -rf /usr/local/tomcat/webapps/ROOT/
ADD demo-2048 /usr/local/tomcat/webapps/ROOT/
3,去harbor仓库创建项目demo
点击【新建】->
【公开】->
【确定】
4,开始编写流水线
在drone分支下创建.gitlab.ci.yml
基本内容如下:(目前会报错,等后面学多了再改吧)
variables:
# MAVEN_OPTS 指定本地缓存目录【我们之前在 gitlab-Runner 设置的】
MAVEN_OPTS: "-Dmaven.repo.local=/home/gitlab-runner/ci-build-cache/.m2/repository"
stages:
- project_build
- image_build
- deploy
# 项目构建
project_build:
# job 名称
image: maven:3.6-jdk-8
# 关联的阶段名称
stage: project_build
# Gitlab Runner 的tag 可以在流水线上指定哪个runner
tags:
- k8s-runner
script:
- pwd
# 需要拉取依赖,因此需要能上网的条件
- echo 'nameservice 10.10.1.2' >> /etc/resolv.conf
- echo 'nameservice 114.114.114.114' >> /etc/resolv.conf
# 执行构建脚本
- mvn package install -B -DskipTests
- ls target
- jar -xf target/demo-2048.war
- cp -rvf target /home/gitlab-runner/ci-build-cache/
# 任务一 到此结束
image_build:
stage: image_build
# 看自己的docker版本
image: docker:18.09.7
tags:
- k8s-runner
variables:
DOCKER_DRIVER: overlay2
services:
- name: docker:18.09.7-dind
entrypoint: ["dockerd-entrypoint.sh"]
command: ["--insecure-registry","192.168.100.20"]
script:
- echo 'Harbor12345' > password.txt
- cat password.txt | docker login -u admin --password-stdin 192.168.100.20
- mv Dockerfiles/Dockerfile
- ls /home/gitlab-runner/ci-build-cache/
# 最后面那个点的意思是 指定拉取到当前目录
- cp -rvf /home/gitlab-runner/ci-build-cache/target/demo-2048 .
- docker build -t demo:latest .
- docker tag demo:latest 192.168.100.20/demo/demo:latest
- docker push 192.168.100.20/demo/demo:latest
# 部署
deploy:
image: bitnami/kubectl:1.22.1
stage: deploy
tags:
- k8s-runner
script:
- kubectl apply -f template/demo-2048.yaml
- kubectl apply -f template/service.yaml
5,改错过程
点 build -> Pipelines
*************************************************************
第一个错误
fatal: unable to access 'http://gitlab-5d568c5b-w4j2p/root/demo-2048.git/': Could not resolve host: gitlab-5d568c5b-w4j2p
*************************************************************
解决:因为域名解析问题,我们进入gitlab容器里,直接修改为我们的gitlab地址
[root@k8s-master-node1 ~]# kubectl get pod -n gitlab-ci
NAME READY STATUS RESTARTS AGE
gitlab-5d568c5b-w4j2p 1/1 Running 0 90m
gitlab-agent-1709806296-b7d858848-z8js7 1/1 Running 0 83m
gitlab-runner-55888d6999-nxl2z 1/1 Running 0 84m
[root@k8s-master-node1 ~]# kubectl exec -it -n gitlab-ci gitlab-5d568c5b-w4j2p /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@gitlab-5d568c5b-w4j2p:/# find /opt/* -name gitlab.yml
/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
修改这里:
......
production: &base
#
# 1. GitLab app settings
# ==========================
## GitLab settings
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: 192.168.100.20
port: 30880
https: false
......
保存退出,然后重启【gitlab可能会报502,不用担心,等会就好了】
root@gitlab-5d568c5b-w4j2p:/# gitlab-ctl restart
ok: run: alertmanager: (pid 6702) 0s
ok: run: gitaly: (pid 6712) 0s
ok: run: gitlab-exporter: (pid 6731) 0s
ok: run: gitlab-kas: (pid 6745) 0s
ok: run: gitlab-workhorse: (pid 6756) 1s
ok: run: logrotate: (pid 6767) 0s
ok: run: nginx: (pid 6774) 1s
ok: run: postgres-exporter: (pid 6782) 0s
ok: run: postgresql: (pid 6792) 0s
ok: run: prometheus: (pid 6801) 1s
ok: run: puma: (pid 6818) 1s
ok: run: redis: (pid 6823) 0s
ok: run: redis-exporter: (pid 6830) 1s
ok: run: sidekiq: (pid 6842) 0s
ok: run: sshd: (pid 6848) 1s
root@gitlab-5d568c5b-w4j2p:/#
*************************************************************
第二个报错:
[ERROR] Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-resources-plugin:jar:2.6: Could not transfer artifact org.apache.maven.plugins:maven-resources-plugin:pom:2.6 from/to central (https://repo.maven.apache.org/maven2): Transfer failed for https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom: Unknown host repo.maven.apache.org: Temporary failure in name resolution -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException
Cleaning up project directory and file based variables
00:01
主栏显示:ERROR: Job failed: command terminated with exit code 1
*************************************************************
解决:
应该是:
- echo 'nameserver 10.10.1.2' >> /etc/resolv.conf
- echo 'nameserver 114.114.114.114' >> /etc/resolv.conf
我写的是:
- echo 'nameservice 10.10.1.2' >> /etc/resolv.conf
- echo 'nameservice 114.114.114.114' >> /etc/resolv.conf
*************************************************************
第三个报错
[ERROR] Failed to execute goal on project 2048: Could not resolve dependencies for project com.mycompany.app:2048:war:1.0-SNAPSHOT: Could not transfer artifact com.google.code.gson:gson:jar:2.3.1 from/to central (https://repo.maven.apache.org/maven2): Transfer failed for https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.3.1/gson-2.3.1.jar: Connect to repo.maven.apache.org:443 [repo.maven.apache.org/146.75.112.215] failed: Connection refused (Connection refused) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
Cleaning up project directory and file based variables
00:01
ERROR: Job failed: command terminated with exit code 1
*************************************************************
持久化存储也没有部署成功
[root@k8s-master-node1 ~]# ls /opt/cache/
ls: cannot access /opt/cache/: No such file or directory
虽然依然报错,但是到这里是对流水线的理解,应该继续往下走
【题目 10】2.2.10 服务网格:创建 VirtualService [1 分]
将 Bookinfo 应用部署到 default 命名空间下,为 Bookinfo 应用创建一个名为reviews 的 VirtualService,要求来自名为 Jason 的用户的所有流量将被路由到 reviews 服务的 v2 版本。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。(需要用到的软件包:ServiceMesh.tar.gz)
实验环境:运行中的 Kubernetes 集群,Istio 已经被正确安装
这个题要确定在搭建过程中istio部署成功,且启用自动注入 Envoy 代理作为 Sidecar
答:
1,上传镜像
[root@k8s-master-node1 ServiceMesh]# cd images/
[root@k8s-master-node1 images]# ls
A_readme.txt istio_examples-bookinfo-details-v1.tar istio_examples-bookinfo-ratings-v1.tar istio_examples-helloworld-v1.tar kennethreitz_httpbin.tar
busybox.tar istio_examples-bookinfo-details-v2.tar istio_examples-bookinfo-ratings-v2.tar istio_examples-helloworld-v2.tar load_images.sh
curlimages_curl.tar istio_examples-bookinfo-mongodb.tar istio_examples-bookinfo-reviews-v1.tar istio_health.tar redis.tar
fortio.tar istio_examples-bookinfo-mysqldb.tar istio_examples-bookinfo-reviews-v2.tar istio_jwt-server.tar
hiroakis_tornado-websocket-example.tar istio_examples-bookinfo-productpage-v1.tar istio_examples-bookinfo-reviews-v3.tar istio_tcp-echo-server.tar
[root@k8s-master-node1 images]# cat A_readme.txt
第一步:
chmod +x load_images.sh
第二步:
./load_images.sh
[root@k8s-master-node1 images]# chmod +x load_images.sh
[root@k8s-master-node1 images]# ./load_images.sh
Loading image: busybox.tar
......
All images loaded successfully.
2,部署 Bookinfo 应用
[root@k8s-master-node1 images]# cd /root/ServiceMesh/bookinfo/
[root@k8s-master-node1 bookinfo]# kubectl apply -f bookinfo.yaml
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created
3,为 Bookinfo 应用创建 VirtualService
[root@k8s-master-node1 bookinfo]# vi virtual-service.yaml
[root@k8s-master-node1 bookinfo]# cat virtual-service.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
namespace: default
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: Jason
route:
- destination:
host: reviews
subset: v2
在这个 YAML 文件中,定义了一个 VirtualService,它指定了当请求的 header 中包含 end-user: Jason 时,流量将被路由到 reviews 服务的 v2 版本。
应用配置
[root@k8s-master-node1 bookinfo]# kubectl apply -f virtual-service.yaml
virtualservice.networking.istio.io/reviews created
4,验证
[root@k8s-master-node1 bookinfo]# kubectl get virtualservices
NAME GATEWAYS HOSTS AGE
reviews ["reviews"] 29s
[root@k8s-master-node1 bookinfo]# kubectl describe virtualservices reviews
Name: reviews
Namespace: default
Labels: <none>
Annotations: <none>
API Version: networking.istio.io/v1beta1
Kind: VirtualService
Metadata:
Creation Timestamp: 2024-03-08T14:49:24Z
Generation: 1
Managed Fields:
API Version: networking.istio.io/v1alpha3
Fields Type: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
.:
f:kubectl.kubernetes.io/last-applied-configuration:
f:spec:
.:
f:hosts:
f:http:
Manager: kubectl-client-side-apply
Operation: Update
Time: 2024-03-08T14:49:24Z
Resource Version: 7210
UID: 3ceb5a2e-6843-4893-9df7-e2b7a8a50ef6
Spec:
Hosts:
reviews
Http:
Match:
Headers:
End - User:
Exact: Jason
Route:
Destination:
Host: reviews
Subset: v2
Events: <none>
【题目 11】2.2.11 KubeVirt 运维:创建 VMI [1 分]
使用提供的镜像在default 命名空间下创建一台VMI,名称为exam,指定VMI 的内存、CPU、网卡和磁盘等配置,并开启 Sidecar 注入。
将提供的镜像 cirros-0.5.2-x86_64-disk.img 转换为 docker 镜像 cirros:v1.0,然后使用镜像 cirros:v1.0 镜像在 default 命名空间下创建一台 vmi,名称为 vmi-cirros,内存为 1024M。
完成后提交 Master 节点的 IP 地址、用户名和密码到答题框。
1,转换镜像
1.1,编写dockerfile
[root@k8s-master-node1 ~]# ls
anaconda-ks.cfg chinaskills_cloud_paas_v2.0.2.iso cirros-0.5.2-x86_64-disk.img
[root@k8s-master-node1 ~]# vi Dockerfile
[root@k8s-master-node1 ~]# cat Dockerfile
FROM scratch
ADD cirros-0.5.2-x86_64-disk.img /
CMD ["/bin/sh"]
1.2,构建
[root@k8s-master-node1 ~]# docker build -t cirros:v1.0 .
Sending build context to Docker daemon 2.932GB
Step 1/3 : FROM scratch
--->
Step 2/3 : ADD cirros-0.5.2-x86_64-disk.img /
---> e796b38a877f
Step 3/3 : CMD ["/bin/sh"]
---> Running in ac1b3925fc11
Removing intermediate container ac1b3925fc11
---> 3d7c8dac94a2
Successfully built 3d7c8dac94a2
Successfully tagged cirros:v1.0
2,在 default 命名空间下创建 VMI
先检查有无正确安装和配置 KubeVirt
[root@k8s-master-node1 ~]# kubectl get crd | grep kubevirt.io
kubevirts.kubevirt.io 2024-03-08T12:31:57Z
virtualmachineclusterflavors.flavor.kubevirt.io 2024-03-08T12:32:22Z
virtualmachineflavors.flavor.kubevirt.io 2024-03-08T12:32:22Z
virtualmachineinstancemigrations.kubevirt.io 2024-03-08T12:32:22Z
virtualmachineinstancepresets.kubevirt.io 2024-03-08T12:32:22Z
virtualmachineinstancereplicasets.kubevirt.io 2024-03-08T12:32:22Z
virtualmachineinstances.kubevirt.io 2024-03-08T12:32:22Z
virtualmachinerestores.snapshot.kubevirt.io 2024-03-08T12:32:22Z
virtualmachines.kubevirt.io 2024-03-08T12:32:22Z
virtualmachinesnapshotcontents.snapshot.kubevirt.io 2024-03-08T12:32:22Z
virtualmachinesnapshots.snapshot.kubevirt.io 2024-03-08T12:32:22Z
编写yaml
[root@k8s-master-node1 ~]# vi exam.yaml
[root@k8s-master-node1 ~]# cat exam.yaml
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachineInstance
metadata:
name: vmi-cirros
spec:
domain:
devices:
disks:
- name: containerdisk # 确保这里的 name 与下面 volumes 部分中的 name 相匹配
disk:
bus: virtio
resources:
requests:
memory: 1024M
cpu: 1
volumes:
- name: containerdisk # 这个 name 与上面 disks 部分中的 name 相匹配
containerDisk:
image: cirros:v1.0
创建
[root@k8s-master-node1 ~]# kubectl create -f exam.yaml
virtualmachineinstance.kubevirt.io/vmi-cirros created
验证(因为他是在调度阶段(Scheduling),所以显示False)
[root@k8s-master-node1 ~]# kubectl get vmi
NAME AGE PHASE IP NODENAME READY
vmi-cirros 7s Scheduling False
如果一直调度
1,查看 VMI 相关的事件
kubectl describe vmi vim-cirros
2,检查资源是否足够
【题目 12】2.2.12 容器云平台优化:使用审计日志[2 分]
启用审计日志可以帮助集群管理员快速的定位问题。
请启用Kubernetes 集群的审计日志,要求以JSON 格式保存审计日志并输出到/etc/kubernetes/audit- logs/audit.log 文件中,日志最多保留 10 天,单个日志文件不超过 500M。然后编写审计策略文件/etc/kubernetes/audit-policy/policy.yaml,要求在日志中用RequestResponse 级别记录 Pod 变化,并记录 kube-system 中 ConfigMap 变更的请求消息体。
完成后提交 master 节点的用户名、密码和 IP 地址到答题框。
答:
1,编辑kube-apiserver的配置,添加审计日志相关的启动参数
spec:
containers:
- command:
- kube-apiserver
************************添加下面五个********************************************
- --audit-log-path=/etc/kubernetes/audit-logs/audit.log
- --audit-log-maxage=10
- --audit-log-maxbackup=10
- --audit-log-maxsize=500
- --audit-policy-file=/etc/kubernetes/audit-policy/policy.yaml
******************************************************************************
- --advertise-address=192.168.100.20
- --allow-privileged=true
- --authorization-mode=Node,RBAC
- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --enable-admission-plugins=NodeRestriction
参数解释:
--audit-log-path指定审计日志的输出路径。
--audit-log-maxage定义保留旧审计日志文件的最长天数。
--audit-log-maxbackup定义审计日志文件的最大备份数量。
--audit-log-maxsize定义每个审计日志文件的最大大小(以MB为单位)。
--audit-policy-file指定审计策略文件的路径。
2,创建并编辑审计策略文件
虽然没有Policy的资源,但是role的模板比较接近
创建一个文件夹
[root@k8s-master-node1 ~]# mkdir /etc/kubernetes/audit-policy
***************
原始模板:
***************
[root@k8s-master-node1 ~]# kubectl create role dddd --verb=get,list,watch --resource=pods --dry-run=client -o yaml > /etc/kubernetes/audit-policy/policy.yaml
[root@k8s-master-node1 ~]# cat /etc/kubernetes/audit-policy/policy.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: null
name: dddd
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
***************
修改后:
***************
[root@k8s-master-node1 ~]# vi /etc/kubernetes/audit-policy/policy.yaml
[root@k8s-master-node1 ~]# cat /etc/kubernetes/audit-policy/policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: RequestResponse
resources:
- group: ""
resources: ["pods"]
- level: Request
resources:
- group: ""
resources: ["configmaps"]
namespaces: ["kube-system"]
3,验证
3.1,等待kube-apiserver重新启动
修改kube-apiserver配置后,Kubernetes会自动检测到变化并重启apiserver以应用新的配置。
3.2,验证审计日志文件:检查/etc/kubernetes/audit-logs/audit.log文件是否存在,以及是否正在记录审计事件。
ls /etc/kubernetes/audit-logs/
cat /etc/kubernetes/audit-logs/audit.log
3.3,检查Pod和ConfigMap相关的审计记录:可以通过搜索日志文件来验证是否正确记录了Pod变化和kube-system中ConfigMap变更的请求。
grep "pods" /etc/kubernetes/audit-logs/audit.log
grep "configmaps" /etc/kubernetes/audit-logs/audit.log
【题目 13】2.2.13 容器云平台排错:容器引擎报错[1.5 分]
使用赛项提供的 chinaskill-k8s-error01 镜像创建一台云主机(云主机的登录用户名为 root,密码为 Abc@1234),该云主机中存在错误的容器服务,错误现象为无法正常使用 crictl ps -l 命令,请修复容器服务。修复完成后提交该云主机的用户名、密码和 IP 地址到答题框。
无环境
【题目 14】2.2.14 容器云平台排错:DNS 服务报错[1.5 分]
使用赛项提供的 chinaskill-k8s-error01 镜像创建一台云主机(云主机的登录用户名为 root,密码为 Abc@1234),该云主机中存在错误的 DNS 服务,错误现象为coredns 一直处于 CrashLoopBackOff 状态,请修复 CoreDNS 服务,并将并发上限更改为 5000。修复完成后提交该云主机的用户名、密码和 IP 地址到答题框。
无环境
最后
访问 controller的ip/dashboard即可访问到openstack界面
而且配置了免域名,使用admin/000000即可登陆
欢迎大家来一起交流和交换资源