MaxCloud User Docs
演示登录
  • Welcome
    • 介绍
    • 快速开始
  • 使用说明
    • 集群管理
      • 导入集群
      • 创建集群
      • 关联授权
      • 集群功能
    • 项目管理
      • 事件订阅
    • 应用管理
      • 创建应用
      • 灰度发布
      • 持续集成
  • 客户端工具
    • kubemax
    • kubectl
    • 自定义客户端
  • MrMax
    • MrMax客户端使用指南
    • Cybercore
    • SDK Release Version
  • 开发者指南
    • MaxLang语言基础
    • MaxLang内置方法
    • MaxLang操作资源示例
  • 社区活动
    • 技术交流
      • 2023/05/28 亚马逊云科技 Community Day 深圳站
    • 技术文章
      • 2023.5 记一次EKS 1.22->1.26 升级
      • 2023.8 创建EKS后要关注的几个事情
    • Kubernetes Workshop
      • 基础篇
        • Docker学习环境
        • 开始使用Docker
        • 开始使用Kubernetes
      • 实战篇
        • Pod:运行于Kubernetes中的容器
        • ReplicationController:部署托管的pods
        • Service:让客户端发现pod并与之通信
        • Volumes:给containers挂载磁盘
        • ConfigMap和Secret:配置应用程序
        • Deployment: 声明式地升级应用
        • StatefulSet:部署有状态的多副本应用
      • 实践篇
        • Helm Charts(上)
          • 什么是Helm和Chart?
          • 使用Helm
        • Helm Charts(中)
          • 创建自己的chart
          • Chart模版构造和语法
          • 使用仓库管理chart
        • Helm Charts(下)
          • 一个实际的项目
          • 最后,Helm不是必须的
        • 持续集成(Gitops)
由 GitBook 提供支持
在本页
  • 搭建本地的Kubernetes环境
  • 使用MaxCloud托管的Kubernetes集群
  • 建立自己专属的实验环境
  • 部署与访问你的应用
  • 认识应用的逻辑组成
  • 横向伸缩你的应用
  • 查看应用跑在哪个节点
  • 思考题

这有帮助吗?

  1. 社区活动
  2. Kubernetes Workshop
  3. 基础篇

开始使用Kubernetes

上一页开始使用Docker下一页实战篇

最后更新于2年前

这有帮助吗?

搭建本地的Kubernetes环境

略,请使用课程实验环境

搭建k8s环境不是我们课程重点,现在都是开箱即用的环境

使用MaxCloud托管的Kubernetes集群

建立自己专属的实验环境

登录MaxCloud账号进入课程实验环境,切换团队到KubernetesWorkshop团队,创建自己的项目,关联集群MC-KubernetesWorkshop-playground-new,添加自己的命名空间。我们目前提供的是基于公有云低成本集群(如亚马逊、阿里云)。大家可以通过MaxCloud -> 系统管理->项目管理->终端 来进行后续操作。

如上图进入终端后测试一下环境,下述指令可以看到集群含有哪些节点

kubectl get nodes

终端环境已经给 kubectl 做了alias别名,后续我们使用k

alias k=kubectl

也可导出Kubeconfig,配置本地集群访问环境,在本地Terminal进行Kubectl相关操作,方式如下:

项目管理—找到自己的项目—导出Kubeconfig

导出的Kubeconfig文件放到本地.kube路径下,并使用kubens切换到自己的命名空间

部署与访问你的应用

现在正式在kubernetes中部署我们的应用

kubectl run kubia --image=luksa/kubia --port=8080

和docker方式做下对比

docker run --name kubia -p 8080:8080 -d luksa/kubia

$ kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
kubia   1/1     Running   0          6s

这里就能看到我们启动的pod了,现在需要让我们能访问它,大家可以先执行指令,感受效果,不用过多探究每个参数的含义。

$ kubectl expose po kubia --type=LoadBalancer --name kubia
service/kubia exposed

看看暴露的服务,我们申请了LoadBalancer,云商创建需要1-5分钟的时间,耐心等待下

$ k get svc
NAME    TYPE           CLUSTER-IP       EXTERNAL-IP                                                              PORT(S)          AGE
kubia   LoadBalancer   10.100.114.238   aa4ace9d6de084763b9ca80bcccf121e-357969387.ap-east-1.elb.amazonaws.com   8080:30207/TCP   16s

看到了LoadBalancer后,测试一下,注意替换EXTERNAL-IP

$ curl http://<EXTERNAL-IP>:8080
You've hit kubia

这里因为暴露了服务给外网,在自己本地电脑也可以curl的,建议体会下

认识应用的逻辑组成

见课件

横向伸缩你的应用

首先清理之前的pod和service

zhaoying@zhaoying ~ $ kubectl delete svc kubia
service "kubia" deleted
zhaoying@zhaoying ~ $ kubectl delete po kubia
pod "kubia" deleted

用文件(Yaml语法)方式重新部署kubia服务

MaxCloud提供Yaml部署功能

资源管理—Deployment—Yaml部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubia
  labels:
    app: kubia
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kubia
  template:
    metadata:
      labels:
        app: kubia
    spec:
      containers:
      - name: kubia
        image: luksa/kubia
        ports:
        - containerPort: 8080

资源管理—Service—Yaml部署

apiVersion: v1
kind: Service
metadata:
  labels:
    app: kubia
  name: kubia
spec:
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 31958
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: kubia
  sessionAffinity: None
  type: LoadBalancer
$ k get replicaset
NAME    DESIRED   CURRENT   READY   AGE
kubia-69f875bf56   1         1         0       25s
$ k get deployment 
NAME READY UP-TO-DATE AVAILABLE AGE 
kubia 0/3 3 0 3m5s
$ k get svc
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)          AGE
kubia        LoadBalancer   192.168.24.186   39.106.128.174   8080:31958/TCP   28s

大家需要记住一些缩写

  • rs:replicaset

  • po:pods

  • deploy: deployment

这样能简化指令

修改期望的副本即可以完成伸缩

$ k scale deploy kubia --replicas=3
deployment.apps/kubia scaled
$ k get po
NAME                                READY   STATUS              RESTARTS   AGE
kubia-546dd5d8b6-76lx9   1/1     Running             0          5m14s
kubia-546dd5d8b6-tchln   0/1     ContainerCreating   0          30s
kubia-546dd5d8b6-zptbt   0/1     ContainerCreating   0          30s

因为我们的应用可以返回主机名,所以每次请求会获得不同的结果

$ while true; do curl http://39.106.128.174:8080; sleep 1;  done
You've hit kubia-qr7r9
You've hit kubia-qr7r9
You've hit kubia-9bklf

负载均衡器到达上限时,请用左边那个ClusterIP

$ kubectl run busybox --rm -i --tty --image busybox -- sh
$ while true; do wget -O- http://<39.106.128.174>:8080; sleep 1;  done

查看应用跑在哪个节点

kubectl get pods -o wide

还可以查看pod的一些细节,还有日志,试试指令吧

# kubectl describe pod <选择一个pod>
# kubectl logs <选择一个pod>

以上这些功能均可以直接在MaxCloud平台查看

通过这些操作,是不是感觉比docker方式简单许多,后面还有更精彩的!

恭喜恭喜!

做到这里,docker和kubernetes你已经入门了!辛苦了!

课程中全部的Yaml代码都能够在如下git地址里找到

git clone https://github.com/liuzoxan/kubernetes-in-action.git

cd kubernetes-in-action/workshop

思考题

  • 说说你对kubernetes的看法,例如功能、docker的区别

  • kubectl get/describe/run,请区分他们的区别

  • 怎样查看节点信息

  • 怎样查看pod信息,日志呢?

  • 怎样查看services信息,它的简写是什么?