1.在k8s集群中部署一个nginx
1.master节点创建任务(实际是由docker拉取Nginx镜像)
[root@k8smaster ~]# kubectl create deployment nginx --image=nginx(名称可先在node节点上通过docker search nginx找)
deployment.apps/nginx created
可通过以下两个命令查看镜像是否下载完毕
[root@k8smaster ~]# kubectl get pods(master执行)
NAME READY STATUS RESTARTS AGE
nginx-85b98978db-nwrhr 1/1 Running 0 74s
此处注意,若创建控制器后查看pod长时间都是pending或其他状态,可能是docker加速器的问题,导致镜像没有成功拉取。
加速器举例:
[root@k8smaster ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
https://gg3gwnry.mirror.aliyuncs.com
[root@k8smaster ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d6h
[root@k8snode ~]# docker images(node节点执行,可看到nginx)
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 3f8a00f137a0 6 days ago 142MB
flannel/flannel-cni-plugin v1.1.2 7a2dcab94698 2 months ago 7.97MB
flannel/flannel v0.20.2 b5c6c9203f83 2 months ago 59.6MB
registry.aliyuncs.com/google_containers/kube-proxy v1.23.1 b46c42588d51 14 months ago 112MB
registry.aliyuncs.com/google_containers/pause 3.6 6270bb605e12 17 months ago 683kB
2.暴露容器端口,使集群间可访问、通信
[root@k8smaster ~]# kubectl expose deployment nginx --port=80 --type=NodePort
此时再查service可看到nginx
[root@k8smaster ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d6h
nginx NodePort 10.108.5.189 <none> 80:32675/TCP 24h
上述的80端口是node之间互相通信使用的,后面的32675是生成的端口,默认是30000以上,这个是对外暴露端口,是可以在本机浏览器访问的
访问master本机IP+端口:http://192.168.137.20:32675
而由于这个nginx的docker镜像实际上是通过master运行在node机器上的,如下:
[root@k8snode ~]# docker ps -a |grep nginx(node机器执行)
0f5b7ae82604 nginx "/docker-entrypoint.…" 32 hours ago Up 32 hours k8s_ngin_nginx-85b98978db-ptctw_default_ffd9c16f-a22f-4372-b36a-5ecb79c61cf1_0
04a623a252ec registry.aliyuncs.com/google_containers/pause:3.6 "/pause" 32 hours ago Up 32 hours k8s_POD_nginx-85b98978db-ptctw_default_ffd9c16f-a22f-4372-b36a-5ecb79c61cf1_0
所以此nginx应用用node机器的IP一样能访问:http://192.168.137.21:32675
其他:
1.删除nginx控制器(通过kubectl get deployment找到)
[root@k8smaster ~]# kubectl delete deployment nginx
2.删除pod(通过kubectl get pod找到)
[root@k8smaster ~]# kubectl delete pod nginx-85b98978db-nwrhr
3.删除service(通过kubectl get service找到)
[root@k8smaster ~]# kubectl delete service nginx
2.在k8s集群中部署一个tomcat
1.在node节点上搜索tomcat镜像
[root@k8snode ~]# docker search tomcat
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementati… 3490 [OK]
tomee Apache TomEE is an all-Apache Java EE certif… 102 [OK]
2.在master上创建tomcat控制器
[root@k8smaster ~]# kubectl create deployment tomcat --image=tomcat
deployment.apps/tomcat created
查看状态
[root@k8smaster ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 6d4h
tomcat 0/1 1 0 29s
[root@k8smaster ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-85b98978db-ptctw 1/1 Running 0 5d20h
tomcat-655b94657b-x5ppq 0/1 ContainerCreating 0 16s
容器正在创建中,等待一会。。。
[root@k8smaster ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-85b98978db-ptctw 1/1 Running 0 5d20h
tomcat-655b94657b-x5ppq 1/1 Running 0 2m
[root@k8smaster ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 6d4h
tomcat 1/1 1 1 2m10s
pod显示running状态,创建成功。
3.暴露容器端口,使集群间可访问、通信
[root@k8smaster ~]# kubectl expose deployment tomcat --port=8080 --type=NodePort
service/tomcat exposed
[root@k8smaster ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d5h
nginx NodePort 10.108.5.189 <none> 80:32675/TCP 3d
tomcat NodePort 10.102.47.228 <none> 8080:30584/TCP 7s
访问master本机IP+端口:http://192.168.137.20:30584
用node机器IP+端口