在K8s中创建资源的方式有两种:命令行和YAML文件,本次博文主要介绍使用使用命令行的方式管理Kubernetes资源,如需使用命令行创建资源请参考:kubernetes使用YAML的方式管理Kubernetes资源
一、资源创建
[root@master ~]# kubectl run test --image=nginx:latest --replicas=5
//基于httpd的镜像创建一个deployment类型的控制组,名称为test,并指定副本数量为5
[root@master ~]# kubectl get deployments. //查看deployment控制器
NAME READY UP-TO-DATE AVAILABLE AGE
test 5/5 5 5 6m26s
//可以看到deployment的name是我们指定的test
[root@master ~]# kubectl get replicasets. //查看replicasets这个控制器
NAME DESIRED CURRENT READY AGE
test-66cbf74d74 5 5 5 7m50s
//可以看到replicasets的NAME就是在deployment的NAME后面追加了一串ID号
[root@master ~]# kubectl get pod -o wide //查看pod的详细信息
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-66cbf74d74-cphx4 1/1 Running 0 80s 10.244.1.3 node01 <none> <none>
test-66cbf74d74-fbqkv 1/1 Running 0 80s 10.244.2.4 node02 <none> <none>
test-66cbf74d74-pxqx5 1/1 Running 0 80s 10.244.1.5 node01 <none> <none>
test-66cbf74d74-txpnn 1/1 Running 0 80s 10.244.2.3 node02 <none> <none>
test-66cbf74d74-v6cn2 1/1 Running 0 80s 10.244.1.4 node01 <none> <none>
//可以看到该pod的NAME就是在上面replicasets的后面又追加了一段ID
也可以使用以下方法,查看控制器的详细信息!方法如下:
[root@master ~]# kubectl describe deployments. test
//查看名为test控制器的详细信息
返回的信息如图:
[root@master ~]# kubectl describe replicasets. test
//查看replicasets控制器的详细信息
返回的结果如图:
从以上创建一个pod的过程中,就可以看出当我们执行创建资源的命令后,deployment这个控制器会通过replicaset控制器去管理并创建所需的pod!
二、解决客户端无法访问k8s内部pod所运行的服务
当k8s集群创建pod完成后,集群内部是可以访问pod所提供的服务的,方法如下:
[root@master ~]# kubectl get pod -o wide //查看pod的详细信息
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-66cbf74d74-cphx4 1/1 Running 0 80s 10.244.1.3 node01 <none> <none>
test-66cbf74d74-fbqkv 1/1 Running 0 80s 10.244.2.4 node02 <none> <none>
test-66cbf74d74-pxqx5 1/1 Running 0 80s 10.244.1.5 node01 <none> <none>
test-66cbf74d74-txpnn 1/1 Running 0 80s 10.244.2.3 node02 <none> <none>
test-66cbf74d74-v6cn2 1/1 Running 0 80s 10.244.1.4 node01 <none> <none>
集群内部测试访问:
三、解决k8s内部pod所运行的服务无法被外网访问
[root@master ~]# kubectl run web --image=nginx:latest --port=80 --replicas=2
//创建一个名为web的deployment的资源对象,并映射容器的80端口到宿主机
[root@master ~]# kubectl expose deployment web --name=service --port=80 --type=NodePort
//创建一个service(名称可以自定义),将部署web资源对象的80端口映射出来
[root@master ~]# kubectl get svc service //查看创建service的信息
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service NodePort 10.105.28.224 <none> 80:31590/TCP 6s
//可以看出将部署的服务端口映射到了宿主机的31590端口
客户端访问测试:
注意:是访问群集中任意节点都可以访问k8s集群中pod所提供的服务!