Win10环境的minikube的kubernetes操作

※本文档适用于下面的参考文档学习及配置后,再进行学习。

参考文档:
1.Windows10 环境下的 Docker
2.Windows 10 Kubernetes(minikube)搭建

官方文档:
学习 Kubernetes 基础知识
Kubernetes核心概念

1.概念一览

  1. Kubernetes Master(Kubernetes主节点)
    集群的主节点机器。
  2. Node(节点)
    集群的节点机器。
  3. Service(svc)(服务)
    多个相同名称的POD副本 使用不同的IP地址,Service提供DNS服务,通过指定的名称对多个POD对象进行软件级负载均衡访问。
  4. Replication Controller(复制控制器)
    使用控制器,可以快速创建指定个数的相同POD副本,并且对已经创建的POD副本进行监听,当POD副本对象不足指定个数或者POD副本不响应,控制器会自动创建POD副本来保证指定个数的相同POD副本可以访问。
  5. Label(label)(标签)
    POD副本进行名称及类型的标记,例如:frontend(前端),backend(后端)
  6. Pod
    多个docker容器和 卷(Volumes) 在同一个POD中,且多个容器见可以使用localhost进行访问。
    Pod是短暂的,卷(Volumes) 是持久的,当创建新的POD副本时,可以快速的从卷中获取数据。
  7. Deployment(部署)
    代替 Replication Controller,Deployment 用来ReplicaSet,用来实现POD扩容,升级,回滚等作业。
  8. ReplicaSet
    用来创建指定个数的POD对象及扩容POD个数,并且监听POD状态,当POD异常时,自动销毁异常POD,并创建新的POD来保持整体的POD副本数目。

2.网络框架

https://www.kubernetes.org.cn/img/2016/10/20161028141542.jpg
1.kubectl是kubernetes的命令行工具,用于创建,查询,删除kubernetes及容器相关的对象。
2.kubelet是用来Pod 管理,容器健康检查 ,容器监控

3.kubectl命令

3.1创建nginx POD对象

创建nginx的deployment对象有两种命令格式
命令格式1:kubectl run -> 该方式已被kubectl create取代

kubectl run nginx --image=nginx
解释:kubectl run 部署对象名称 --image=docker镜像名称
缺省参数:
--port 容器的访问端口号,默认为80,例如:--port=8080
--labels 容器的名称标签,格式app=名称,env=环境,例如:--labels="app=hazelcast,env=prod"
--replicas POD的副本数量,例如:--replicas=5

在这里插入图片描述
命令格式2:kubectl create

kubectl create deployment nginx --image=nginx
解释:kubectl create deployment 部署对象名称 --image=docker镜像名称

在这里插入图片描述

3.2查看 POD对象列表

kubectl get pods

列表中NAME字段的含义:
当创建多个副本的POD时,docker name的前缀相同
STATUS字段的含义:
ImagePullBackOff :镜像无法下载
解决方案参考2.Windows 10 Kubernetes(minikube)搭建 中的 3.14 配置minikube的docker镜像加速
在这里插入图片描述
Running :下载并且启动docker镜像成功
在这里插入图片描述
在minikube的机器中,使用docker ps命令,可以看到nginx服务器正常启动
在这里插入图片描述

3.3查看 deployment 对象创建的配置log

方式1:命令行

 kubectl describe pod nginx
 解释:kubectl describe pod deployment对象的名称

在这里插入图片描述
方式2:浏览器
在kubernetes-dashboard的网页中,也可以看到deployment的对象的信息
在这里插入图片描述

3.4 删除deployment的对象(POD和ReplicaSet)

kubectl delete -n default deployment nginx
解释:kubectl delete -n 命名空间 deployment deployment名称

在这里插入图片描述

3.5 访问POD对象

1.查询当前POD的详细信息,查找到IP地址

kubectl get pod -o wide

在这里插入图片描述
2.登录到minikube服务器中,使用curl命令获取nginx的index文件内容

minikube ssh
$ curl IP地址/index.html

在这里插入图片描述

3.6 扩展POD副本的数量

1.扩展POD副本

kubectl scale deployment nginx --replicas=4
解释:kubectl scale deployment POD名称--replicas=扩展后的POD副本总数量

在这里插入图片描述
2.查看POD副本的状态
在POD状态中可以看到相同POD正在被创建。

kubectl get pod

在这里插入图片描述
3.所有POD副本被创建完成
在这里插入图片描述

3.7 验证ReplicaSet的POD监听

1.关闭多个POD副本中的某一个Docker容器
例如:
副本1:nginx-86c57db685-4k7bn
副本2:nginx-86c57db685-5qmjm
副本3:nginx-86c57db685-6ds9q
副本4:nginx-86c57db685-t7kxf

登录到minikube服务器,关闭副本4(nginx-86c57db685-t7kxf)的docker 对象

minikube ssh
$ docker ps
获取到容器的名称前缀为nginx-86c57db685-t7kxf的容器ID
$ docker stop 容器ID

在这里插入图片描述
2.查询pod的信息
RESTARTS的次数加1,ReplicaSet自动恢复了POD副本

kubectl get pod

在这里插入图片描述
3.删除POD副本

kubectl delete pod nginx-86c57db685-t7kxf
解释:kubectl delete pod POD副本名称

在这里插入图片描述
4.再次查询POD副本
副本4被删除,ReplicaSet自动创建了新的POD副本,保持整体的POD数量

kubectl get pod -o wide

在这里插入图片描述

3.8 创建services(svc),访问POD副本

1.查询pod副本的详细信息

kubectl get pod -o wide

在这里插入图片描述
发现每一个POD副本有独立的IP地址,如果想访问它们,就需要添加负载均衡,并且当添加或者删除POD副本时,POD副本的IP地址会发生变更,需要维护负载均衡。
services是一组提供相同服务的POD副本对外的访问接口,且支持轮播的负载均衡,在添加或者删除POD副本时,自动进行负载均衡设定。
2.创建services
这里只介绍services的2种常用类型
集群内部访问:ClusterIP:使用一个集群固定IP,这个是默认选项
集群外部访问:NodePort:使用一个集群固定IP,并且会暴露一个端口给外部网络进行访问,端口的范围(默认是30000-32767)
ClusterIP模式
1.创建services

kubectl expose deployment nginx --port=31000 --target-port=80
解释:kubectl expose deployment 部署名称 --port=集群内访问的端口号 --target-port=容器的端口号

在这里插入图片描述
2.查询services

kubectl get svc

在这里插入图片描述
3.使用deployment的service的集群IP访问POD副本

1.登录到minikube服务器中
minikube ssh
2.访问nginx的index.html文件
curl 10.97.91.225:31000/index.html

在这里插入图片描述

3.9 删除services(svc)

kubectl delete svc nginx
解释:kubectl delete svc service名称

在这里插入图片描述

3.10 创建NodePort类型的services(svc)

NodePort
方式1:
a.从ClusterIP方式修改为NodePort
修改service的配置

kubectl edit svc nginx
解释:kubectl edit svc service名称

修改前:在这里插入图片描述
修改后:
在这里插入图片描述

b.保存退出
在这里插入图片描述
c.再次查询service

kubectl get svc

TYPE变更成NodePort,并且生成一个外网访问的端口
在这里插入图片描述

d.获取minikube服务器集群的主机IP地址
注:由于切换的hyper-v的虚拟交换机的类型,导致了IP变更
查询minikube服务器的IP地址
方式1:

1.登录minikube服务器
minikube ssh
2.查询IP地址
$ ifconfig

在这里插入图片描述

方式2:

minikube ip

在这里插入图片描述
e.浏览器访问

http://minikube服务器IP:30302

在这里插入图片描述
方式2:

a.创建services,并指定类型为NodePort

kubectl expose deployment nginx --port=32000 --type=NodePort --target-port=80
解释:kubectl expose deployment 部署名称 --port=集群内访问的端口号 --target-port=容器的端口号

在这里插入图片描述
b.再次查询service

kubectl get svc

在这里插入图片描述
e.浏览器访问

http://minikube服务器IP:30140

在这里插入图片描述

4 资源清单

k8s使用资源清单式进行相关组件的构建,即yaml文件格式配置文件创建POD,service等。

注意:YAML文件中不支持使用tab

获取帮助文档

kubectl explain pod

4.1 公共配置

apiVersion: v1  #kubernetes的API版本号
kind: <string> #资源类型 例如Pod,service
metadata: <Object> #元数据,资源的主要信息,例如命名,所在空间等
  name: <string> #资源名称 例如Pod名称
  namespace: <string> #资源所属命名空间 如Pod的默认值 default
  labels: <map[string]string> #标签列表 资源类型添加标签
    key1: value1  #例如 version: v1
    key2: value2  #例如 app: myfirstnginxapp

4.2 Pod类型配置的spec设定

spec: <Object> #必选,期望的状态
  containers: <[]Object> -required- #pod中的容器列表,可以有多个容器
  - name: <string> -required- #容器名称
    image: <string> -required- #容器的镜像名称及版本号,例如
    imagePullPolicy: <string>  #获取镜像的策略(Always, Never, IfNotPresent)
    #1.Alawys表示总是下载镜像 
    #2.IfnotPresent表示优先使用本地镜像,如果本地不存在,则下载镜像 
    #3.Nerver表示仅使用本地镜像,如果不存在,不进行下载。
    #注:默认策略为IfNotPresent,当版本号为lastest,则策略为Always
    command: <[]string> #容器的启动命令列表

4.2.1 使用资源文件-创建Pod

1.创建Deployment对象

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  namespace: default
  labels:
    app: k8s-nginx
spec:
  replicas: 2            #生成复本数量为2
  selector:
    matchLabels:
      app: k8s-nginx
  template:
    metadata:
      labels:
        app: k8s-nginx
      annotations: #用于选择对象并查找满足某些条件的对象集合 Annotations不会被Kubernetes直接使用,其主要目的是方便用户阅读查找
        app: nginx-clouster
    spec:
      containers:
      - name: nginx
        image: docker.io/nginx
        livenessProbe:       #livenessProbe(可用性/存活探针) 对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可,另一种探针 
                             #readiness probe(就绪探针)就绪探针的作用是控制哪些pod可以作为svc的后端,如果pod不是就绪状态,就把它从svc load balancer中移除.
            httpGet:         #通过httpget检查健康,返回200-399之间,则认为容器正常
              path: /        #URI地址
              port: 80       #端口号
              #host: 127.0.0.1 #主机地址
              scheme: HTTP  #支持的协议,http或者https
            initialDelaySeconds: 5  #容器启动后第一次执行探测是需要等待多少秒。
            timeoutSeconds: 1   #探测超时时间。默认1秒,最小1秒。
        imagePullPolicy: IfNotPresent  #[Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
        resources: #资源限制和请求的设置
            limits:
              cpu: 1 #CPU最大限制
              memory: 3000Mi  #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
            requests:
              cpu: 0.2  #Cpu请求,容器启动的初始可用数量,副本个数*cpu的总数量不可超过kubernetes安装时系统设定的上限
              memory: 100Mi   #内存请求,容器启动的初始可用数量
        ports:
        -    containerPort: 80   #容器需要监听的端口号

2.创建Service对象

apiVersion: v1
kind: Service
metadata:
  labels:
    run: nginx
  name: nginx
  namespace: default
spec:
  type: NodePort
  ports:
  - port: 88  #这里的端口和clusterIP对应,即clusterIP:80,供内部访问。
    targetPort: 80 #端口一定要和container暴露出来的端口对应,nginx暴露出来的端口是8081,所以这里也应是8081
    protocol: TCP
    nodePort: 30060   # 所有的节点都会开放此端口,此端口供外部调用。有效范围30000-32767
  selector:
    app: k8s-nginx

查询pod状态

kubectl get pods -o wide

在这里插入图片描述
浏览器访问

http://minikube服务器IP:30060

在这里插入图片描述
3.查看POD日志

 kubectl logs Deployment的POD对象

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章