minikube搭建kubernetes

2023-05-16

 

系统环境-deepin15.11

  • 安装virtualbox虚拟机:应用商店就有
  • 安装minikube
aizhao@aizhao:~/hellonode$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 82.3M  100 82.3M    0     0  4295k      0  0:00:19  0:00:19 --:--:-- 4896k
  • 安装kubectl
aizhao@aizhao:~/hellonode$ curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 68.9M  100 68.9M    0     0  4756k      0  0:00:14  0:00:14 --:--:-- 5385k
aizhao@aizhao:~/hellonode$ sudo mv kubectl /usr/local/bin/
  • 配置信息 
aizhao@aizhao:~/hellonode$ export MINIKUBE_WANTUPDATENOTIFICATION=false
aizhao@aizhao:~/hellonode$ export MINIKUBE_WANTREPORTERRORPROMPT=false
aizhao@aizhao:~/hellonode$ export MINIKUBE_HOME=$HOME
aizhao@aizhao:~/hellonode$ export CHANGE_MINIKUBE_NONE_USER=true
aizhao@aizhao:~/hellonode$ mkdir $HOME/.kube || true
aizhao@aizhao:~/hellonode$ touch $HOME/.kube/config
aizhao@aizhao:~/hellonode$ export KUBECONFIG=$HOME/.kube/config

  • 启动minikube
aizhao@aizhao:~/hellonode$ minikube start - driver=virtualbox
  • 查看minikube启动状态
aizhao@aizhao:~/hellonode$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
  • 进入minikube虚拟机,修改密码,这样你既可以在终端登录,也可以在virtualbox的minikube里面登录:默认用户名docker
aizhao@aizhao:~/hellonode$ minikube ssh
                         _             _            
            _         _ ( )           ( )           
  ___ ___  (_)  ___  (_)| |/')  _   _ | |_      __  
/' _ ` _ `\| |/' _ `\| || , <  ( ) ( )| '_`\  /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )(  ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)

$ pwd
/home/docker
$ sudo passwd docker
Changing password for docker
New password: 

 

minikube的kubernetes第一个应用

  1. 创建hellonode文件夹
  2. 在该文件夹里面创建server.js编写代码
  3. var http = require('http');
    
    var handleRequest = function(request, response) {
      console.log('Received request for URL: ' + request.url);
      response.writeHead(200);
      response.end('Hello World!');
    };
    var www = http.createServer(handleRequest);
    www.listen(8080);
  4. 如果本地系统安装了node,可以使用命令运行 node service.js,可以在http:// localhost:8080 / 中查看到“Hello World!”消息。
  5. 按Ctrl-C停止正在运行的Node.js服务器。下一步将应用程序打包到Docker容器中。

  6. 在hellonode文件夹创建文件Dockerfile文件,内容如下

  7. FROM node:6.9.2
    EXPOSE 8080
    COPY server.js .
    CMD node server.js
  8. 本教程使用Minikube,而不是将Docker镜像push到registry,可以使用与Minikube VM相同的Docker主机构建镜像,以使镜像自动存在。为此,请确保使用Minikube Docker守护进程: (此操作保证docker命令使用的是minikube虚拟机里面的docker,而不是本地系统中的docker,可以从docker pull hello-world命令查看,镜像究竟是在本地系统docker images中还是minikube的docker images中)

    aizhao@aizhao:eval $(minikube docker-env)
  9. 注意:如果不再使用Minikube主机时,可以通过运行eval $(minikube docker-env -u)来撤消此更改。

  10. 在hellonode文件夹中终端执行docker build -t hello-node:v1 .

  11. 则可以在minikube虚拟机中,通过docker images 看到hello-node:v1镜像

  12. 在hellonode文件夹中创建 hellonode-deployment.yaml文件,内容如下

  13. apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hellonode-deployment
      labels:
        app: hellonode
    spec:
      # 创建2个hellonode容器
      replicas: 2
      selector:
        matchLabels:
          app: hellonode
      template:
        metadata:
          labels:
            app: hellonode
        spec:
          containers:
          - name: hello-node
            image: hello-node:v1
            ports:
            - containerPort: 8080
    

     

  14. 在hellonode文件夹终端下执行kubect apply -f  hellonode-deployment.yaml

  15. aizhao@aizhao:~/hellonode$ kubectl get deployments
    NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
    hellonode-deployment   2/2     2            2           7m25s
    aizhao@aizhao:~/hellonode$ kubectl get pods
    NAME                                     READY   STATUS    RESTARTS   AGE
    hellonode-deployment-7c8944bfb6-qdz2l    1/1     Running   0          16m
    hellonode-deployment-7c8944bfb6-v4z8t    1/1     Running   0          10m
    aizhao@aizhao:~/hellonode$ kubectl describe pod hellonode-deployment-7c8944bfb6-qdz2l
    Name:         hellonode-deployment-7c8944bfb6-95s2f
    Namespace:    default
    Priority:     0
    Node:         minikube/1xx.1xx.xx.1xx这里是自己本地网络ip
    Start Time:   Wed, 15 Jul 2020 15:37:18 +0800
    Labels:       app=hellonode
                  pod-template-hash=7c8944bfb6
    Annotations:  <none>
    Status:       Running
    IP:           172.17.0.6
    IPs:
      IP:           172.17.0.6
    Controlled By:  ReplicaSet/hellonode-deployment-7c8944bfb6
    
    
  16. 这里你就可以在minikube虚拟机里面通过curl 172.17.0.6:8080访问了,查看到“Hello World!”消息。

  17. 默认情况,这Pod只能通过Kubernetes群集内部IP访问。要使hello-node容器从Kubernetes虚拟网络外部访问,须要使用Kubernetes Service暴露Pod。我们可以使用kubectl expose命令将Pod暴露到外部环境:

  18. aizhao@aizhao:~/hellonode$ kubectl expose deployment hellonode-deployment --type=LoadBalancer
  19. 查看刚创建的Service:

  20. aizhao@aizhao:~/hellonode$ kubectl get services
    NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    hellonode-deployment   LoadBalancer   10.108.135.26   <pending>     8080:32583/TCP   14s
    kubernetes             ClusterIP      10.96.0.1       <none>        443/TCP          21h
    
  21. aizhao@aizhao:~/hellonode$ minikube service hellonode-deployment
    |-----------|----------------------|-------------|-----------------------------|
    | NAMESPACE |         NAME         | TARGET PORT |             URL             |
    |-----------|----------------------|-------------|-----------------------------|
    | default   | hellonode-deployment |        8080 | http://1xx.1xx.xx.xxx:32583 |
    |-----------|----------------------|-------------|-----------------------------|
    🎉  正通过默认浏览器打开服务 default/hellonode-deployment...
    main.go:98: openScheme: "http", "http://1xx.1xx.xx.xxx:32583"
    main.go:107: desktop file: /usr/share/applications/google-chrome.desktop
    
  22. 这里你就可以通过url在浏览器里面访问了
  23. 通过minikube查看k8s应用
  24. aizhao@aizhao:~/hellonode$ minikube dashboard
    🔌  正在开启 dashboard ...
    🤔  正在验证 dashboard 运行情况 ...
    🚀  Launching proxy ...
    🤔  正在验证 proxy 运行状况 ...
    🎉  Opening http://127.0.0.1:36985/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
    main.go:98: openScheme: "http", "http://127.0.0.1:36985/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/"
    main.go:107: desktop file: /usr/share/applications/google-chrome.desktop
    

附:Deployment.yaml名词解释

apiVersion: apps/v1  # 指定api版本,此值必须在kubectl api-versions中  
kind: Deployment  # 指定创建资源的角色/类型   
metadata:  # 资源的元数据/属性 
  name: demo  # 资源的名字,在同一个namespace中必须唯一
  namespace: default # 部署在哪个namespace中
  labels:  # 设定资源的标签
    app: demo
    version: stable
spec: # 资源规范字段
  replicas: 1 # 声明副本数目
  revisionHistoryLimit: 3 # 保留历史版本
  selector: # 选择器
    matchLabels: # 匹配标签
      app: demo
      version: stable
  strategy: # 策略
    rollingUpdate: # 滚动更新
      maxSurge: 30% # 最大额外可以存在的副本数,可以为百分比,也可以为整数
      maxUnavailable: 30% # 示在更新过程中能够进入不可用状态的 Pod 的最大值,可以为百分比,也可以为整数
    type: RollingUpdate # 滚动更新策略
  template: # 模版
    metadata: # 资源的元数据/属性 
      annotations: # 自定义注解列表
        sidecar.istio.io/inject: "false" # 自定义注解名字
      labels: # 设定资源的标签
        app: demo
        version: stable
    spec: # 资源规范字段
      containers:
      - name: demo # 容器的名字   
        image: demo:v1 # 容器使用的镜像地址   
        imagePullPolicy: IfNotPresent # 每次Pod启动拉取镜像策略,三个选择 Always、Never、IfNotPresent
                                      # Always,每次都检查;Never,每次都不检查(不管本地是否有);IfNotPresent,如果本地有就不检查,如果没有就拉取 
        resources: # 资源管理
          limits: # 最大使用
            cpu: 300m # CPU,1核心 = 1000m
            memory: 500Mi # 内存,1G = 1000Mi
          requests:  # 容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
            cpu: 100m
            memory: 100Mi
        livenessProbe: # pod 内部健康检查的设置
          httpGet: # 通过httpget检查健康,返回200-399之间,则认为容器正常
            path: /healthCheck # URI地址
            port: 8080 # 端口
            scheme: HTTP # 协议
            # host: 127.0.0.1 # 主机地址
          initialDelaySeconds: 30 # 表明第一次检测在容器启动后多长时间后开始
          timeoutSeconds: 5 # 检测的超时时间
          periodSeconds: 30 # 检查间隔时间
          successThreshold: 1 # 成功门槛
          failureThreshold: 5 # 失败门槛,连接失败5次,pod杀掉,重启一个新的pod
        readinessProbe: # Pod 准备服务健康检查设置
          httpGet:
            path: /healthCheck
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 30
          timeoutSeconds: 5
          periodSeconds: 10
          successThreshold: 1
          failureThreshold: 5
        #也可以用这种方法   
        #exec: 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常   
        #  command:   
        #    - cat   
        #    - /tmp/health   
        #也可以用这种方法   
        #tcpSocket: # 通过tcpSocket检查健康  
        #  port: number 
        ports:
          - name: http # 名称
            containerPort: 8080 # 容器开发对外的端口 
            protocol: TCP # 协议
      imagePullSecrets: # 镜像仓库拉取密钥
        - name: harbor-certification
      affinity: # 亲和性调试
        nodeAffinity: # 节点亲和力
          requiredDuringSchedulingIgnoredDuringExecution: # pod 必须部署到满足条件的节点上
            nodeSelectorTerms: # 节点满足任何一个条件就可以
            - matchExpressions: # 有多个选项,则只有同时满足这些逻辑选项的节点才能运行 pod
              - key: beta.kubernetes.io/arch
                operator: In
                values:
                - amd64

Service.yaml名词解释

apiVersion: v1 # 指定api版本,此值必须在kubectl api-versions中 
kind: Service # 指定创建资源的角色/类型 
metadata: # 资源的元数据/属性
  name: demo # 资源的名字,在同一个namespace中必须唯一
  namespace: default # 部署在哪个namespace中
  labels: # 设定资源的标签
    app: demo
spec: # 资源规范字段
  type: ClusterIP # ClusterIP 类型
  ports:
    - port: 8080 # service 端口
      targetPort: http # 容器暴露的端口
      protocol: TCP # 协议
      name: http # 端口名称
  selector: # 选择器
    app: demo

 pod.yaml名词解释

# yaml格式的pod定义文件完整内容:
apiVersion: v1     #必选,版本号,例如v1
kind: Pod       #必选,Pod
metadata:        #必选,元数据
  name: string       #必选,Pod名称
  namespace: string     #必选,Pod所属的命名空间
  labels:      #自定义标签
    - name: string   #自定义标签名字
  annotations:       #自定义注释列表
    - name: string
spec:         #必选,Pod中容器的详细定义
  containers:    #必选,Pod中容器列表
  - name: string     #必选,容器名称
    image: string    #必选,容器的镜像名称
    imagePullPolicy: [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
    command: [string]    #容器的启动命令列表,如不指定,使用打包时使用的启动命令
    args: [string]     #容器的启动命令参数列表
    workingDir: string   #容器的工作目录
    volumeMounts:        #挂载到容器内部的存储卷配置
    - name: string     #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
      mountPath: string    #存储卷在容器内mount的绝对路径,应少于512字符
      readOnly: boolean    #是否为只读模式
    ports:       #需要暴露的端口库号列表
    - name: string     #端口号名称
      containerPort: int  #容器需要监听的端口号
      hostPort: int    #容器所在主机需要监听的端口号,默认与Container相同
      protocol: string     #端口协议,支持TCP和UDP,默认TCP
    env:       #容器运行前需设置的环境变量列表
    - name: string     #环境变量名称
      value: string    #环境变量的值
    resources:       #资源限制和请求的设置
      limits:      #资源限制的设置
        cpu: string    #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
        memory: string   #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
      requests:         #资源请求的设置
        cpu: string    #Cpu请求,容器启动的初始可用数量
        memory: string   #内存清楚,容器启动的初始可用数量
    livenessProbe:     #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
      exec:      #对Pod容器内检查方式设置为exec方式
        command: [string]  #exec方式需要制定的命令或脚本
      httpGet:       #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
        path: string
        port: number
        host: string
        scheme: string
        HttpHeaders:
        - name: string
          value: string
      tcpSocket:     #对Pod内个容器健康检查方式设置为tcpSocket方式
         port: number
       initialDelaySeconds: 0  #容器启动完成后首次探测的时间,单位为秒
       timeoutSeconds: 0   #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
       periodSeconds: 0    #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
       successThreshold: 0
       failureThreshold: 0
       securityContext:
         privileged:false
    restartPolicy: [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
    nodeSelector: obeject  #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
    imagePullSecrets:    #Pull镜像时使用的secret名称,以key:secretkey格式指定
    - name: string
    hostNetwork:false      #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
    volumes:       #在该pod上定义共享存储卷列表
    - name: string     #共享存储卷名称 (volumes类型有很多种)
      emptyDir: {}     #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
      hostPath: string     #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
        path: string     #Pod所在宿主机的目录,将被用于同期中mount的目录
      secret:      #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
        scretname: string  
        items:     
        - key: string
          path: string
      configMap:     #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
        name: string
        items:
        - key: string
          path: string

参考文献:

http://docs.kubernetes.org.cn/126.html

https://blog.csdn.net/random_w/article/details/80612881

https://www.jianshu.com/p/99800eb305bf

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

minikube搭建kubernetes 的相关文章

随机推荐

  • 树莓派学习(二):更换镜像源以及安装虚拟环境miniforge3

    树莓派学习 xff08 二 xff09 xff1a 更换镜像源以及安装pytorch 步骤一 xff1a 更换镜像源步骤二 xff1a 下载前的准备2 1 原来numpy库的卸载 步骤三 xff1a 安装miniforge3 步骤一 xff
  • 3.1 python版MapReduce基础实战

    输入文件在你每次点击评测的时候 xff0c 平台会为你创建 xff0c 无需你自己创建 xff0c 只需要启动HDFS xff0c 编写python代码即可 第1关 xff1a 成绩统计 mapper py usr bin python3
  • 怎么获取li里面的内容

    获取li的内容 span class token tag span class token tag span class token punctuation lt span ul span span class token punctuat
  • 偏移量的概念

    span class token selector span span class token punctuation span span class token property padding span span class token
  • js中的二级联动

    省份市级城市联动 span class token doctype lt DOCTYPE html gt span span class token tag span class token tag span class token pun
  • 页面跳转的几种方法

    location对象 href assgin跳转到另一个页面可以返回到原来的页面 location span class token punctuation span href span class token operator 61 sp
  • 学习JS基础部分一

    数据类型 分支结构 循环结构 数据类型 简单数据类默认值Number0BooleanfalseString Undefinedundefinednullnull 复杂数据类型默认值Array Object 分支结构 分支语句说明if 条件
  • 来,带你见识一下CT三维重建

    文 xff1a 北京协和医院放射科孙昊 来源 xff1a 从医开始 xff0c 协和八的奇妙临床笔记 相信各位同学在临床工作中 xff0c 已经接触到很多CT三维重建的图像了 xff0c 那么CT三维重建到底是个啥东东 xff1f 这个问题
  • 数组常用方法

    concat span class token keyword let span arr1 span class token operator 61 span span class token punctuation span span c
  • 深拷贝和浅拷贝

    浅拷贝和深拷贝的区别 浅拷贝是复制原数据的数据内容 xff0c 引用原数据的地址 xff1b 当改变复制之后的数据时 xff0c 原数据的数据内容也会被改变 xff0c 因为这是引用原来数据的地址 xff0c 改变的是原数据地址的数据内容
  • Set集合和Map集合

    Set集合 用于存放不重复的数据 xff0c 通过构造函数的形式 参数必须是一个可迭代对象 创建Set对象 span class token keyword const span s1 span class token operator 6
  • js树型结构处理

    span class token comment 获取树形结构并处理 span span class token comment 当child为null时处理 span span class token comment 如果是childre
  • 姿态旋转与坐标变换

    姿态旋转与坐标变换 旋转还是变换 xff1f 坐标旋转 变换矩阵 xff08 Rotation Matrix xff09 等效旋转矢量 xff08 Axis Angle xff09 罗德里格斯公式 xff08 Rodrigues 39 s
  • Gitlab

    Gitlab Gitlab介绍 我们了解了git是以个人为中心 xff0c 但是人人都得数据交互呀 python程序员每天都忙着进行py交易 交互数据的方式 使用github或者码云等公有代码仓库 xff0c 托管代码的地方 xff0c 谁
  • word论文排版和写作04:用MathType和word公式编辑器插入数学公式

    写在前面 插入公式在论文写作中是一个常见的操作 xff0c 本文作为补充 xff0c 主要介绍如何规范和方便地在word中插入公式 主要的方式有两种 xff0c 一种是使用MathType xff0c 一种是使用word自带的公式编辑器 关
  • Jetson Nano ros melodic+realsense+aruco

    一 realsense SDK和realsense ros安装 参考链接 xff1a Ubuntu18 04 43 ROS melodic 安装使用 RealSenseD435i Lynn mg的博客 CSDN博客 ubuntu18安装re
  • ROS同步订阅realsense的彩色图和深度图(python实现)

    首先要保证realsense ros功能包的正常使用 xff0c 具体安装使用如下 xff1a Jetson Nano ros melodic 43 realsense 43 aruco 杰杰 xff01 的博客 CSDN博客 1 创建订阅
  • 用opencv的aruco库生成二维码marker标记

    用opencv的aruco库生成二维码marker标记 代码来源于官方提供的完整的工作实例create marker cpp 在opencv源码中的位置为opencv contrib 4 4 0 modules aruco samples
  • 树莓派上手实战之SSH下配置VNC服务器实现远程桌面(可以实现开机自启动vncserver)

    VNC是linux下面常用的远程桌面 xff0c 用它可以在windows或者unix主机上方便的通过网络操作远程主机而不需要一个额外的显示器 xff0c 非常实用 这篇教程将会详细讲解安装配置VNC服务器开启远程桌面服务的全部过程 首先
  • minikube搭建kubernetes

    系统环境 deepin15 11 安装virtualbox虚拟机 xff1a 应用商店就有安装minikube aizhao 64 aizhao hellonode curl Lo minikube https storage google