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