zoukankan      html  css  js  c++  java
  • Kubernetes的简单Demo

    本文描述一个用Kubernetes搭建的简单集群的单service案例,基本来源于慕课网。本案例包含两台主机共个节点,结构如下图所示。

    一、安装

    安装过程参考:https://github.com/gjmzj/kubeasz/blob/master/docs/quickStart.md

    其中,针对第三步的安装,需要将“ssh-copy-id $IP”替换为:

    cat id_rsa.pub >> /root/.ssh/authorized_keys

    同时,在hosts中将[kube-node]设置为本机ip,将[kube-node]设置为slave节点的ip。这样就将本机指定为了集群的master节点。

    安装完成后,通过"ssh 本机ip"登录本机,就可以进行各种操作了。

    通过get nodes操作获取集群节点信息。

    kubectl get nodes 

    用get pods操作查看集群的pod是否都正常运行:

    kubectl get pods --all-namespaces

    get操作还能获得很多其他的集群信息,包括services、pods、deployments等。可以用kubectl get --help查看。

    二、部署service

    Kubernetes通过yaml文件定义各种对象。部署service也是通过yaml文件进行的。

    1.编写hello-service.yaml:

    apiVersion: v1
    kind: Service
    metadata: 
      name: hello-service
    spec:
      type: NodePort
      selector: 
        app: hello-k8s-demo
      ports:
      - protocol: TCP
        port: 80
        targetPort: 8080
        nodePort: 30008        

    上面是配置部署service的一个标准的yaml文件。

    apiVersion即文件使用的api版本。

    kind即对象的类型(部署service时为Service)。

    metadata是元数据,这里规定了service的名称。

    spec代表对象的具体属性。

    type规定为NodePort时,下面的nodePort需要为节点指定监听的端口。

    selector规定了将请求打到具有标签app=hello-k8s-demo的pod上。

    最后的ports下面规定了一组port的属性。

    port代表service暴露的虚拟端口为80。

    targetPort代表后端pod监听在8080端口。

    2.创建service

    kubectl create命令创建service:

    kubectl create -f hello-service.yaml --record=true

    这样service就创建成功了。可以用kubectl get service查看刚创建的服务,或者用kubectl describe命令查看详细信息:

    kubectl describe service/hello-service

     三、部署Deployment

    Kubernetes一般通过部署deployment实现对pod的配置,同样通过yaml文件。

    1.编写hello-deployment.yaml文件

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hello-deployment
      labels:
        app: hello-k8s-demo
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: hello-k8s-demo
      template:
        metadata:
          labels:
            app: hello-k8s-demo
        spec:
          containers:
          - name: hello-k8s
            image: bigwhite/hello-kubernetes-demo:v0.1
            imagePullPolicy: Always
            ports:
            - containerPort: 8080

    在metadata中为deployment打上了此应用的标签。

    在spec中,规定了replica(即pod的个数)为2。

    后面template的意思是,当pod的个数低于前面规定的replica的个数时,要求deployment按照此template创建pod以补全个数。

    模板中必须规定label且必须与前面的selector一致。

    后面为template定义了容器的信息,即新创建的pod需要封装哪些容器。这里规定了容器的名字、镜像、拉取策略、以及pod暴露的端口。

    2.创建deployment

    仍然通过kubectl create -f创建deployment。之后可以用kubectl get deployment查看基本信息。

    再次运行kubectl describe service,可以发现在endpoints栏增加了新创建的两个pod的ip地址。

    这时,从本机或者从机访问本机或者从机的ip地址的30008端口的hello路由,都可以看到输出了hello, kubernetes!的字样:

    curl [本机ip或从机ip]:30008/hello

    3.监控pod运行情况

    通过kubectl get pods命令,可以查看到刚创建的pod信息。发现两个pod被分配到了两个节点上。

    将pod的名字复制,使用kubectl logs -f [pod名],可以对pod的状态进行监控。

    新建两个窗口,分别对两个pod执行logs操作。多次发送curl请求,可以发现,请求被负载均衡到了两个pod下。

    三、扩展pod的数量

    修改hello-deployment.yaml文件内容,将replica改为3。

    通过kubectl apply -f hello-deployment.yaml命令,使修改生效。

    通过get pods查看pod信息,可以发现pod数量已经增加为3个。

    四、服务版本升级和回退

    修改hello-deployment.yaml文件内容,将镜像版本改为v0.2,通过apply命令使其生效。

    在升级过程中,Kubernetes会用新pod逐一替换旧pod。

    可以用rollout undo命令对升级进行快速回滚:

    kubectl rollout undo deployment/hello-deployment

    (主要来源于https://www.imooc.com/learn/978)

  • 相关阅读:
    origin/HEAD -> origin/master 这个分支是干嘛的啊
    使用Spring Boot来加速Java web项目的开发
    分辨真假数据科学家的20个问题及回答
    我的数学建模历程
    计算机科学中最重要的32个算法
    期权交易基本原理——买进看跌期权(Long Put),卖出看跌期权(Short Put)
    期货交易术语
    apecceosummit2016
    opencv 61篇
    server-pc--------------->lspci,lsusb,meminfo等配置信息
  • 原文地址:https://www.cnblogs.com/00986014w/p/9223614.html
Copyright © 2011-2022 走看看