美文网首页
2021-04-25周日

2021-04-25周日

作者: 文茶君 | 来源:发表于2021-04-25 22:47 被阅读0次

    RBAC
    基于角色的访问控制
    角色绑定
    角色
    :role :特定命名空间访问权限
    clusterrole:所有命名空间访问权限
    角色绑定:
    roleBinding:角色绑定到主体
    ClusterRoleBinding:集群角色绑定到主体
    主体:
    user:用户
    group:用户组
    serviceAcount:服务账号

    创建命名空间
    kubectl create ns roledemo
    在新创建的命名空间创建pod
    kubectl run nginx --image=nginx -n roledemo
    kubectl get pods -n roledemo
    第三步
    创建角色
    vi rbac-role.yaml
    定义结构如下

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      namespace: mynamespace
      name: example-role
    rules:
    - apiGroups: [""]
      resources: ["pods"]
      verbs: ["get", "watch", "list"]
    

    kubectl apply -f rbac-role.yaml
    kubetcl get role -n roledemo
    4创建角色绑定
    ps:metadata可以改

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: example-rolebinding
      namespace: mynamespace
    subjects:
    - kind: User
      name: example-user
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: example-role
      apiGroup: rbac.authorization.k8s.io
    

    kubectl apply -f rbac-rolebinding.yaml
    kubetcl get role.rolebinding -n roledemo
    使用证书识别身份------略

    ingress

    1.把端口号对外暴露,通过ip+端口号进行访问
    使用Service里面的NodePort实现
    2.NodePort缺陷
    在每个节点上都会起到端口,在访问时候通过任何节点,都会节点ip+暴露端口号访问
    意味着每个端口只能使用一次,一个端口对应一个应用
    实际访问中都使用域名,根据不同域名跳转到不同端口服务中

    Ingress和Pod关系
    Pod和ingress通过service关联的
    Ingress作为统一入口,由service关联一组pod

    ingress工作流程

    5.如何使用igress
    第一步部署ingress Controller

    第二步创建ingress规则
    这里选择官方维护nginx控制器,实现部署
    6使用ingress对外暴露应用
    (1)创建nginx应用,对外暴露端口使用NodePort
    kubectl create deployment web --image=nginx
    kubectl get deploy
    暴露端口
    kubectl expose deployment web --port=80 --target-port=80 --type=NodePort
    (2)部署ingress contronller
    这个参考ingress-controller.yaml文件
    注意将hostNetwork变为true
    vi ingress-con.yaml
    kubectl apply -f ingress-con.yaml

    查看igress controller状态
    kubectl get pods -n ingress-nginx
    (3)创建ingress规则
    vi ingress-h.yaml
    kubectl apply -f ingress-h.yaml
    kubectl get pods -n ingress-nginx -o wide

    查看端口信息 netstat -antp|grep 80

    (4)在window系统host文件中添加域名访问规则(限虚拟机)

    核心技术Helm

    1.引入:

    (1)之前部署应用过程
    编写yaml文件
    deployment
    对外暴露端口 service
    ingress
    如果使用之前方式部署单一应用,少数服务的应用,比较合适
    比如部署微服务项目,可能有几十个服务,每个服务都有一套yaml问剑,需要维护大量yaml文件,版本管理特别不方便

    使用helm可以解决哪些问题
    (1)使用helm可以把yaml作为一个整体管理
    (2)实现yaml文件高效复用
    (3)使用helm应用级别的版本管理

    2.helm介绍
    helm是kubernetes的包管理工具,就像linux下的包管理工具,如yum、apt等,可以很方便的将之前打包好的yaml文件部署到kubernetes上

    (1)helm
    是一个命令行客户端工具,
    (2)chart
    把yaml打包,是yaml的集合
    (3)release
    基于chart部署实体,应用级别的版本管理

    helm在2019年发布v3版本
    V3版本删除Tiller
    release可以在不同命名空间重用
    将chart推送到docker中
    架构也变化了
    V3之前版本
    helm chart---->(tiller---->kube-apiserver-->操作deployment、service、ingress)括号内指在kubernetes中
    v3
    helm chart---->kube-config---->(kube-apiserver--操作deployment、service、ingress)括号内指在kubernetes中
    helm安装(kubesphere已安装)
    1下载helm安装压缩文件,上传到linux系统中
    2.解压helm压缩文件,把解压之后helm目录复制到usr/bin目录下

    2.配置helm仓库
    (1)添加仓库
    helm repo add 仓库名称 仓库地址
    (2 )helm repo list 查看仓库地址
    helm repo remove 仓库名

    查找 helm search CHARTNAME
    检查 helm inspect CHARTNAME
    安装 helm install --name mem1 stable/memcached
    获取状态信息 helm status mem1
    列出 helm list [-a]
    删除 helm delete [--purge] mem1
    下载 helm fetch stable/redis
    创建 helm create CHARTNAME
    语法检测 helm lint CHARTNAME
    打包 helm package CHARTNAME
    显示状态 helm status NAME

    helm list --namespace kubesphere-logging-system
    NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
    elasticsearch-logging kubesphere-logging-system 1 2021-04-21 10:14:25.840834177 +0800 CST deployed elasticsearch-1.22.1 6.7.0-0217
    elasticsearch-logging-curator kubesphere-logging-system 1 2021-04-21 10:14:27.742082055 +0800 CST deployed elasticsearch-curator-1.3.5.5.4-0217
    logsidecar-injector kubesphere-logging-system 1 2021-04-21 10:15:29.765998991 +0800 CST deployed logsidecar-injector-0.1.0 0.1.0

    helm repo list
    Error: no repositories to show /我们当前是没有自己的仓库的
    kubernetes进阶 -- helm包管理工具https://blog.csdn.net/thermal_life/article/details/107283328

    更新操作
    helm repo update
    删除操作
    helm repo remove XXX

    helm search hub fluent会搜索仓库

    3.使用helm快速部署应用
    第一步使用命令应用
    helm search repo 名称
    第二步根据搜索内容选择安装
    helm install 安装之后名称 搜索之后应用名称
    查看安装之后状态
    helm list
    helm status 安装之后名称

    修改service的yaml文件,对外暴露端口
    kubectl edit svc xxxxx

    如何自己创建Chart
    1.使用命令创建chart
    helm create chart
    chart.yaml 当前chart属性配置信息
    templates:编写yaml文件放到这个目录中
    values.yaml:yaml文件可以使用全局变量
    2.在templates文件夹创建两个yaml文件
    deployment.yaml
    service.yaml

    kubectl create deployment web --image=nginx --dry-run -o yaml>deployment.yaml
    kubectl expose deployment web1 --port=80 --target-port=80 --type=NodePort -dry-run -o yaml >service.yaml

    安装mychart
    helm installer web1 mychart/

    4.应用升级
    helm upgrade chart名称

    实现yaml高效复用
    通过传递参数,动态渲染模板,yaml内容动态传入参数生成
    values.yaml文件
    在chart有values.yaml文件,定义yaml文件全局变量
    1.在values.yaml定义变量和值
    2.在具体yaml文件,获取定义和变量值

    yaml文件中大体有几个地方不同
    imag
    tag
    label
    port
    replicas

    在values.yaml中定义值
    在templates的yaml文件使用values.yaml定义变量
    通过表达式形式使用全局变量
    {{.Values.变量名称}}
    {{.Release.Name}}
    helm install --dry-run web2 mychart/

    查看 kubectl get pods

    持久存储

    数据卷 emptydir,是本地存储,pod重启,数据不存在了,需要对数据持久化存储
    1.nfs 网络存储 pod重启,数据还存在
    找一台服务器nfs服务端,安装nfs,设置挂载路径,挂载路径需要创建
    在k8s集群node节点安装nfs
    在nfs服务器启动nfs服务
    查看进程 ps -ef |grep nfs
    在k8集群部署应用使用nfs持久网络存储
    进入pod
    kubectl exec -it pod名字 bash

    pv 持久化存储和pvc持久化存储的调用
    pv:对存储资源进行抽象,对外提供可以调用的地方,而内部自己实现(生产者)
    pvc:用于调用,用户不需要关心内部实现细节(消费者)

    实现基本流程

    应用部署---->定义pvc(绑定pv)---->定义pv(存储容量、匹配模式、数据存储服务器ip、路径)

    监控指标和方案
    集群资源监控
    1.监控指标
    *集群监控
    节点资源利用率
    节点数
    运行pods
    *pod监控
    容器指标
    应用程序

    2.监控平台搭建方案
    prometheus+Grafana
    (1)prometheus
    开源
    监控报警数据库
    以HTTP协议周期性抓取被监控组件状态
    不需要复杂的集成过程,使用http接口接入就可以了
    (2)Grafana
    开源的数据分析和可视化工具
    支持多种数据源

    相关文章

      网友评论

          本文标题:2021-04-25周日

          本文链接:https://www.haomeiwen.com/subject/mrxdrltx.html