可以通过kubectl run的方式启动一个Pod

    1. $ kubectl run --image=nginx:alpine nginx-app --port=80
    2. deployment "nginx-app" created
    3. $ kubectl get pods
    4. NAME READY STATUS RESTARTS AGE
    5. nginx-app-4028413181-cnt1i 1/1 Running 0 52s

    当容器的STATUS变成Runing以后,就可以用kubectl命令来操作它了,比如

    • kubectl get - 类似于 docker ps,查询资源列表
    • kubectl describe - 类似于 docker inspect,获取资源的详细信息
    • kubectl logs - 类似于 docker logs,获取容器的日志
    • kubectl exec - 类似于 docker exec,在容器内执行一个命令

    上面是通过kubectl run来启动了第一个Pod,但是kubectl run不支持所有的功能。在kubernetes中,更常用的方法是使用yaml文件来定义资源,并通过kubectl create -f file.yaml来创建资源。比如一个简单的nginx Pod可以定义为:

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: nginx
    5. labels:
    6. app: nginx
    7. spec:
    8. containers:
    9. - name: nginx
    10. image: nginx
    11. ports:
    12. - containerPort: 80

    kubectl run 并不是直接创建一个Pod,而是先创建一个Deployment资源(replicas = 1),再由与Deployment关联的ReplicaSet来自动创建Pod,这等价于这样一个配置:

    1. apiVersion: extensions/v1beta1
    2. kind: Deployment
    3. metadata:
    4. labels:
    5. run: nginx-app
    6. name: nginx-app
    7. namespace: default
    8. spec:
    9. replicas: 1
    10. selector:
    11. matchLabels:
    12. run: nginx-app
    13. strategy:
    14. rollingUpdate:
    15. maxSurge: 1
    16. maxUnavailable: 1
    17. type: RollingUpdate
    18. template:
    19. metadata:
    20. labels:
    21. run: nginx-app
    22. spec:
    23. containers:
    24. - image: nginx
    25. name: nginx-app
    26. ports:
    27. - containerPort: 80
    28. protocol: TCP
    29. dnsPolicy: ClusterFirst
    30. restartPolicy: Always