Spring Cloud: Kubernetes部署管理 (一)k8s基础

杀马特。学长 韩版系。学妹 提交于 2020-07-28 10:18:27

安装Kubernetes

安装kubectl

https://kubernetes.io/docs/tasks/tools/install-kubectl/

这里以linux为例

1. 下载最先版本

curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl

2. 给可执行权限

chmod +x ./kubectl

3. 移动到bin中

sudo mv ./kubectl /usr/local/bin/kubectl

4. 检查是否安装成功

kubectl version --client

在这里插入图片描述

安装Minikube

为了方便大家学习,kubernetes提供了Minikube版本,可以在本地进行安装

https://kubernetes.io/docs/tasks/tools/install-minikube/

按照官网指示安装:

1.下载独立的二进制文件并使用:

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
  && chmod +x minikube

2.将Minikube启动文件添加到路径:

sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/

3.检查是否安装成功

在这里插入图片描述

启动Minikube

使用minikube start命令启动:

在这里插入图片描述
但是出现了问题,官网的解释是,如果没有安装虚拟机的话,可以使用docker的driver通过--driver=none指定:

在这里插入图片描述

通过minikube start --vm-driver=none命令运行:

在这里插入图片描述

提示要root权限安装conntrack,照做就行:

在这里插入图片描述

这回运行成功了,第一次启动的时候会下载安装相关组件:

在这里插入图片描述
下完之后有出现网络问题,使用阿里的源:

minikube start --driver=none --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

在这里插入图片描述

检查minikube安装状态

在这里插入图片描述

dashboard 开启

使用minikube dashboard开启

在这里插入图片描述

访问出现的url出现如下界面,说明minikube已经部署成功:

在这里插入图片描述

基本术语

namespace:Kubernetes使用namespace来划分为多个虚拟集群,可以供不同的团队或业务群组来使用,进行资源等的隔离

Replication Controller:Pod的控制器,用于监控指定条件Pod的实例的状态,并维持其健康个数为指定的副本数量。其主要功能包括确保Pod实例数量、确保Pod健康、弹性伸缩、滚动升级

Pod是kubernetes的最小调度单元,可以看作应用服务的逻辑宿主机,通常可以这样理解—部署几个实例,就是部署几个Pod

replication controller的定义:

  • metadata:定义了元数据,这里定义了name、namespace,以及label。
  • spec.replicas:用于定义所需的副本数量。
  • spec.template:用于定义扩容时创建Pod使用的模板。
  • resources.requests及limits部分:用来定义请求的cpu及内存资源大小及其上限,这里cpu为100m,可以大致理解为0.1个cpu, memory为256Mi,表示256M的内存。
  • env部分:用于定义启动Docker实例时的环境变量,这里我们定义了PROFILE、SERVER_PORT以及JAVA_OPTS这几个环境变量。
  • ports部分:定义了容器里头的端口名称及端口号。

Service:为一组提供相同服务的Pod提供对外访问,具备一定Pod的服务发现、路由的能力

Label:用来关联Pod及Service,每个Pod可以定义Label,然后Service可以通过Label去选择服务哪些Pod

Deployment:Replication Controller的升级版,对Deployment进行了更细展示及控制,如可以查看升级的详细进度及状态,对每次Deployment进行版本管理,方便回滚,也可以对升级行为进行暂停及继续

配置redis:

mkdir redis-k8s 创建一个文件夹

创建一个redis-config文件,用来存放redis的启动配置:

requirepass 123zxc

stop-writes-on-bgsave-error no
rdbcompression no
dbfilename dump.rdb

appendonly yes
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

dir /data/

创建redis-dp.yml文件配置redis的Deployments实例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  labels: 
    app: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis 
        imagePullPolicy: IfNotPresent   
        command:
        - redis-server
        - "/redis-master/redis.conf"
        ports:
            - containerPort: 6379
        volumeMounts:
        - mountPath: ./redis-master-data
          name: data
        - mountPath: ./redis-master
          name: config
      volumes:
        - name: data
          hostPath: 
            path: /data
            type: DirectoryOrCreate
        - name: config
          configMap:
            name: example-redis-config
            items:
            - key: redis-config
              path: redis.conf

创建kustomization.yml文件通过ConfigMap中的数据来配置Redis

configMapGenerator:
- name: example-redis-config
  files:
  - redis-config
resources:
  - redis-dp.yml

运行 Deployment

应用整个 kustomization 文件夹以创建 ConfigMap 和 Deployment 对象

kubectl apply -k .

通过kubectl get -k .查看对象

在这里插入图片描述

在示例中,配置卷挂载在 /redis-master 下。 它使用 pathredis-config 密钥添加到名为 redis.conf 的文件中。 因此,redis配置的文件路径为 /redis-master/redis.conf

查看有关ReplicaSet的信息:

在这里插入图片描述

volumes的几种模式

emptyDir:

Pod 里面各容器共享存储,Pod 在节点创建就会生成,生命周期随着运行的Pod

            volumes:
            -  name:   xx
               emptyDir:  {}

hostPath:

Pod 挂载节点文件系统到Pod里面,生命周期随Node生命周期

volumes:
	- name: html
      hostPath:
        path: /data/pod/volume1
        type: DirectoryOrCreate

NFS:

Pod随NFS 配置的生命周期,支持网络存储

  volumes:
  - name: nfs-storage
    nfs:
     server: 192.168.20.47
     path: "/data/disk1"

Secret:

Kubemetes提供了Secret来处理敏感数据,本例中的 config 就是用得这个:

运行service

需要运行一个service将deployment中的端口开放出去:

kubectl expose deployment redis --name=redis-service --port=6379

通过kubectl get services redis-service获取service运行情况:

在这里插入图片描述

通过kubectl describe services redis-service获取service详细信息:
在这里插入图片描述

可见公开的ip为10.105.156.45,通过python访问一下:

在这里插入图片描述

访问成功,简单单机redis配置完成。

Dashboard查看

运行minikube dashboard开启dasboard,可以查看详细情况:

在这里插入图片描述

删除Deployment、Service

在这里插入图片描述

yml文件说明

来源:https://www.cnblogs.com/wswang/p/10736766.html

# 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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!