前置条件
-
安装python(pycharm)
-
安装kubernetes包
python -m pip install --upgrade pip
pip install ignore-installed kubernetes
-
将master节点上的/root/.kube/config下载到本地
-
部署pod的yaml文件
apiVersion: v1
kind: Pod
metadata:
name: po-nginx
namespace: default
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
- 部署deploy的yam文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: dep-nginx
spec:
replicas: 2
selector:
matchLabels:
app: myapp
version: v1
template:
metadata:
labels:
app: myapp
version: v1
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
查看资源
import kubernetes
from kubernetes import client, config
config.kube_config.load_kube_config(config_file='E:\work\KEEP-WORKING\CS-Learning\python\python-k8s\config')
# 获取CoreV1API版本对象,是client.CoreV1Api()的实例,可以操作k8s中的资源对象。
v1 = client.CoreV1Api()
# 列出k8s中的所有名称空间
print("All ns:\n")
for namespace in v1.list_namespace().items:
print(namespace.metadata.name)
# 列举所有名称空间下的所有service
print("all svc\n")
services = v1.list_service_for_all_namespaces()
for svc in services.items:
print('%s \t%s \t%s \t%s \n' % (svc.metadata.namespace, svc.metadata.name, svc.spec.cluster_ip, svc.spec.ports))
# 列举所有名称空间下的pod资源
print("all pods:\n")
pods = v1.list_pod_for_all_namespaces()
for i in pods.items:
print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))
# client.AppsV1Api对象可以操作跟k8s中控制器相关资源对象,下面演示的是列举所有名称空间的deployment
v1_deploy = client.AppsV1Api()
deploys = v1_deploy.list_deployment_for_all_namespaces()
print("print deploy\n")
for i in deploys.items:
print("%s\t%s\t%s" % (i.metadata.name, i.metadata.namespace, i.spec.replicas))
# 读取pod指定的属性
print("read pod:\n")
resp = v1.read_namespaced_pod(namespace='default', name='po-nginx')
print('read pod')
# print(resp)
print(resp.spec.containers[0])
print(resp.spec.containers[0].image)
创建deploy
from os import path
import yaml
from kubernetes import client,config
def main():
#读入集群信息
config.load_kube_config(config_file='E:\work\KEEP-WORKING\CS-Learning\python\python-k8s\config')
with open(path.join(path.dirname(__file__),"nginx-py.yaml")) as f:
dep = yaml.safe_load(f)
k8s_apps_v1 = client.AppsV1Api()
resp = k8s_apps_v1.create_namespaced_deployment(body=dep, namespace='default')
print('deployment created,name=%s'%(resp.metadata.name))
if __name__ == '__main__':
main()
修改资源
from os import path
import yaml
from kubernetes import client,config
def main():
config.load_kube_config(config_file='E:\work\KEEP-WORKING\CS-Learning\python\python-k8s\config')
k8s_core_v1=client.CoreV1Api()
#原image为nginx
old_resp=k8s_core_v1.read_namespaced_pod(namespace='default',name='po-nginx')
#修改镜像为busybox
old_resp.spec.containers[0].image='busybox'
#patch pod
new_resp=k8s_core_v1.patch_namespaced_pod(namespace='default',name='po-nginx',body=old_resp)
print(new_resp.spec.containers[0].image)
if __name__=='__main__':
main()
删除资源
from os import path
import yaml
from kubernetes import client,config
def main():
config.load_kube_config(config_file='E:\work\KEEP-WORKING\CS-Learning\python\python-k8s\config')
k8s_core_v1=client.CoreV1Api()
resp=k8s_core_v1.delete_namespaced_pod(namespace='default',name='po-nginx')
print('delete pod')
if __name__=='__main__':
main()