kubernetes 以文件形式部署服务

命令行部署nginx

# 镜像部署一个应用
kubectl run mynginx_01 --image=nginx -r=3

部署对比

kubernetes 以文件形式部署服务_第1张图片
生成了 pod,deployment、replicaset

扩容

# 把 mynginx01 部署3份
[root@guanzc-130 ~]# kubectl scale deployment/mynginx01  --replicas=3  
[root@guanzc-130 ~]# kubectl get all
NAME                             READY   STATUS    RESTARTS   AGE
pod/mynginx01-7bd4cdc666-lf7zk   1/1     Running   0          2m16s
pod/mynginx01-7bd4cdc666-mdqvx   1/1     Running   0          33m
pod/mynginx01-7bd4cdc666-nlr77   1/1     Running   0          2m16s

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   6h36m

NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/mynginx01   3/3     3            3           33m

NAME                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/mynginx01-7bd4cdc666   3         3         3       33m
[root@guanzc-130 ~]# 

扩容的是pod。pod是 k8s 服务的容器组,由多个容器组成,k8s里最小单元,类似于docker 里continer, pod 由一个或多个cotainer 组成

服务组成

以nginx为例
kubernetes 以文件形式部署服务_第2张图片

  • 部署完成后主要由pod和pause组成。
  • pod: k8s 最小单元
  • pause: 创建网络和存储,用于隔离pod

内部结构

kubernetes 以文件形式部署服务_第3张图片

  • Deployment 处于 master 节点上,通过发布 Deployment,master 节点会选择合适的 worker 节点创建 Container(即图中的正方体),Container 会被包含在 Pod (即蓝色圆圈)里。
  • kubectl 感知到部署,启动一个 pause 创建一个 网络和存储,创建pod 自己隔离的cgroup 、文件系统 与docker namespace类似

以文件方式部署

必须字段:

  • apiVersion 用来创建对象时所使用的Kubernetes API版本
  • kind 被创建对象的类型
  • metadata 用于唯一确定该对象的元数据:包括 namenamespace,如果 namespace 为空,则默认值为 default
  • spec 描述您对该对象的期望状态
    如果使用 kubectl 创建对象,必须编写 .yaml 格式的文件

以nginx 为例:

apiVersion: apps/v1	#与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment	#该配置的类型,我们使用的是 Deployment
metadata:	        #译名为元数据,即 Deployment 的一些基本属性和信息
  name: nginx-deployment	#Deployment 的名称
  labels:	    #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
    app: nginx	#为该Deployment设置key为app,value为nginx的标签
spec:	        #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
  replicas: 1	#使用该Deployment创建一个应用程序实例
  selector:	    #标签选择器,与上面的标签共同作用,目前不需要理解
    matchLabels: #选择包含标签app:nginx的资源
      app: nginx
  template:	    #这是选择或创建的Pod的模板
    metadata:	#Pod的元数据
      labels:	#Pod的标签,上面的selector即选择包含标签app:nginx的Pod
        app: nginx
    spec:	    #期望Pod实现的功能(即在pod中部署)
      containers:	#生成container,与docker中的container是同一种
      - name: nginx	#container的名称
        image: nginx:1.7.9	#使用镜像nginx:1.7.9创建container,该container默认80端口可访问
  • 文件保存为 ngix01.yaml
  • 文件结构可通过 kubectl run my-nginx01 --image=nginx --dry-run -o yaml 预生成,在进行修改

执行

# 创建(更新)
kubectl apply -f nginx01.yaml 
# 只能创建一次
kubectl create -f nginx01.yaml 
#查看
kubectl get deploy 
# 应用删除
kubectl delete -f  nginx01.yaml 
#替换对象
kubectl replace -f nginx01.yaml

你可能感兴趣的:(kubernetes)