创建CCE集群
svc网络,10.247
pod网络,10.244
节点网络,192.168.66(master和node一样都用66子网)
创建节点
上面创建CCE集群选择了最新版本1.27,CCE从1.27版本开始不再支持docker容器引擎,仅支持containered(注意考试的时候选择docker)
无状态负载:deplopyment控制器
有状态负载:statefulsets 控制器
守护进程集:daemonsets 特殊控制器(每个节点有且只有一个pod)
普通任务:job 任务
定时任务:cronjob 定时任务
容器组:这个界面看到目前所有的pod
容器测试
CCE集群搭建好之后,创建一个deployment控制器,镜像使用nginx,并让这个nginx pod可以对外提供访问。
创建SVC服务时,会问这个NodePort是集群级别,还是节点级别。
默认是集群级别:未来会在集群所有的节点上开启一个30000以上的端口。
节点级别:未来只会在pod所在的节点上开启一个30000以上的端口。
为某个节点绑定EIP,最后通过EIP加端口号进入到容器里面。
Ingress
CCE集群中无法单独创建pod,那么就创建3个deployment,每个deployment下面有1个pod。
1.创建3个deployment无状态工作负载,每个deployment管理1个副本。
注意服务,选择NodePort
三个deployment都一样。
2.手工更改三个deployment对应的pod网站内容
分别进入三个pod,在/usr/share/nginx/html/目录下分别创建 aaa bbb ccc 三个目录,修改index.html内容,分别为111,222,333
登录第1个pod
cd /usr/share/nginx/html/aaa
echo 111 > index.html
登录第2个pod
cd /usr/share/nginx/html/bbb
echo 222 > index.html
登录第3个pod
cd /usr/share/nginx/html/ccc
echo 333 > index.html
3.创建路由
其实就是配置转发策略,根据不同的访问内容,转发到不同的后端pod上。
4.添加内网域名
添加解析记录(k8s是在/etc/hosts添加解析)
注意:www.memeda.com是内网域名是私有域名不是合法域名,解析到ELB的私网IP地址上。如果未来这个域名是注册的合法域名,那么需要在公网DNS里面解析到ELB的公网IP地址上。
5.申请一台windows,测试访问(www.memeda.com是内网域名不能本地浏览器测试访问)
如何上传私有镜像
CCE集群里面的私有镜像,加载的是SWR(容器镜像服务)里面的镜像。
上传一个centos镜像,到SWR服务里面,给CCE集群去使用。
1、下载镜像[root@master ~]# docker pull centos
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 2 years ago 231MB
2、登录华为云镜像仓库
[root@master ~]# docker login -u cn-north-4@GBWGPZ5OZTPR4SJRGDUX -p 35b95d4473da8d2b5c33e57ee388b4cd6eeda4d34fb05c87514a55713fbd5e2b swr.cn-north-4.myhuaweicloud.com
3、更改镜像地址(镜像名称)
[root@master ~]# docker tag centos:latest swr.cn-north-4.myhuaweicloud.com/cloudcs/centos:1021
4、推送镜像
[root@master ~]# docker push swr.cn-north-4.myhuaweicloud.com/cloudcs/centos:1021
未来在cce里面就可以选择到了
私有云里面,可能无法连通外网。如何上传私有镜像?
可以先把镜像导出来[root@master ~]# docker save centos:latest -o centos.tar
之后把tar文件,拿到能和私有云环境互通的桌面上,之后通过私有云里面的SWR服务,页面上传,加载这个tar包,把镜像传上去。
持久卷
存储卷声明:PVC
存储卷:PV
存储类:StorageClass
无状态工作负载:deployment控制器,一般指前端的应用容器nginx,wordpress等,不做任何数据持久化的。
有状态工作负载:statefulset控制器,一般指后端应用容器,mysql/redis等数据库,需要进行数据持久化的。
1.申请SFS Turbo文件系统存储(默认最小500G起步)
2.CCE里面创建PV存储卷(SFS文件存储)
3.CCE里面创建PVC存储卷声明(选择PV)
4.CCE里面创建mysql,有状态的工作负载(2个副本做主备部署选择有状态的工作负载,一个副本部署可选择无状态的工作负载),环境变量 MYSQL_ROOT_PASSWORD=redhat,挂载存储卷(将外部的存储卷挂载到容器哪个目录下)。
5.添加实例间服务,端口都是3306
最终是要将mysql容器里面的数据,保存到底层存储,将外部的存储挂载到容器哪个目录下。
Mysql服务:/var/lib/mysql 未来数据写入这个目录,其实就是保存到了底层的pvc上(存储上)
Nginx服务:/usr/share/nginx/html/
apache服务:/var/www/html/
6.存储侧添加一个子路径,子路径是干什么的?
这个192.168.66.51:/ 意味着,把所有的空间全部给到了MySQL用,可以让这个存储像Linux在根/目录下多分几个分区。
比如:
192.168.66.51:/aaa 分区给mysql用
192.168.66.51:/bbb 分区给mysql2用
192.168.66.51:/ccc 分区给另外一个容器用。
也就是所有的容器使用的空间,都是192.168.66.51:/ 下面的空间。只是通过不同的目录(子路径)进行了区分。
默认情况下,每个pod里面是没有vim /vi等基本命令,因为不需要,就算安装了基本命令,后面升级操作需要重新手工安装,涉及到的所有的配置文件、参数文件都是要通过configmap配置项来进行配置的。另外,比如mysql创建的时候需要输入参数和参数值和密码等,这些是通过secret密钥来进行配置的。
configmap配置项(不加密)和secret密钥(加密)
secret密钥
使用secret密钥搭建一个wordpress博客
两个镜像:mysql / wordpress
Mysql参数:MYSQL_ROOT_PASSWORD / MYSQL_DATABASE
wordpress参数:WORDPRESS_DB_HOST/WORDPRESS_DB_USER/WORDPRESS_DB_PASSWORD/WORDPRESS_DB_NAME
创建Mysql
Mysql容器就创建好了。注意:这里mysql会生成一个无头服务的内部域名地址。
更新wordpress密钥
创建wordpress
注意这里面的svc
访问公网IP(绑定给集群内的某个node)带上端口(图片中节点端口:自动生成30000以上端口)去访问,流量就会走到SVC上,svc对外暴露的端口就是服务端口80,节点端口会映射给服务端口,最终svc会把流量交给后端的pod,服务端口80会映射到容器端口80。
测试,给某一台ECS绑定EIP,之后查看wordpress对外暴露的端口,EIP+端口进行访问。
创建两个无状态工作负载,headless无头服务只有有状态工作负载才有。
configmap配置项
效果:nginx镜像网页显示为 Cloud Computing HCIE
现在因为业务需要,要把nginx版本升级到最新的1.25版本
这时候推送最新的镜像到SWR容器镜像服务里面,然后针对deployment进行升级操作。
现在使用配置项configmap来实现这个功能。
这里挂载的必须是路径,不能是文件,否则报错。
把配置项中index.html文件挂载到容器的/usr/share/nginx/html/这个目录下。
将配置项挂载到容器目录,配置项有多个键值对,一个键值对就是一个文件,未来这个容器目录下就有多个文件。
升级镜像版本