前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速上手kubernetes——minikube最小实现

快速上手kubernetes——minikube最小实现

作者头像
LinkinStar
发布2022-09-01 14:18:58
5620
发布2022-09-01 14:18:58
举报
文章被收录于专栏:LinkinStar's Blog

最近在研究k8s,就来写一个关于k8s快速上手,并记录采坑的点。 需要的前置知识点:docker、k8s的一些基本概念,下面这个可能对你有帮助。 https://juejin.im/post/5d1b2a656fb9a07edc0b7058

什么是k8s

我们知道,我们可以将项目制作成docker镜像,然后利用docker去部署我们的项目,这样可以解决很多服务器环境所带来的问题; 但是容器多了,容器与容器之间就需要访问,之间就需要网络配置等等,从而就有了docker-compose; 但是当我们的服务进行升级,或者服务需要进行调度,扩容等等,这个时候就需要一个大管家来管所有的东西; 这个大管家就是 - Kubernetes

初学会遇到的问题

因为k8s的东西太多了,所以学习成本现在越来越高,好在k8s已经很多教程。我说一下现在学的时候肯定会遇到的大问题:

  • 国内的问题(国内环境很多镜像拉不到)
  • 本地搭建环境(原来搭建k8s需要一些服务器)
  • 电脑环境的问题(windows和mac都有坑点)

最小实现

现在我们就来在本机实现一个最小的k8s的实现,给出一个hello-world k8s提供了minikube,这个东西可以让你本机一台机器就可以搭建起这个环境。拥有和线上一样的命令行操作和模式,但是不需要你再去创建很多虚拟机来搞事情了。超级方便也。 https://minikube.sigs.k8s.io/ 我们就利用这个来实现,下面来说说步骤: 我的本机环境:

  • macOS
  • minikube version: v1.5.2
  • Docker version 18.03.1-ce

安装环境

大致步骤:https://minikube.sigs.k8s.io/docs/start/macos/

brew install minikube brew install docker-machine-driver-vmware minikube start --vm-driver=vmware --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

成功之后: minikube status 查看minikube的状态 minikube ip 查看minikube的ip minikube dashboard 打开dashboard展示k8s的状态

安装坑点

  • HyperKit最新版本可能存在问题,所以我使用VMware Fusion实现虚拟化的依赖
  • 国内k8s.gcr.io的相关镜像国内拉取不到,使用mirrorgooglecontainers也无法拉取到,所以使用阿里云的仓库 https://github.com/kubernetes/minikube/issues/3860
  • 如果之前已经使用过minikube start命令,建议先minikube delete,并删除rm -rf ~/.minikube/,然后重新start

进行部署

首先描述一下部署要做的事情:linkinstar/mini-go:v1.0 是我已经上传到 docker-hub 里面的一个已经做好的最简单的项目,会暴露一个8080端口的web服务; 最终的目标,在k8s创建一个pod,pod中运行一个我们的容器,最终我们在外部可以访问到这个服务

首先创建两个文件
代码语言:javascript
复制
# deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mini-go
  labels:
    app: mini-go
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mini-go
  template:
    metadata:
      labels:
        app: mini-go
    spec:
      containers:
      - name: mini-go
        image: linkinstar/mini-go:v1.0
        ports:
        - containerPort: 8080
代码语言:javascript
复制
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: mini-go-service
spec:
  selector:
    app: mini-go
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
    nodePort: 30008
执行
  • kubectl create -f service.yaml
  • kubectl create -f deploy.yaml
查看

执行成功可以再dashboard中查看执行状态

最终访问地址查看到服务是否正常:http://192.168.231.146:30008/ 其中的ip是通过 minikube ip 命令查看的

服务操作

水平伸缩

在现实的业务环境中,当用户的访问增多,我们需要扩展我们的应用,也就是水平的去多部署几个容器,有了k8s之后这件事就变得非常的容易了。

  • 修改 deploy.yaml 文件中的 replicas: 2 改成2个
  • 使用命令:kubectl apply -f deploy.yaml 使配置生效

然后我们就可以看到,原来的一个pod变成了两个,而k8s会将我们的请求负载均衡到每个pod中。整个过程可以说是非常的优雅了。

同样的,当我们需要减少服务的数量时也是相同的道理

版本升级

对于应用的版本升级也是同样的道理

  • 修改 deploy.yaml 文件中的 image: linkinstar/mini-go:v2.0 改成2.0
  • 使用命令:kubectl apply -f deploy.yaml 使配置生效
版本回退

当我们发现发布的服务问题,想要进行版本回退的时候,就可以使用 kubectl rollout undo deployments/mini-go 进行版本回退,下面是版本回退过程中

总结

  • 使用minikube可以快速让新手感受到k8s到底是如何使用的
  • 环境配置过程中会有很多问题,需要你耐心解决
  • k8s在服务编排上面除了以上提到的用法以外还有很多牛逼的功能等着你去发现
  • 学习过程中需要保持一个原则,先用着看看 -> 搞清楚架构 -> 尝试各种功能 -> 学习各个模块的实现 -> 最终实践
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是k8s
  • 初学会遇到的问题
  • 最小实现
    • 安装环境
      • 安装坑点
        • 进行部署
          • 首先创建两个文件
          • 执行
          • 查看
        • 服务操作
          • 水平伸缩
          • 版本升级
          • 版本回退
      • 总结
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档