栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

2021-10-09 Kubernetes集群部署

2021-10-09 Kubernetes集群部署

文章目录
  • Kubernetes集群搭建
  • kubectl 常用命令总结
  • kubernetes核心

Kubernetes集群搭建

Kubernetes(简称K8s)是谷歌基于GO语言开源的容器自动化管理工具、持续部署工具。

集群搭建

  • 一键搭建集群: https://github.com/easzlab/kubeasz
  • 手把手一步一步手动搭建集群:https://github.com/opsnull/follow-me-install-kubernetes-cluster
kubectl 常用命令总结
kubectl get cs                          # 查看集群状态
kubectl get nodes                       # 查看集群节点信息
kubectl get ns                          # 查看集群命名空间
kubectl get po -n kube-system			# 查看指定命名空间的Pod
kubectl get svc -n kube-system          # 查看指定命名空间的服务
kubectl get pod  -o wide      # 查看Pod详细信息
kubectl get pod  -o yaml      # 以yaml格式查看Pod详细信息
kubectl logs 					# 查看pod日志
kubectl get pods                        # 查看资源对象,查看所有Pod列表
kubectl get rc,service                  # 查看资源对象,查看rc和service列表
kubectl get po,svc,ep --show-labels    # 查看pod,svc,ep能及标签信息
kubectl get all --all-namespaces        # 查看所有的命名空间

kubectl describe nodes   # 显示Node的详细信息
kubectl describe po       # 显示Pod的详细信息
kubectl describe svc  # 显示Service的详细信息

kubectl scale deployment nginx --replicas 5    # 扩容
kubectl scale deployment nginx --replicas 3    # 缩容
kubectl scale rc nginx --replicas 5    # 扩容
kubectl scale rc nginx --replicas 3    # 缩容
kubectl edit rc nginx				   # 编辑修改RC

kubectl label po  k1=v1                  #为pod设置标签
kubectl label po  k1=v2 --overwrite      #修改pod的标签
kubectl label node ip k1=v1 					   #为node设置标签

kubectl delete po --all              #删除当前命名空间中所有pod

#删除一个系统Service kubernetes,它被删除后会立即被自动重建
kubectl delete all --all   
#删除 rc, 但不级联删除 pod, 使 pod 处于脱管状态         
kubectl delete rc nginx --cascade=false
kubectl delete rs nginx --cascade=false   

kubernetes核心
  • Pod
    Pod是用来封装Docker容器的对象,它具有自己的虚拟环境(端口, 环境变量等),一个Pod可以封装多个Docker容器.

把pod部署到指定的节点服务器

cat < kubia-gpu.yml
apiVersion: v1
kind: Pod
metadata:
  name: kubia-gpu          # pod名
spec:
  nodeSelector:            # 节点选择器,把pod部署到匹配的节点
    gpu: "true"            # 通过标签 gpu=true 来选择匹配的节点
  containers:              # 容器配置
  - image: luksa/kubia     # 镜像
    name: kubia            # 容器名
    imagePullPolicy: Never
EOF

k create -f kubia-gpu.yml   # 使用部署文件创建资源
  • 控制器
  1. RC(ReplicationController) 是用来自动控制Pod部署的工具,它可以自动启停Pod,指定Pod副本的数量对Pod进行自动伸缩,当一个pod宕机,RC可以自动关闭pod,并启动一个新的pod替代它

下面是一个RC的部署文件,设置启动三个kubia容器:

cat < kubia-rc.yml
apiVersion: v1
kind: ReplicationController        # 资源类型
metadata:   
  name: kubia                      # 为RC命名
spec:
  replicas: 3                      # pod副本的数量
  selector:                        # 选择器,用来选择RC管理的pod
    app: kubia                     # 选择标签'app=kubia'的pod,由当前RC进行管理
  template:                        # pod模板,用来创建新的pod
    metadata:
      labels:
        app: kubia                 # 指定pod的标签
    spec:
      containers:                  # 容器配置
      - name: kubia                # 容器名
        image: luksa/kubia         # 镜像
        imagePullPolicy: Never
        ports:
        - containerPort: 8080      # 容器暴露的端口
EOF

k create -f kubia-rc.yml           # 使用部署文件创建资源


2. ReplicaSet 被设计用来替代 ReplicationController,它提供了更丰富的pod选择功能
使用更强大的标签选择器

cat < kubia-replicaset.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: kubia
spec:
  replicas: 4
  selector:
    matchexpressions:       # 表达式匹配选择器
      - key: app            # label 名是 app
        operator: In        # in 运算符
        values:             # label 值列表
          - kubia
          - foo
  template:
    metadata:
      labels:
        app: kubia
    spec:
      containers:
      - name: kubia
        image: luksa/kubia
        imagePullPolicy: Never
EOF

k create -f kubia-replicaset.yml    # 使用部署文件创建资源

可使用的运算符:
In: label与其中一个值匹配
NotIn: label与任何一个值都不匹配
Exists: 包含指定label名称(值任意)
DoesNotExists: 不包含指定的label

  1. DaemonSet 不指定pod数量,它会在每个节点上(包括master)部署一个pod,例如资源监控,kube-proxy等
cat < ssd-monitor-daemonset.yml
apiVersion: apps/v1
kind: DaemonSet                       # 资源类型
metadata:
  name: ssd-monitor                   # DS资源命名
spec:
  selector:
    matchLabels:                      # 标签匹配器
      app: ssd-monitor                # 匹配的标签
  template:
    metadata:
      labels:
        app: ssd-monitor              # 创建pod时,添加标签
    spec:
      containers:                     # 容器配置
        - name: main                  # 容器命名
          image: luksa/ssd-monitor    # 镜像
          imagePullPolicy: Never
EOF

k create -f ssd-monitor-daemonset.yml

也可以在所有选定的节点上部署pod,通过节点的label来选择节点

cat < ssd-monitor-daemonset.yml
apiVersion: apps/v1
kind: DaemonSet                       
metadata:
  name: ssd-monitor                   
spec:
  selector:
    matchLabels:                      
      app: ssd-monitor                
  template:
    metadata:
      labels:
        app: ssd-monitor              
    spec:
      nodeSelector:                   # 节点选择器
        disk: ssd                     # 选择的节点上具有标签: 'disk=ssd'
      containers:                     
        - name: main                  
          image: luksa/ssd-monitor   
          imagePullPolicy: Never
EOF

k create -f ssd-monitor-daemonset.yml
  1. Job 用来运行单个任务,任务结束后自动退出,pod不再重启
    共完成5个pod,并每次可以同时启动两个pod
cat < exporter.yml
apiVersion: batch/v1                 # Job资源在batch/v1版本中提供
kind: Job                            # 资源类型
metadata: 
  name: batch-job                    # 资源命名
spec:
  completions: 5                    # 共完成5个
  parallelism: 2                    # 可以有两个pod同时执行
  template: 
    metadata:
      labels:
        app: batch-job               # pod容器标签
    spec:
      restartPolicy: onFailure       # 任务失败时重启
      containers:
        - name: main                 # 容器名
          image: luksa/batch-job     # 镜像
          imagePullPolicy: Never
EOF

k create -f multi-completion-parallel-batch-job.yml
  1. Cronjob 定时和重复执行的任务
    cron时间表格式:
    "分钟 小时 每月的第几天 月 星期几"
cat < cronjob.yml
apiVersion: batch/v1beta1                # api版本
kind: CronJob                            # 资源类型
metadata:
  name: batch-job-every-fifteen-minutes
spec:
  # 0,15,30,45  - 分钟
  # 第一个*  -  每个小时
  # 第二个*  -  每月的每一天
  # 第三个*  -  每月
  # 第四个*  -  每一周中的每一天
  schedule: "0,15,30,45 * * * *"
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: periodic-batch-job
        spec:
          restartPolicy: onFailure
          containers: 
          - name: main
            image: luksa/batch-job
            imagePullPolicy: Never
EOF

k create -f cronjob.yml

到0,15,30,45分钟时,会创建一个pod

  • Service
    Service 用来对外暴露pod访问,在所有节点服务器上,暴露了20916端口,通过此端口,可以访问指定pod的8080端口(对多个pod提供一个不变的访问地址)

在每个节点(包括master),都开放一个相同的端口,可以通过任意节点的端口来访问Service

cat < kubia-svc-nodeport.yml
apiVersion: v1
kind: Service
metadata:
  name: kubia-nodeport
spec:
  type: NodePort           # 在每个节点上开放访问端口
  ports:
  - port: 80               # 集群内部访问该服务的端口
    targetPort: 8080       # 容器的端口
    nodePort: 30123        # 外部访问端口
  selector:
    app: kubia			   # 通过标签,选择名为kubia的所有pod
EOF

k create -f kubia-svc-nodeport.yml

endpoint是在Service和pod之间的一种资源,一个endpoint资源包含一组pod的地址列表
访问Service,Service会在多个pod中轮训发送请求
回话亲和性:来自同一个客户端的请求,总是发给同一个pod

cat < kubia-svc-clientip.yml
apiVersion: v1
kind: Service
metadata:
  name: kubia-clientip
spec:
  sessionAffinity: ClientIP        # 回话亲和性使用ClientIP
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: kubia
EOF

k create -f kubia-svc-clientip.yml
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/308021.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号