1.4 .用kubernetes部署“容器化应用”

1.4.1.kubectl的常见命令
#查看所有命令
kubectl --help
#查看控制器
kubectl get deployment 
#查看pod
kubectl get pod 
#查看服务
kubectl get service
1.4.2.关于控制器(deployment)和pod和docker镜像

在这里插入图片描述

三者的关系如图所示

控制器包括了pod,pod包括了docker。 pod和控制器的查看都在master节点里,master启动了某个镜像后,会将该镜像产生的docker容器放在其他node节点里。

拉取镜像(以nginx为例)

#在master里拉取
[root@k8smaster1 ~]# kubectl create deployment nginx(随便写的名字) --image=nginx    拉取镜像并且用pod启动
deployment.apps/nginx created

[root@k8smaster1 ~]# kubectl get service
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP  ***.***.*.*    <none>        443/TCP   2d4h
[root@k8smaster1 ~]# kubectl create deployment nginx1 --image=nginx
deployment.apps/nginx1 created
[root@k8smaster1 ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
[root@k8smaster1 ~]# kubectl get service
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP       PORT(S)        AGE
kubernetes   ClusterIP   ***.***.***.***       <none>        443/TCP        2d4h
nginx        NodePort    ***.***.***.***       <none>        80:30578/TCP   4s
#注意 80端口是内部端口,外部无法访问,外部访问需要找到哪个node开启了它,然后 node/master的ip+30578访问


#我们在node节点里进行操作
[root@k8snode2 ~]# docker ps
CONTAINER ID   IMAGE                                               COMMAND                  CREATED          STATUS          PORTS     NAMES
25642207cfe5   nginx                                               "/docker-entrypoint.…"   33 minutes ago   Up 33 minutes             k8s_nginx_nginx-6799fc88d8-c7d6l_default_f7f8bbc5-8d3e-4310-b24e-3e6113641941_0
765fb9563740   registry.aliyuncs.com/google_containers/pause:3.2   "/pause"                 34 minutes ago   Up 34 minutes             k8s_POD_nginx-6799fc88d8-c7d6l_default_f7f8bbc5-8d3e-4310-b24e-3e6113641941_0
b12e4443fa05   e708f4bb69e3                                        "/opt/bin/flanneld -…"   54 minutes ago   Up 54 minutes             k8s_kube-flannel_kube-flannel-ds-lj52w_kube-system_a9bb23f0-2576-4d15-891b-d3565ad63736_1
d37ade0d00d7   635b36f4d89f                                        "/usr/local/bin/kube…"   54 minutes ago   Up 54 minutes             k8s_kube-proxy_kube-proxy-fg9l5_kube-system_ccd0a744-9535-4bff-892d-372b1049b7c4_4
45e6085b6543   registry.aliyuncs.com/google_containers/pause:3.2   "/pause"                 54 minutes ago   Up 54 minutes             k8s_POD_kube-flannel-ds-lj52w_kube-system_a9bb23f0-2576-4d15-891b-d3565ad63736_1
110ea5c2c1f8   registry.aliyuncs.com/google_containers/pause:3.2   "/pause"                 54 minutes ago   Up 54 minutes             k8s_POD_kube-proxy-fg9l5_kube-system_ccd0a744-9535-4bff-892d-372b1049b7c4_4

#可以看到 nginx的镜像在node节点里





扩展:用yaml文件部署

在kubenetes中,我们也可以把镜像输出成yaml文件,然后直接运行yaml文件来部署项目。

#空命令部署
kubectl create deployment 给服务起的名字 --image=镜像名字r --dry-run -o yaml 
#空命令执行后生成yaml文件
kubectl create deployment 给服务起的名字 --image=镜像名字 --dry-run -o yaml > 生成的文件名

#将生成的yaml部署

kubectl apply -f 文件名. yaml

kubectl create deployment yanginx --image=nginx --dry-run=client -o yaml > nginx.yaml


例如用该种方式部署nginx


[root@k8smaster1 ~]# kubectl create deployment yanginx --image=nginx --dry-run=client -o yaml > nginx.yaml
[root@k8smaster1 ~]# kubectl apply -f nginx.yaml 
deployment.apps/yanginx created
[root@k8smaster1 ~]# cat nginx.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: yanginx
  name: yanginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: yanginx
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: yanginx
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}
[root@k8smaster1 ~]# kubectl get pods
NAME                       READY   STATUS    RESTARTS   AGE
yanginx-7f9fbfccfd-ckvnv   1/1     Running   0          45s
[root@k8smaster1 ~]# kubectl get deploy
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
yanginx   1/1     1            1           3m37s
[root@k8smaster1 ~]# kubectl expose deployment yanginx --port=80 --type=NodePort
service/yanginx exposed
[root@k8smaster1 ~]# kubectl get service
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP       ***           <none>        443/TCP        3d5h
yanginx      NodePort    **********        <none>        80:31951/TCP   13s



Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐