Linux企业实战之容器(七)——Kubernetes(2)

1 在Kubernetes上运行容器

  • 上面讲到我们已经搭建好了Kubernetes,接下来我们先使用命令行在上运行一个容器
kubectl run nginx --image=nginx             #运行一个容器
kubectl get pod nginx						#查看容器的运行状态等信息
kubectl describe pod nginx   				#查看创建好的容器的详细信息

Linux企业实战之容器(七)——Kubernetes(2)_第1张图片
Linux企业实战之容器(七)——Kubernetes(2)_第2张图片

  • 集群内部任意节点可以访问pod,但集群外部无法访问
kubectl run test -it --image=busyboxplus  --restart=Never
curl 10.244.2.3

Linux企业实战之容器(七)——Kubernetes(2)_第3张图片

2 Pod管理

  • Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip
  • 一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),多个容器间共享IPC、Network和UTC namespace

两种创建pod的方式

  • 自主式创建pod

这种方式创建的pod,如果你删除之后,它就会永久的消失

kubectl run nginx --image=nginx  
kubectl get pod                         #查看创建的pod状态等信息
kubectl delete pod nginx                #删除创建的pod
kubectl get pod

Linux企业实战之容器(七)——Kubernetes(2)_第4张图片

  • 采用deployment的方式来创建pod

这种方式不同于自主式创建pod的区别在于,你删除pod后,它会自己再重新创建一个pod,只是名称不同而已,而且使用deployment方式创建的pod,还可以做拉伸,进行自动维护。

kubectl create deployment nginx --image=nginx
kubectl get pod
kubectl delete pod nginx
kubectl get pod

Linux企业实战之容器(七)——Kubernetes(2)_第5张图片

Linux企业实战之容器(七)——Kubernetes(2)_第6张图片

kubectl scale --replicas=2 deployment nginx   #做拉伸(也就是再创建复制一个pod,但是会运行在不同的节点上)
kubectl get pod -o wide

Linux企业实战之容器(七)——Kubernetes(2)_第7张图片

Service(创建service,可以在集群内部来访问我们的服务)

  • service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务

创建service

kubectl expose deployment nginx --port=80 --target-port=80   
kubectl get deployments.apps                                 
kubectl describe svc nginx  #查看创建的nginx服务的详细信息
kubectl get svc -o wide     #查看创建的服务

注意:通过expose命令,此时pod客户端可以通过service的名称访问后端的两个Pod

Linux企业实战之容器(七)——Kubernetes(2)_第8张图片

在这里插入图片描述

对服务进行访问(也是在集群内进行访问)

通过ClusterIP的方式来访问,但是也只是在集群内部来进行访问,=集群外部依旧不能直接访问

kubectl run test -it --image=busyboxplus
kubectl attach test -it

Linux企业实战之容器(七)——Kubernetes(2)_第9张图片

通过NodePort类型,在Pod所在的节点进行绑定端口,让外部客户端访问Pod

NodePort: 在ClusterIP基础上为Service在每台机器上绑定一个端口,这样就可以通过 NodeIP:NodePort 来访问该服务

首先将我们创建好的service进行修改,修改service的type为NodePort

 kubectl edit svc nginx      #修改我们已经创建好的nginx,使其type为NodePort
 

在这里插入图片描述

Linux企业实战之容器(七)——Kubernetes(2)_第10张图片

Linux企业实战之容器(七)——Kubernetes(2)_第11张图片
在这里插入图片描述

查看pod所在节点的虚拟机的端口情况

kubectl get pod -o wide           #查看nginx所在的节点位置
kubectl get svc nginx             #查看服务在节点上绑定的端口

在这里插入图片描述

在这里插入图片描述

我们在server2和server3上查看端口的情况

netstat -antlp

Linux企业实战之容器(七)——Kubernetes(2)_第12张图片

通过NodeIP:NodePort的方式在集群外部来进行访问

curl 192.168.43.102:32580
curl 192.168.43.103:32580

Linux企业实战之容器(七)——Kubernetes(2)_第13张图片

Linux企业实战之容器(七)——Kubernetes(2)_第14张图片

3 资源清单

格式如下:

  • apiVersion: group/version  //指明api资源属于哪个群组和版本,同一个组可以有多个版本
    $ kubectl api-versions //查询命令

  • kind: //标记创建的资源类型,k8s主要支持以下资源类别
    Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob

  • metadata: //元数据
    name: //对像名称
    namespace: //对象属于哪个命名空间
    labels: //指定资源标签,标签是一种键值数据

  • spec: //定义目标资源的期望状态

一些参数以及说明

Linux企业实战之容器(七)——Kubernetes(2)_第15张图片
Linux企业实战之容器(七)——Kubernetes(2)_第16张图片
Linux企业实战之容器(七)——Kubernetes(2)_第17张图片
Linux企业实战之容器(七)——Kubernetes(2)_第18张图片
Linux企业实战之容器(七)——Kubernetes(2)_第19张图片

  • 编辑资源清单文件
mkdir manifest
vim /maniest/pod.yaml
 
  1 apiVersion: v1
  2 kind: Pod
  3 metadata:
  4   name: nginx
  5 spec:
  6   containers:
  7     - name: nginx
  8       image:  nginx
  9       imagePullPolicy:  IfNotPresent
                                        
  • 创建pod
kubectl create -f pod.yaml

kubectl get pod

Linux企业实战之容器(七)——Kubernetes(2)_第20张图片

  • 删除pod,使用资源清单创建的pod,我们在删除pod时,可以直接删除其资源清单文件
kubectl delete -f pod.yaml      #删除清单,同时会删除利用清单创建的pod

kubectl get pod 

在这里插入图片描述

  • 用一个pod创建两个容器
vim pod.yaml


  1 apiVersion: v1
  2 kind: Pod
  3 metadata:
  4   name: nginx
  5 spec:
  6   containers:
  7     - name: nginx
  8       image:  nginx
  9       imagePullPolicy:  IfNotPresent
 10     - name: busyboxplus
 11       image:  reg.westos.org:5000/busyboxplus
 12       imagePullPolicy:  IfNotPresent
 13       tty:  true



kubectl get pod
kubectl describe pod nginx        #查看这个pod中两个容器的具体情况                      

Linux企业实战之容器(七)——Kubernetes(2)_第21张图片

Linux企业实战之容器(七)——Kubernetes(2)_第22张图片

Linux企业实战之容器(七)——Kubernetes(2)_第23张图片

  • 因为我们在一个pod中创建了我两个容器,且有一个容器为busyboxplus,通过前面的学习,同一Pod中的容器是可以进行通信的
kubectl exec -it nginx -c busyboxplus -- sh      #以交互式的方式连接创建好的busyboxplus容器

Linux企业实战之容器(七)——Kubernetes(2)_第24张图片

你可能感兴趣的:(Linux企业实战之容器(七)——Kubernetes(2))