《Kubernetes快速入门》阅读笔记

Kubernetes快速入门

一、Kubernetes简介

本质上来说,Kubernetes是云原生微服务(cloud-native microservice)应用的编排器(orchestrator)

  • 微服务:是有由很多小型专用部件组成,这些部件被松散的耦合在一起,形成一个有用的应用。
  • 云原生:
    • 按需扩缩容:应用和相关基础设施根据需求自动扩缩容
    • 自我修复
    • 支持零停机时间滚动更新:无需关闭应用的更新,是用户无感的
    • 可以在任何有Kubernetes的地方运行
  • 编排器:将一组微服务聚集在一起,并将它们组织成一个能创造价值的应用。同时提供云原生功能。

Kubernetes(“舵手”)

二、为什么需要Kubernetes

  • 平衡竞争环境
  • Kubernetes作为云的操作系统的概念
    • 可以部署时随时在不同的云之间过渡
    • 可以实现多云
    • 可以更轻松地在云和本地之间过渡

三、Kubernetes集群构成

一个Kubernetes集群是一个或多个安装了Kubernetes的机器。这些机器被称为节点。

  • 主节点:托管控制面板(拥有多个主节点可以实现高可用性,隔离故障域)。
    • API服务器:提供管理控制的接口
    • 调度器:选择在哪些节点运行用户应用
    • 存储器:存储集群及所有应用的状态
    • 云控制器:允许Kubernetes与云服务器集成
  • 工作节点:运行用户应用
    • kubelet:是主Kubernetes代理,将工作节点加到集群中,并与控制面板进行通信
    • 容器运行时:负责启动和关闭容器

kubectl命令行工具

四、获取Kubernetes

4.1 在笔记本电脑上通过Docker Desktop获取Kubernetes

(单节点Kubernetes集群,仅仅适合开发使用,不建议用于生产)

  • 安装 Docker Desktop(Windows)

  • 进入Docker官网
    在这里插入图片描述

  • 运行安装程序,无脑Next即可

  • 安装完成打开Docker Desktop

    • 如果遇到如下问题(WSL版本问题)
      在这里插入图片描述
      根据提示有两个方法可以解决,这里我试了方法一不行,方法二成功解决

      • 方法一:控制台运行如下命令

        wsl --update
        
      • 方法二:下载wsl更新程序并运行
        在这里插入图片描述

  • Kubernetes默认是disable的,需要在设置中勾选(settings->Kubernetes->Enable Kuberentes)在这里插入图片描述

  • 启动成功左下将出现Kubernetes状态图标
    在这里插入图片描述

  • 可以通过如下命令验证docker是否安装成功

    docker --version
    
  • 可以通过如下命令查看Kubernetes是否安装并成功启动

    kubectl version -o yaml
    

在这里插入图片描述

4.2 在云上通过LKE获取Kubernetes

Linode Kubernetes Engine https://www.linode.com/

五、创建容器化应用

5.1 前提条件

  • git https://git-scm.com/
  • Docker https://www.docker.com/
  • Docker Hub https://hub.docker.com/

5.2 准备好你的应用代码

示例代码

git clone https://github.com/nigelpoulton/qsk-book.git
  • App目录为应用源代码及配置文件所在
    • Dockerfile:是Docker指令,用于创建容器镜像 https://www.cnblogs.com/ilovebath/p/16271645.html
    • app.js:是应用主文件,是一个node.js应用
    • botstrap.css:样式文件
    • package.json:依赖配置文件
    • views:页面视图目录

5.3 构建容器镜像

Docker 常用命令 https://www.cnblogs.com/qkshhan/p/14781515.html

在App目录下运行如下命令(运行很久,耐心等待):

docker image build -t yourDockerHubId/qsk-book:1.0 .

在这里插入图片描述
运行如下命令确认镜像构建成功

docker image ls

在这里插入图片描述

5.4 在代码库上托管镜像(可选)

这里以Docker Hub为例

使用如下命令将镜像推送到Docker Hub

docker image push yourDockerHubId/qsk-book:1.0
  • 首次push会出现如下错误
    在这里插入图片描述
    原因是你还没有登录,所以没有权限,运行如下命令登录docker即可(按照提示输入用户名及密码)

    docker login
    

在这里插入图片描述
再次使用上面的命令推送镜像
在这里插入图片描述
访问Docker Hub确认推送成功
在这里插入图片描述

六、在Kubernetes上运行应用

6.1 验证K8s集群

kubectl get nodes

在这里插入图片描述

6.2 将应用部署到K8s

  • Pod:是一个围绕容器的轻量级包装器

  • pod.yml为其配置文件(在qsk-book目录下) https://blog.csdn.net/qq_48480384/article/details/126989905

    apiVersion: v1 # 正在部署的对象的版本
    kind: Pod # 正在部署的对象的类型
    metadata: # Pod的名称和一个标记
      name: first-pod
      labels:
        project: qsk-book
    spec: # 指定Pod将执行的容器及运行它的端口
      containers:
        - name: web-ctr
          image: yourDockerHubId/qsk-book:1.0 # 这里需要换成你的ID
          ports:
            - containerPort: 8080
    
  • 通过以下命令部署上述Pod(在qsk-book目录下)

    kubectl apply -f pod.yml
    

在这里插入图片描述

  • 确认部署pod成功

    kubectl get pods
    

在这里插入图片描述

  • 通过以下两个命令可以查看pod的配置和状态

    kubectl describe pod first-pod
    
    kubectl get pod first-pod
    
  • 可以通过以下命令删除一个pod

    kubectl delete pod first-pod
    

6.3 连接到应用

  • Service: 提供与运行在pod中的应用的连通性

  • svc-local.yml为其配置文件(在qsk-book目录下,svc-cloud.yml是部署在云上所用的配置文件,如LKE)

    apiVersion: v1 # 正在部署的对象的版本
    kind: Service # 正在部署的对象的类型
    metadata: 
      name: svc-local # 名称
    spec:
      type: NodePort # 本地集群无法访问面向互联网的负载均衡器
      # type: LoadBalancer #在云上配置一个面向互联网的负载均衡器
      ports:
      - port: 8080
        protocol: TCP
        targetPort: 8080
        nodePort: 31111
      selector: # 选择器,与pod对应
        project: qsk-book
    
  • 部署Service

    kubectl apply -f svc-local.yml
    

在这里插入图片描述

  • 验证部署结果

    kubectl get svc
    

在这里插入图片描述

  • 同上,你可以使用如下命令查看详细信息

    kubectl describe svc svc-local
    
  • 在本地浏览器访问http://localhost:31111
    在这里插入图片描述

  • 可以通过如下命令删除一个svc

    kubectl delete svc svc-local
    

七、Kubernetes自我修复功能演示

7.1 Deployment对象介绍

  • Deployment:提供自我修复、自动扩缩容、滚动更新功能

  • deploy.yml为其配置文件(在qsk-book目录下)

    apiVersion: apps/v1 # 对象版本
    kind: Deployment # 对象类型
    metadata:
      name: qsk-deploy
    spec:
      replicas: 5 # pod有多少个副本
      selector:
        matchLabels: # 告诉Deployment控制器
          project: qsk-book # 管理哪些pod
      template:
        metadata:
          labels:
            project: qsk-book # pod标签
        spec: 
          containers:
          - name: qsk-pod
            imagePullPolicy: Always # 永远不使用本地镜像
            ports:
            - containerPort: 8080 # 端口号
            image: yourDockerHubId/qsk-book:1.0 # 镜像
    

7.2 pod故障的自我修复

  • 删除之前的pod

    kubectl delete pod first-pod
    
  • 查看pod及deployment

    kubectl get pods
    
    kubectl get deployments
    

在这里插入图片描述

  • 部署Deployment

    kubectl apply -f deploy.yml
    

在这里插入图片描述

  • 再次查看pod及deployment
    在这里插入图片描述
    部署需要一定时间,需要多次查看确认

  • 删除某一个pod来模拟故障

    kubectl delete pod xxxxx
    

在这里插入图片描述

  • 重新查看pod及deployment
    在这里插入图片描述

八、扩缩容操作

  • 通过修改deploy.yml文件spec.replicas来实现扩缩容,修改后需要重新发送给K8s

    kubectl apply -f deploy.yml
    
  • 通过Cli指令

    kubectl scale --replicas 5 deployment/qsk-deploy
    
  • 注意!

    建议通过修改文件来进行操作,如果在使用Cli命令操作后出现重新提交yml文件的操作,将会导致相应的自动更新,这将会导致意想不到的问题。

    只选择一种方法来进行更新操作即可,推荐通过修改文件来更新。

九、滚动更新

  • 编辑deploy.yml配置滚动更新

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: qsk-deploy
    spec:
      replicas: 5
      selector:
        matchLabels:
          project: qsk-book
      minReadySeconds: 20    # 添加这一行 更新间隔时间
      strategy:              # 添加这一行
        type: RollingUpdate  # 添加这一行 更新方式 滚动更新
        rollingUpdate:       # 添加这一行
          maxUnavailable: 0  # 添加这一行 运行更新过程中减少0个pod
          maxSurge: 1        # 添加这一行 允许更新过程中增加1个pod 这两行配合起来即一次替换一个pod
      template:
        metadata:
          labels:
            project: qsk-book
        spec: 
          containers:
          - name: qsk-pod
            imagePullPolicy: Always
            ports:
            - containerPort: 8080
            image: yourDockerHubId/qsk-book:1.1 # 版本改为1.1
    
  • 重新提交deploy.yml

    kubectl apply -f deploy.yml
    
  • 可以通过如下命令查看更新进度

    kubectl rollout status deployment qsk-deploy
    

在这里插入图片描述

  • 在更新的同时查看http://localhost:31111/可以观察应用变化,最终结果如下
    在这里插入图片描述
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YFFlame

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值