python (k8s) 3. pod
1. pod_namespace_watch.py# -*- coding: utf8 -*-from kubernetes import client, config, watchdef main():config.load_kube_config()v1 = client.CoreV1Api()count = 10w = watch.W...
·
1. pod_namespace_watch.py
# -*- coding: utf8 -*-
from kubernetes import client, config, watch
def main():
config.load_kube_config()
v1 = client.CoreV1Api()
count = 10
w = watch.Watch()
for event in w.stream(v1.list_namespace, timeout_seconds=10):
print("Event: %s %s" % (event['type'], event['object'].metadata.name))
count -= 1
if not count:
w.stop()
print("Finished namespace stream.")
for event in w.stream(v1.list_pod_for_all_namespaces, timeout_seconds=10):
print("Event: %s %s %s" %(
event['type'],
event['object'].kind,
event['object'].metadata.name
))
count -= 1
if not count:
w.stop()
print("finished pod stream")
if __name__ == '__main__':
main()
2. pod_exec.py
# -*- coding: utf8 -*-
"""
使用Busybox Container演示exec的功能
"""
import time
from kubernetes import config
from kubernetes.client import Configuration
from kubernetes.client.apis import core_v1_api # github官网为 kubernetes.client.api import ...
from kubernetes.client.rest import ApiException
from kubernetes.stream import stream
def exec_commands(api_instance):
# 以下为 exec_commands()
name = 'busybox-test'
resp = None
try:
resp = api_instance.read_namespaced_pod(name=name, namespace='default')
except ApiException as e:
if e.status != 404:
print("Unknown error: %s" % e)
exit(1)
if not resp:
print("Pod %s does not exists. Creating it..." % name)
pod_manifest = {
'apiVersion': 'v1',
'kind': 'Pod',
'metadata': {
'name': name
},
'spec': {
'containers': [{
'image': 'busybox',
'name': 'sleep',
'args': [
"/bin/bash",
"-c",
"while true; do date; sleep 5; done"
]
}]
}
}
resp = api_instance.create_namespaced_pod(body=pod_manifest, namespace='default')
while True:
resp = api_instance.read_namespaced_pod(name=name, namespace='default')
if resp.status.phase != 'Pending':
break
time.sleep(1)
print("Done.")
# 调用 exec 等待返回
exec_command = [
"/bin/bash",
"-c",
"echo This message goes to stderr; echo This message goes to stdout"
]
resp = stream(api_instance.connect_get_namespaced_pod_exec, name, command=exec_command, stderr=True, stdin=False,
stdout=True, tty=False)
print("Response: " + resp)
# 交互式调用 exec
exec_command = ["/bin/bash"]
resp = stream(api_instance.connect_get_namespaced_pod_exec,
name,
'default',
command=exec_command,
stderr=True, stdin=True,
stdout=True, tty=False,
_preload_content=False)
commands = [
"echo This message goes to stdout",
"echo \"This message goes to stderr\" >&2",
]
while resp.is_open():
resp.update(timeout=1)
if resp.peek_stdout():
print("STDOUT: %s" % resp.read_stdout())
if resp.peek_stderr():
print("STDERR: %s" % resp.read_stderr())
if commands:
c = commands.pop(0)
print("Runing command... %s\n" % c)
resp.write_stdin(c + '\n')
else:
break
resp.write_stdin('date\n')
sdate = resp.readline_stdout(timeout=3)
print("Server date command returns: %s" % sdate)
resp.write_stdin("whoami\n")
user = resp.readline_stdout(timeout=3)
print("Server user is: %s" % user)
resp.close()
def main():
config.load_kube_config()
c = Configuration()
c.assert_hostname = False
Configuration.set_default(c)
core_v1 = core_v1_api.CoreV1Api()
exec_commands(core_v1)
if __name__ == '__main__':
main()
更多推荐
已为社区贡献12条内容
所有评论(0)