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
开源的数据分析和可视化工具
支持多种数据源