使用pythons kubernetes库从kubernetes获取pod的“容器启动”事件

问题描述 投票:0回答:1

我有一个带有postStart挂钩的容器的部署,如下所示

      containers:
      - name: openvas
        image: my-image:test
        lifecycle:
            postStart:
              exec:
                 command:
                 - /usr/local/tools/is_service_ready.sh

我正在使用python的kubernetes库观看pod的事件。当pod被部署时,容器出现并且postStart脚本将被执行,直到postStart脚本成功退出。我想在CONTAINER出现时使用pythons kubernetes库从kubernetes获取活动。我试着观看这个事件,只有当postStart完成并且POD出现时,我才能获得状态为'containersReady'的事件,可以在下面看到。

 'status': {'conditions': [{'last_probe_time': None,
                            'last_transition_time': datetime.datetime(2019, 4, 18, 16, 25, 3, tzinfo=tzlocal()),
                            'message': None,
                            'reason': None,
                            'status': 'True',
                            'type': 'Initialized'},
                           {'last_probe_time': None,
                            'last_transition_time': datetime.datetime(2019, 4, 18, 16, 26, 51, tzinfo=tzlocal()),
                            'message': None,
                            'reason': None,
                            'status': 'True',
                            'type': 'Ready'},
                           {'last_probe_time': None,
                            'last_transition_time': None,
                            'message': None,
                            'reason': None,
                            'status': 'True',
                            'type': 'ContainersReady'},
                           {'last_probe_time': None,
                            'last_transition_time': datetime.datetime(2019, 4, 18, 16, 25, 3, tzinfo=tzlocal()),
                            'message': None,
                            'reason': None,
                            'status': 'True',
                            'type': 'PodScheduled'}],
                       'container_statuses': [{'container_id': 'docker://1c39e13dc777a34c38d4194edc23c3668697223746b60276acffe3d62f9f0c44',
                                    'image': 'my-image:test',
                                    'image_id': 'docker://sha256:9903437699d871c1f3af7958a7294fe419ed7b1076cdb8e839687e67501b301b',
                                    'last_state': {'running': None,
                                                   'terminated': None,
                                                   'waiting': None},
                                    'name': 'samplename',
                                    'ready': True,
                                    'restart_count': 0,
                                    'state': {'running': {'started_at': datetime.datetime(2019, 4, 18, 16, 25, 14, tzinfo=tzlocal())},
                                              'terminated': None,
                                              'waiting': None}}],


在此之前,我将状态'podScheduled'视为'True'

 'status': {'conditions': [{'last_probe_time': None,
                            'last_transition_time': datetime.datetime(2019, 4, 18, 16, 25, 3, tzinfo=tzlocal()),
                            'message': None,
                            'reason': None,
                            'status': 'True',
                            'type': 'Initialized'},
                           {'last_probe_time': None,
                            'last_transition_time': datetime.datetime(2019, 4, 18, 16, 25, 3, tzinfo=tzlocal()),
                            'message': 'containers with unready status: [openvas]',
                            'reason': 'ContainersNotReady',
                            'status': 'False',
                            'type': 'Ready'},
                           {'last_probe_time': None,
                            'last_transition_time': None,
                            'message': 'containers with unready status: [openvas]',
                            'reason': 'ContainersNotReady',
                            'status': 'False',
                            'type': 'ContainersReady'},
                           {'last_probe_time': None,
                            'last_transition_time': datetime.datetime(2019, 4, 18, 16, 25, 3, tzinfo=tzlocal()),
                            'message': None,
                            'reason': None,
                            'status': 'True',
                            'type': 'PodScheduled'}],
            'container_statuses': [{'container_id': None,
                                    'image': 'ns-openvas:test',
                                    'image_id': '',
                                    'last_state': {'running': None,
                                                   'terminated': None,
                                                   'waiting': None},
                                    'name': 'openvas',
                                    'ready': False,
                                    'restart_count': 0,
                                    'state': {'running': None,
                                              'terminated': None,
                                              'waiting': {'message': None,
                                                          'reason': 'ContainerCreating'}}}],

当CONTAINER出现时,我可以尝试任何事情。

python-2.7 kubernetes
1个回答
0
投票

显然,使用当前的方法,你永远不会让它工作,因为,如描述here

postStart处理程序相对于Container的代码异步运行,但Kubernetes对容器的管理会阻塞,直到postStart处理程序完成。在postStart处理程序完成之前,Container的状态不会设置为RUNNING。

也许你应该用is_service_ready.sh脚本创建另一个pod,它将观察主pod的事件。

© www.soinside.com 2019 - 2024. All rights reserved.