极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇

这篇具有很好参考价值的文章主要介绍了极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是比特桃。本文为《极速上手k8s,Kubernetes 从入门到摸鱼系列》的实战篇,旨在快速上手k8s。如没有阅读过k8s相关理论的朋友,可以先阅读理论篇。

1. 实践环境

k8s 的意义在于分布式大规模容器编排,所以如果我们想要在实际中发挥它的最大价值,至少也得需要 3 台机器。其中一台是主节点,剩余两台是工作节点。当然,也可以通过虚拟机中创建三个操作系统来实践。但这样操作还是很繁琐,其实在学习中,有更方便的办法进行。

  • minikube
    能让你在本地运行 Kubernetes。 minikube 在你本地的个人计算机(包括 Windows、macOS 和 Linux PC)运行一个单节点的 Kubernetes 集群,以便你来尝试 Kubernetes 或者开展每天的开发工作。
  • Kind
    另一个Kubernetes SIGs项目,但与minikube相比有很大不同。顾名思义,它将集群移动到Docker容器中。与生成VM相比,这将显著加快启动速度。
  • Docker Desktop
    在Windows、Mac中常用的Docker Desktop 中也内置了一个 k8s 功能,只需要在设置中即可打开使用。

生产环境上的集群安装和配置不建议使用 kind 或者 minikube。本文采用 minikube 来开展,使用其他的环境其实并没有太大区别。minikube的安装可以查阅官网,根据自身不同的操作系统进行安装。minikube 是可以选择依赖于容器还是本机VM:
极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
所以我们可以选择使用 Docker 来当做 minikube 运行的地方,命令:

minikube start --driver='docker’
# 如果你在Docker Desktop版本中使用,建议将 Docke Engine 切换为 Linux的版本
docker context ls
docker context use default

2. 配置

在 k8s 中的核心思想就是:声明式无状态。
极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
所以当我们想通过 API 或 CLI 和 k8s 中主节点中的 API Server 进行通讯的时候,必须采取一种格式。而 CLI 是使用 YAML 格式来进行的, YAML 对于后台开发者来说并不陌生,Spring 中的配置文件也是这个格式。k8s 的 YAML 声明文件分为三个部分:1)metadata;2)specification;3)status。
极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇,Kubernetes,kubernetes,容器,云原生,docker,k8s

细心地朋友会发现,第三个 status 好像并没有在文件中声明。这是因为它是由 k8s 自动生成编辑的。它的主要作用就是,时刻将容器的现有状态(status)与声明状态(specification)相比较,如果发现有区别,则会向声明状态所靠拢。
极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
比如这里在声明文件中是要两个 Nginx,但实际运行中发现只有一个,k8s 发现后会主动的再创建一个让两者相匹配。status 实际是由 etcd 进行维护的。

3. 实例

这个实例是一个 Node 应用程序,通过访问MongoDB进行数据访问,部署方式如下所示:
极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
所涉及到的技术点为:

  • ConfigMap:MongoDB 连接信息
  • Secret:MongoDB 用户名及密码
  • Deployment & Service :应用组合及服务

3.1 MongoDB

首先创建 ConfigMap,k8s作为一个工具类的产品,其实可以直接仿照官网的例子来去改写。
极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
将官网的例子复制下来,改写成如下形式:

apiVersion: v1
kind: ConfigMap
metadata:
  name: mongo-config
data:
  mongo-url: mongo-service

然后创建 Secret,这里需要注意的是,Secret 默认采用了Opaque 的加密方式。我们的用户名和密码需要通过 base64 加密后,粘贴上去。

apiVersion: v1
kind: Secret
metadata:
  name: mongo-secret
type: Opaque
data:
  mongo-user: bW9uZ291c2Vy
  mongo-password: bW9uZ29wYXNzd29yZA==

最后,我们来声明 Deployment & Service,这两个可以单独写,但也可以写在一起:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongo-deployment
  labels:
    app: mongo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongo
  template:
    metadata:
      labels:
        app: mongo
    spec:
      containers:
      - name: mongodb
        image: mongo:5.0
        ports:
        - containerPort: 27017
        env:
        - name: MONGO_INITDB_ROOT_USERNAME
          valueFrom:
            secretKeyRef:
              name: mongo-secret
              key: mongo-user
        - name: MONGO_INITDB_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mongo-secret
              key: mongo-password  
---
apiVersion: v1
kind: Service
metadata:
  name: mongo-service
spec:
  selector:
    app: mongo
  ports:
    - protocol: TCP
      port: 27017
      targetPort: 27017

其中的 template 我们第一次见到,它是为了声明 Pod 的,内部也有自己的元数据(metadata)和声明(specification)。这里面最为重要的就是声明中的容器(containers),其实可以理解为 docker-compose 中声明的 image 信息。
labels是一个标签,k8s 可以为任何组件指定一个标签,可以作为一个标识符。比如 Pod 的名字是变化莫测,就可以使用标签(labels)来快速识别和寻找特定的组件。
YMAL 语法中,使用---三个破折号来区分多个配置文件,所以我们使用破折号分割后,又声明了 Service。其中targetPort为 Pod 中声明的端口,port则可以任意指定未使用的端口。

3.2 Application

如法炮制,我们来声明部署应用部分。webapp.yaml如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-deployment
  labels:
    app: webapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: nanajanashia/k8s-demo-app:v1.0
        ports:
        - containerPort: 3000
        env:
        - name: USER_NAME
          valueFrom:
            secretKeyRef:
              name: mongo-secret
              key: mongo-user
        - name: USER_PWD
          valueFrom:
            secretKeyRef:
              name: mongo-secret
              key: mongo-password 
        - name: DB_URL
          valueFrom:
            configMapKeyRef:
              name: mongo-config
              key: mongo-url
---
apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  type: NodePort
  selector:
    app: webapp
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000
      nodePort: 30100

其中,我们在 APP 的 Service 中声明了 NodePort,它的作用旨在让外部浏览器访问。nodePort则为该 k8s 节点中 ip 所绑定的端口,只是它会有端口范围的限制。
极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇,Kubernetes,kubernetes,容器,云原生,docker,k8s

4. 运行

将 YAML 文件写好后,就可以通过 Kubectl 告诉 k8s 集群,我们要这些服务组件。首先创建ConfigMap、Securit:

kubectl apply -f mongo-config.yaml
kubectl apply -f mongo-secret.yaml

然后创建MongoDB 和 APP应用:

kubectl apply -f mongo.yaml
kubectl apply -f webapp.yaml

极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
执行kubectl get all查看当前组件状态:
极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
这里只能看到我们的Deployment、Service、Pod,但配置文件需要单独的命令查询:

kubectl get configmap
kubectl get secret

如果想查看该组件的详细信息,则可以使用该命令:

kubectl describe service webapp-service

在Docker中我们经常查看容器的Log,在 k8s 中查看 pod 日志的命令:

kubectl logs pod名称 -f

总之,kubectl 作为 k8s 最强大的交互工具,它所含的命令集非常多,我们也很难全部记住。就像Linux命令一样,善用-- help~
最后,我们来访问一下这个 k8s 所部署的应用,查询minikube的ip地址:
极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
可以看到minikube的ip是192.168.64.26,直接访问:
极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇,Kubernetes,kubernetes,容器,云原生,docker,k8s

5. 总结

本文我们通过组合理论篇所学习到的组件,通过一个 Node.js 网页应用连接 MongoDB 的例子,实现了在 k8s 中部署使用。虽然在本机环境下用 minikube 会显得比 Docker Compose 要麻烦的多,但只要我们上了集群,就可以凸显出 k8s 的强大之处了。文章来源地址https://www.toymoban.com/news/detail-569941.html

到了这里,关于极速上手k8s,Kubernetes 从入门到摸鱼系列-实践篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes(K8s)从入门到精通系列之四:K8s的基本概念和术语之集群类

    集群表示一个由Master和Node组成的K8s集群。 Master指的是集群的控制节点。 在每个K8s集群都需要有一个或一组被称为Master的节点,来负责整个集群的管理和控制。 Master通常占据一个独立的服务器(在高可用部署中建议至少使用3台服务器),是整个集群的大脑。 在Master上运行以下

    2024年02月15日
    浏览(58)
  • Kubernetes(K8s)从入门到精通系列之三:K8s的基本概念和术语之资源对象概述

    K8s中的基本概念和术语大多是围绕资源对象(Resource Object)来说的,而资源对象在总体上可分为以下两类: 某种资源的对象,例如节点(Node)、Pod、服务(Service)、存储卷(Volume)。 与资源对象相关的事物与动作,例如标签(Label)、注解(Annotation)、命名空间(Namespace)、部署(Deployment)、

    2024年02月14日
    浏览(60)
  • Kubernetes(K8s)从入门到精通系列之十四:安装工具

    Kubernetes 命令行工具 kubectl, 让你可以对 Kubernetes 集群运行命令。 你可以使用 kubectl 来部署应用、监测和管理集群资源以及查看日志。 kind 让你能够在本地计算机上运行 Kubernetes。 使用这个工具需要你安装 Docker 或者 Podman。 与 kind 类似,minikube 是一个工具, 能让你在本地运

    2024年02月14日
    浏览(43)
  • Kubernetes(K8s)从入门到精通系列之十一:安装kubeadm

    一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)。 CPU 2 核心及以上。 集群中的所有机器的网络彼此均能相互连接(公网和

    2024年02月14日
    浏览(50)
  • Kubernetes(K8s)从入门到精通系列之十三:软件负载平衡选项

    当设置具有多个控制平面的集群时,可以通过将 API Server 实例置于负载均衡器后面并在运行 kubeadm init 以便新集群使用它时使用 --control-plane-endpoint 选项来实现更高的可用性。 当然,负载均衡器本身也应该具有高可用性。这通常是通过向负载均衡器添加冗余来实现的。为此,

    2024年02月14日
    浏览(48)
  • Kubernetes(K8s)从入门到精通系列之十二:安装和设置 kubectl

    Kubernetes 命令行工具 kubectl, 让你可以对 Kubernetes 集群运行命令。 你可以使用 kubectl 来部署应用、监测和管理集群资源以及查看日志。 kubectl 版本和集群版本之间的差异必须在一个小版本号内。 例如:v1.27 版本的客户端能与 v1.26、 v1.27 和 v1.28 版本的控制面通信。 用最新兼容

    2024年02月14日
    浏览(43)
  • Kubernetes (K8S) 3 小时快速上手 + 实践

    https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/nd7yOvdY#nav_3 2.1.1 凭证问题 2.1.2 踩坑 问题1:初始化集群控制台 Control plane 解决: 问题2:把工作节点加入集群(只在工作节点跑) 只是一个 K8S 集群模拟器,只有一个节点的集群,只为测试用,master 和 worker 都在一起。 2.3.1 安装(在

    2024年01月18日
    浏览(43)
  • Kubernetes(K8s)从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群

    默认情况下,kubeadm 在每个控制平面节点上运行一个本地 etcd 实例。也可以使用外部的 etcd 集群,并在不同的主机上提供 etcd 实例。 可以设置HA集群: 使用堆叠控制控制平面节点,其中 etcd 节点与控制平面节点共存 使用外部 etcd 节点,其中 etcd 在与控制平面不同的节点上运行

    2024年02月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包