🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质: CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥🎈支持我:可点赞👍、可收藏⭐️、可留言📝
📜容器服务介绍
与红帽OpenStack平台的早期版本不同,后期版本使用容器来运行服务。容器化的体系结构确保每个OpenStack服务与主机隔离。主要的OpenStack服务都使用容器。容器是使用从Red Hat客户门户中提取的镜像构建的。容器服务管理由docker命令处理,替换systemd命令。底层Linux系统继续使用systemd命令。容器通过拉取新镜像并替换现有镜像来更新,并且使用Kolla工具集构建这些容器。
📜容器镜像和注册
Red Hat OpenStack Platform 12是第一个实现了容器化控制平面的发行版。每个服务容器运行一个独立的堆栈,不依赖于其他容器。运行容器化OpenStack服务的一些主要好处如下所述:
使用容器化控制平面服务的好处
📑稳定
因为每个服务容器都是隔离的,不依赖于其他容器,所以它减少了单个服务失败时的级联失败。
📑安全
容器镜像在设计上是不可变的。通过从原始镜像重新部署,可以很容易地重新构建损坏或修改的容器。
📑生命周期管理
管理这些服务容器的生命周期很容易,因为它们是独立的单元。因为可以独立地对每个服务容器进行升级和回滚,所以您不必担心在升级或回滚时破坏依赖关系。
📑服务位置
管理员可以根据需要在主机之间移动服务容器。
📑可伸缩性
每个服务容器都可以快速而轻松地伸缩。目前,由于对主机文件系统和网络的潜在依赖关系,只能在单个节点上放置一个服务容器实例。
推荐使用在undercloud上确认的本地仓库方法。在安装undercloud时,镜像仓库在端口8787上被确认。该部署同步来自远程仓库的镜像,并将它们推到docker-distribution服务。
(undercloud) [stack@director ~]$ systemctl status docker-distribution.service ● docker-distribution.service - v2 Registry server for Docker Loaded: loaded (/usr/lib/systemd/system/docker-distribution.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2020-10-12 16:12:56 UTC; 1 day 10h ago Main PID: 1418 (registry) Tasks: 7 CGroup: /system.slice/docker-distribution.service └─1418 /usr/bin/registry serve /etc/docker-distribution/registry/config.yml Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
AI 代码解读
undercloud 仓库中填充了overcloud中包含的每个服务所需的镜像。在overcloud部署期间,将从这个本地仓库中心提取镜像。使用本地仓库中心可以加速部署并缓解网络拥塞,但是提供了有限的生命周期管理。在没有人工干预的情况下,镜像在部署的overcloud的生命周期中保持不变。
📜填充本地容器仓库
默认情况下,使用/usr/share/openstack-tripleo-common-containers/containers-imaqes/overcloud_ containers.yaml文件中定义的远程仓库提取容器镜像。要使用undercloud作为本地容器仓库,需要生成一个模板文件,其中包含overcloud部署所需的所有容器镜像,从而从远程仓库提取镜像。使用以下命令生成模板文件:
(undercloud) [stack@director ~]$ openstack overcloud container image prepare \ -e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml \ --namespace=registry.access.redhat.com/rhosp13 \ --prefix=openstack- \ --tag-from-label {version}-{release} \ --output-images-file /home/stack/local_registry_images.yaml
AI 代码解读
local_registry_images.yaml文件上传容器镜像到本地容器仓库。使用openstack overcloud image upload命令来上传容器镜像。使用以下命令列出上传到本地仓库的容器镜像:
(undercloud) [stack@director -]$ docker images --format="{{.Repository}}" 172.25.249.200:8787/rhosp13/openstack-neutron-server-ovn 172.25.249.200:8787/rhosp13/openstack-neutron-metadata-agent-ovn 172.25.249.200:8787/rhosp13/openstack-rabbitmq 172.25.249.200:8787/rhosp13/openstack-cinder-api 172.25.249.200:8787/rhosp13/openstack-ceilometer-central …………
AI 代码解读
📜容器的命令
所有容器命令都需要root权限。(因为是用root权限运行)
使用docker version命令查找正在使用的docker版本。同时显示客户端和服务器版本
docker version (undercloud) [stack@director ~]$ docker version Client: Version: 1.13.1 API version: 1.26 Package version: docker-1.13.1-68.gitdded712.el7.x86_64 Go version: go1.9.2 Git commit: dded712/1.13.1 Built: Tue Jun 12 18:30:09 2018 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Package version: docker-1.13.1-68.gitdded712.el7.x86_64 Go version: go1.9.2 Git commit: dded712/1.13.1 Built: Tue Jun 12 18:30:09 2018 OS/Arch: linux/amd64 Experimental: false
AI 代码解读
📑docker ps
docker ps命令列出了所有的容器。注意,容器可能同时存在于控制节点和计算节点上。您可以使用grep命令来优化搜索,也可以使用--format选项和docker ps命令来生成可读性更好的输出。选项-a列出了所有容器。默认情况下,只列出正在运行的容器。
[heat-admin@controller0 ~]$ docker ps Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/json: dial unix /var/run/docker.sock: connect: permission denied [heat-admin@controller0 ~]$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93d806a63af1 172.25.249.200:8787/rhosp13/openstack-manila-share:pcmklatest "/bin/bash /usr/lo..." 35 hours ago Up 35 hours openstack-manila-share-docker-0 bb5228ae1d0a 172.25.249.200:8787/rhosp13/openstack-cinder-volume:pcmklatest "/bin/bash /usr/lo..." 35 hours ago Up 35 hours openstack-cinder-volume-docker-0 9314ea858667 172.25.249.200:8787/rhosp13/openstack-ovn-northd:latest "/bin/bash /usr/lo..." 35 hours ago Up 35 hours ovn-dbs-bundle-docker-0 b5b9a671dbbd 172.25.249.200:8787/rhosp13/openstack-haproxy:pcmklatest "/bin/bash /usr/lo..." 35 hours ago Up 35 hours haproxy-bundle-docker-0 28bfeb90f1b5 172.25.249.200:8787/rhosp13/openstack-redis:pcmklatest "/bin/bash /usr/lo..." 35 hours ago Up 35 hours redis-bundle-docker-0 9b470324ad68 172.25.249.200:8787/rhosp13/openstack-mariadb:pcmklatest "/bin/bash /usr/lo..." 35 hours ago Up 35 hours galera-bundle-docker-0 2c297a0596f3 172.25.249.200:8787/rhceph/rhceph-3-rhel7:latest "/entrypoint.sh" 35 hours ago Up 35 hours ceph-mgr-controller0 40fd01c5c03e 172.25.249.200:8787/rhceph/rhceph-3-rhel7:latest "/entrypoint.sh" 35 hours ago Up 35 hours ceph-mds-controller0 66a57bd58a9b 172.25.249.200:8787/rhceph/rhceph-3-rhel7:latest "/entrypoint.sh" 35 hours ago Up 35 hours ceph-mon-controller0 ………… [heat-admin@controller0 ~]$ sudo docker ps | grep nova 5bfcf5bbf99b 172.25.249.200:8787/rhosp13/openstack-nova-api:latest "kolla_start" 24 months ago Up 35 hours nova_metadata 457d4ace92a0 172.25.249.200:8787/rhosp13/openstack-nova-api:latest "kolla_start" 24 months ago Up 35 hours (unhealthy) nova_api 3a98c43a04f7 172.25.249.200:8787/rhosp13/openstack-nova-scheduler:latest "kolla_start" 24 months ago Up 35 hours (unhealthy) nova_scheduler 35f522ad5783 172.25.249.200:8787/rhosp13/openstack-nova-novncproxy:latest "kolla_start" 24 months ago Up 35 hours (unhealthy) nova_vnc_proxy eb5d4133cd70 172.25.249.200:8787/rhosp13/openstack-nova-consoleauth:latest "kolla_start" 24 months ago Up 35 hours (unhealthy) nova_consoleauth a39f81aa4a8b 172.25.249.200:8787/rhosp13/openstack-nova-api:latest "kolla_start" 24 months ago Up 35 hours nova_api_cron 8ffb511c9318 172.25.249.200:8787/rhosp13/openstack-nova-conductor:latest "kolla_start" 24 months ago Up 35 hours (unhealthy) nova_conductor 53d487974cc1 172.25.249.200:8787/rhosp13/openstack-nova-placement-api:latest "kolla_start" 24 months ago Up 35 hours [heat-admin@controller0 ~]$ sudo docker ps -a --format="{{.Names}}\t{{.Status}}" | grep nova nova_api_discover_hosts Exited (0) 24 months ago nova_metadata Up 35 hours nova_api Up 35 hours (unhealthy) nova_scheduler Up 35 hours (unhealthy) nova_vnc_proxy Up 35 hours (unhealthy) nova_consoleauth Up 35 hours (unhealthy) nova_api_cron Up 35 hours nova_conductor Up 35 hours (unhealthy) nova_db_sync Exited (0) 24 months ago nova_api_ensure_default_cell Exited (0) 24 months ago nova_api_map_cell0 Exited (0) 24 months ago nova_placement Up 35 hours nova_api_db_sync Exited (0) 24 months ago nova_placement_init_log Exited (0) 24 months ago nova_metadata_init_log Exited (0) 24 months ago nova_api_init_logs Exited (0) 24 months ago
AI 代码解读
注意:当特定服务启动、执行其必要的任务,然后退出时,会出现退出Exited状态。它不会推断该服务存在任何类型的问题。状态为Exited的容器留在内存中,以便可以访问它们的日志文件和配置。
--filter选项用于减少docker ps命令的输出。有许多参数可以与筛选器选项一起使用。示例参数包括名称、运行状况和状态。为了更好地管理输出,可以组合使用--filter和--format选项。
[heat-admin@controller0 ~]$ sudo docker ps --filter status=running --format="{{.ID}}\t{{.Names}}\t{{.Status}}" 93d806a63af1 openstack-manila-share-docker-0 Up 35 hours bb5228ae1d0a openstack-cinder-volume-docker-0 Up 35 hours 9314ea858667 ovn-dbs-bundle-docker-0 Up 35 hours b5b9a671dbbd haproxy-bundle-docker-0 Up 35 hours 28bfeb90f1b5 redis-bundle-docker-0 Up 35 hours 9b470324ad68 galera-bundle-docker-0 Up 35 hours 2c297a0596f3 ceph-mgr-controller0 Up 36 hours 40fd01c5c03e ceph-mds-controller0 Up 36 hours 66a57bd58a9b ceph-mon-controller0 Up 36 hours ……… [heat-admin@controller0 ~]$ sudo docker ps --filter status=running --format="{{.ID}}\t{{.Names}}\t{{.Status}}" | grep horizon 0f4f1f8f772a horizon Up 36 hours
AI 代码解读
📑docker stats
docker stats命令显示特定容器的资源使用情况的实时统计数据。可以将stats命令与Linux平台上的top命令进行比较。您可以将一个空格分隔的容器列表传递给docker stats命令,以查询多个容器。可以查询状态为已停止和已退出的容器,但不会返回数据。
[root@demo -]# docker stats nova_api keystone
AI 代码解读
📑docker images
使用docker images命令来显示镜像仓库名称。所有可用镜像的大小、tags、镜像id和创建日期。添加image-name选项,以只显示来自指定的仓库。还可以使用--format选项定制输出。latest 标记会自动附加到每个仓库镜像的最高版本。
[heat-admin@controller0 ~]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE 172.25.249.200:8787/rhosp13/openstack-cinder-api latest f7d7cbcfa600 2 years ago 991 MB 172.25.249.200:8787/rhosp13/openstack-cinder-volume latest e7a690608f11 2 years ago 1.02 GB 172.25.249.200:8787/rhosp13/openstack-cinder-volume pcmklatest e7a690608f11 2 years ago 1.02 GB 172.25.249.200:8787/rhosp13/openstack-cinder-scheduler latest 6d0b487a321a 2 years ago 908 MB 172.25.249.200:8787/rhosp13/openstack-glance-api latest bc037202b6b2 2 years ago 887 MB [heat-admin@controller0 ~]$ sudo docker images 172.25.249.200:8787/rhosp13/openstack-cinder-api REPOSITORY TAG IMAGE ID CREATED SIZE 172.25.249.200:8787/rhosp13/openstack-cinder-api latest f7d7cbcfa600 2 years ago 991 MB [heat-admin@controller0 ~]$ sudo docker images 172.25.249.200:8787/rhosp13/openstack-cinder-api --format="{{.Repository}}\t{{.Tag}}" 172.25.249.200:8787/rhosp13/openstack-cinder-api latest
AI 代码解读
📑docker inspect
docker inspect命令检查容器的配置。结果以JSON格式呈现。可以从JSON输出中提取任何字段。使用jq命令过滤JSON输出。
[root@controller0 ~]# docker inspect horizon
[
{
"Id": "0f4f1f8f772aac108cb094f33d18d370947a1a25e271c23f82258da7cb7ccf30",
"Created": "2018-10-23T15:06:03.128216544Z",
"Path": "kolla_start",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 5075,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-10-12T16:20:38.841251452Z",
"FinishedAt": "2020-10-12T16:19:27.369012909Z"
},
…………
[root@controller0 ~]# docker inspect horizon | jq .[0].Mounts
[
{
"Propagation": "rprivate",
"RW": false,
"Mode": "ro",
"Destination": "/etc/ssh/ssh_known_hosts",
"Source": "/etc/ssh/ssh_known_hosts",
"Type": "bind"
},
…………
# 要显示hosts path实例参数的值,请使用--format选项。
[root@controller0 ~]# docker inspect --format="{{.HostsPath}}" horizon
/etc/hosts
AI 代码解读
📑docker logs
docker logs命令显示STDOUT的启动输出。此命令仅适用于由日志记录驱动程序启动的容器。docker 1ogs命令支持一系列选项。--since选项显示在给定日期之后生成的容器日志。--tail选项显示日志文件末尾指定的行数。
[root@controller0 ~]# docker logs horizon [Mon Oct 12 16:23:49.569171 2020] [so:warn] [pid 1] AH01574: module systemd_module is already loaded, skipping [Mon Oct 12 16:23:49.570745 2020] [so:warn] [pid 1] AH01574: module cgi_module is already loaded, skipping [Mon Oct 12 16:23:49.571331 2020] [so:warn] [pid 1] AH01574: module wsgi_module is already loaded, skipping [Mon Oct 12 16:23:49.589953 2020] [alias:warn] [pid 1] AH00671: The Alias directive in /etc/httpd/conf.d/autoindex.conf at line 21 will probably never match because it overlaps an earlier Alias.
AI 代码解读
注意:当容器被停止时,它们仍然留在内存中。此行为允许管理员在容器停止运行后对容器日志进行故障排除。
📑docker exec
要访问容器,使用docker exec命令启动/bin/bash。这提供了一个bash提示符,可以从该提示符直接在容器本身中运行命令。容器必须已经启动并运行,才能在其中执行进一步的命令。暂停或停止的容器将返回一个错误。该命令在容器的默认目录中执行。或者,您可以在容器中以非交互方式运行命令。
docker exec命令需要-i或交互式选项。--detach选项在后台运行该命令。要设置环境变量,请使用--env选项。一起运行一串命令,使用shell构造。例如docker-compose exec sh -c ' && && ’
[root@controller0 ~]# docker exec -it keystone /bin/bash ()[root@controller0 /]# ls bin dev home lib64 mnt opt root run_command srv tmp var boot etc lib media openstack proc run sbin sys usr [root@controller0 ~]# docker exec -t keystone /openstack/healthcheck {"versions": {"values": [{"status": "stable", "updated": "2018-02-28T00:00:00Z", "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v3+json"}], "id": "v3.10", "links": [{"href": "http://controller0.internalapi.overcloud.example.com:5000/v3/", "rel": "self"}]}, {"status": "deprecated", "updated": "2016-08-04T00:00:00Z", "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v2.0+json"}], "id": "v2.0", "links": [{"href": "http://controller0.internalapi.overcloud.example.com:5000/v2.0/", "rel": "self"}, {"href": "https://docs.openstack.org/", "type": "text/html", "rel": "describedby"}]}]}} 300 172.24.1.1:5000 0.021 seconds
AI 代码解读
使用docker命令stop、start和restart来控制容器的运行。使用docker ps命令来验证容器的状态。
[root@controller0 ~]# docker stop horizon [root@controller0 ~]# docker ps -a --format="{{.Names}}\t{{.Status}}" | grep horizon horizon Up About an hour horizon_fix_perms Exited (0) 24 months ago
AI 代码解读
📜日志文件和配置文件
📑日志文件位置
以前版本的Red Hat OpenStack将log文件存储在/var/log/service-name中,例如/var/log/cinder。在容器化架构中,日志文件存储在/var/log/containers/service-name中,例如/var/log/containers/ cinder。
注意:在容器化架构中,/var/log/service日志目录仍然存在,但是除了名为readme.txt的文件外,这些目录都是空的。
📑配置文件位置
与日志文件一样,配置文件也改变了位置。以前它们存储在/ etc/service中。在容器化体系结构中,配置存储在 /var/lib/config-data/puppet-generated/service-name目录中。
注意:/etc/service目录仍然存在,并且包含该服务的配置文件。但是,重要的是要知道,在这些配置文件中所做的任何更改都不会改变docker容器的配置。所有容器配置更改必须使用/ var/lib/config-data/puppet-generated/service/etc/service中的配置文件进行。
📜课本练习
[student@workstation ~]$ lab architecture-containerization setup Setting up workstation for lab exercise work: . Verifying node reachable: director.......................... SUCCESS . Verifying node reachable: controller0....................... SUCCESS
AI 代码解读
章节内容已有相关演示,就不再进行操作。
💡总结
RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。
以上就是【金鱼哥】对 第一章 红帽OpenStack平台架构--介绍容器服务 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。
💾 红帽认证专栏系列:
RHCSA专栏: 戏说 RHCSA 认证
RHCE专栏: 戏说 RHCE 认证
此文章收录在RHCA专栏: RHCA 回忆录
如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。
如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!