k8s Dashboard 仪表盘
一、 查看 Dashboard 部署信息
1 查看pod
kubectl get po -n kube-system
# -n 指命名空间
2 查看service
kubectl get svc -n kube-system
https协议访问,映射的端口号30042访问 https://192.168.64.191:30042/
3 获取令牌token
# 获取 Bearer Token,复制输出中 ‘token:’ 开头那一行
k -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
4 查看集群信息
[root@localhost ~]# k cluster-info | grep dashboard
kubernetes-dashboard is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
二、创建RC
apiVersion: v1
kind: ReplicationController # 资源类型
metadata: name: kubia # 为RC命名
spec:replicas: 3 # pod副本的数量selector: # 选择器,用来选择RC管理的podapp: kubia # 选择标签'app=kubia'的pod,由当前RC进行管理template: # pod模板,用来创建新的podmetadata:labels:app: kubia # 指定pod的标签spec:containers: # 容器配置- name: kubia # 容器名image: luksa/kubia # 镜像imagePullPolicy: Neverports:- containerPort: 8080 # 容器暴露的端口
给容器添加标签 kubectl label po kubia-bg6mzl type=special
编辑控制器模板,已经启动的容器不会应用新的配置,新创建的容器才会应用新的配置 kubectl edit rc kubia
测试可将分片的数量增加,就会新创建一个容器,应用新的配置,有新的标签
三、ReplicaSet
ReplicaSet 是 ReplicationController的增强版,有更多的选择器功能
cat <<EOF > kubia-replicaset.yml
apiVersion: apps/v1 # RS 是 apps/v1中提供的资源类型
kind: ReplicaSet # 资源类型
metadata:name: kubia # RS 命名为 kubia
spec:replicas: 3 # pod 副本数量selector:matchLabels: # 使用 label 选择器app: kubia # 选取标签是 "app=kubia" 的podtemplate:metadata:labels:app: kubia # 为创建的pod添加标签 "app=kubia"spec:containers:- name: kubia # 容器名image: luksa/kubia # 镜像imagePullPolicy: Never
EOF
创建 ReplicaSet
k create -f kubia-replicaset.yml# 之前脱离管理的pod被RS管理
# 设置的pod数量是3,多出的pod会被关闭
k get rs
----------------------------------------
NAME DESIRED CURRENT READY AGE
kubia 3 3 3 4s# 多出的3个pod会被关闭
k get pods --show-labels
----------------------------------------------------------------------
NAME READY STATUS RESTARTS AGE LABELS
kubia-8d9jj 1/1 Pending 0 2m23s app=kubia,foo=bar
kubia-lc5qv 1/1 Terminating 0 3d5h app=kubia
kubia-lhj4q 1/1 Terminating 0 2d22h app=kubia
kubia-pjs9n 1/1 Running 0 3d5h app=kubia
kubia-wb8sv 1/1 Pending 0 2m17s app=kubia,foo=bar
kubia-xp4jv 1/1 Terminating 0 2m17s app=kubia,foo=bar# 查看RS描述, 与RC几乎相同
k describe rs kubia
使用更强大的标签选择器
cat <<EOF > kubia-replicaset.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:name: kubia
spec:replicas: 4selector:matchExpressions: # 表达式匹配选择器- key: app # label 名是 appoperator: In # in 运算符values: # label 值列表- kubia- footemplate:metadata:labels:app: kubiaspec:containers:- name: kubiaimage: luksa/kubiaimagePullPolicy: Never
EOF
# 先删除现有 RS
k delete rs kubia --cascade=false
或
kubectl delete rs kubia --cascade=orphan #--cascade=orphan指不级联删除容器# 再创建 RS
k create -f kubia-replicaset.yml# 查看rs
k get rs
# 查看pod
k get po --show-labels
可使用的运算符:
In
: label与其中一个值匹配NotIn
: label与任何一个值都不匹配Exists
: 包含指定label名称(值任意)DoesNotExists
: 不包含指定的label
清理
k delete rs kubiak get rs
k get po
四、DaemonSet
在每个节点上运行一个 pod,例如资源监控,kube-proxy等,
DaemonSet不指定pod数量,它会在每个节点上部署一个pod
cat <<EOF > 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
创建 DS
DS 创建后,会在所有节点上创建pod,包括master
k create -f ssd-monitor-daemonset.ymlk get po -o wide
-------------------------------------------------------------------------------------------------------------------------
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ssd-monitor-g7fjb 1/1 Running 0 57m 172.20.1.12 192.168.64.192 <none> <none>
ssd-monitor-qk6t5 1/1 Running 0 57m 172.20.2.14 192.168.64.193 <none> <none>
ssd-monitor-xxbq8 1/1 Running 0 57m 172.20.0.2 192.168.64.191 <none> <none>
可以在所有选定的节点上部署pod
通过节点的label来选择节点
cat <<EOF > 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 delete ds ssd-monitor
# 再重新创建
k create -f ssd-monitor-daemonset.yml
查看 DS 和 pod, 看到并没有创建pod,这是因为不存在具有disk=ssd标签的节点
k get dsk get po
为节点’192.168.64.191’设置标签 disk=ssd kubectl label no 192.168.64.191 disk=ssd
这样 DS 会在该节点上立即创建 pod
删除’192.168.64.192’节点上的disk标签,kubectl label no 192.168.64.192 disk-
那么该节点中部署的pod会被立即销毁
五、Job
Job 用来运行单个任务,任务结束后pod不再重启
cat <<EOF > exporter.yml
apiVersion: batch/v1 # Job资源在batch/v1版本中提供
kind: Job # 资源类型
metadata: name: batch-job # 资源命名
spec:template: metadata:labels:app: batch-job # pod容器标签spec:restartPolicy: OnFailure # 任务失败时重启containers:- name: main # 容器名image: luksa/batch-job # 镜像imagePullPolicy: Never
EOF
创建 job
镜像 batch-job 中的进程,运行120秒后会自动退出
k create -f exporter.ymlk get job
-----------------------------------------
NAME COMPLETIONS DURATION AGE
batch-job 0/1 7sk get po
-------------------------------------------------------------
NAME READY STATUS RESTARTS AGE
batch-job-q97zf 0/1 ContainerCreating 0 7s
使用Job让pod连续运行5次
先创建第一个pod,等第一个完成后后,再创建第二个pod,以此类推,共顺序完成5个pod
cat <<EOF > multi-completion-batch-job.yml
apiVersion: batch/v1
kind: Job
metadata: name: multi-completion-batch-job
spec:completions: 5 # 指定完整的数量template: metadata:labels:app: batch-jobspec:restartPolicy: OnFailurecontainers:- name: mainimage: luksa/batch-jobimagePullPolicy: Never
EOF
共完成5个pod,并每次可以同时启动两个pod
cat <<EOF > multi-completion-parallel-batch-job.yml
apiVersion: batch/v1
kind: Job
metadata: name: multi-completion-parallel-batch-job
spec:completions: 5 # 共完成5个parallelism: 2 # 可以有两个pod同时执行template: metadata:labels:app: batch-jobspec:restartPolicy: OnFailurecontainers:- name: mainimage: luksa/batch-jobimagePullPolicy: Never
EOF
六、Cronjob
定时和重复执行的任务
cron时间表格式: "分钟 小时 每月的第几天 月 星期几"
cat <<EOF > 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-jobspec:restartPolicy: OnFailurecontainers: - name: mainimage: luksa/batch-jobimagePullPolicy: Never
EOF
创建cronjob
k create -f cronjob.yml# 立即查看 cronjob,此时还没有创建pod
k get cj
----------------------------------------------------------------------------------------------
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
batch-job-every-fifteen-minutes 0,15,30,45 * * * * False 1 27s 2m17s# 到0,15,30,45分钟时,会创建一个pod
k get po
--------------------------------------------------------------------------------------
NAME READY STATUS RESTARTS AGE
batch-job-every-fifteen-minutes-1567649700-vlmdw 1/1 Running 0 36s
七、Service
通过Service资源,为多个pod提供一个单一不变的接入地址
cat <<EOF > kubia-svc.yml
apiVersion: v1
kind: Service # 资源类型
metadata:name: kubia # 资源命名
spec:ports:- port: 80 # Service向外暴露的端口targetPort: 8080 # 容器的端口selector:app: kubia # 通过标签,选择名为kubia的所有pod
EOF
如果没有pod具有app:kubia标签,可以创建前面的ReplicaSet资源,并让RS自动创建pod
k create -f kubia-replicaset.yml
[root@localhost ~]# k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.68.0.1 <none> 443/TCP 12m
kubia ClusterIP 10.68.253.97 <none> 80/TCP 3m26s
从内部网络访问Service,执行 curl http://10.68.253.97
执行多次会看到,Service会在多个pod中轮训发送请求
[root@localhost ~]# curl http://10.68.253.97
You've hit kubia-xk9nd
[root@localhost ~]# curl http://10.68.253.97
You've hit kubia-p4s8w
[root@localhost ~]# curl http://10.68.253.97
You've hit kubia-xk9nd
[root@localhost ~]# curl http://10.68.253.97
You've hit kubia-hm4fl
Endpoints
endpoint是在Service和pod之间的一种资源
一个endpoint资源,包含一组pod的地址列表
**Endpoints
**查看 k get ep
service描述信息查看,执行 k describe svc kubia
也有Endpoints
[root@localhost ~]# k describe svc kubia
Name: kubia
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=kubia
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.68.253.97
IPs: 10.68.253.97
Port: <unset> 80/TCP
TargetPort: 8080/TCP
Endpoints: 172.20.1.2:8080,172.20.2.2:8080,172.20.2.3:8080
Session Affinity: None
Events: <none>
会话亲和性
来自同一个客户端的请求,总是发给同一个pod
cat <<EOF > kubia-svc-clientip.yml
apiVersion: v1
kind: Service
metadata:name: kubia-clientip
spec:sessionAffinity: ClientIP # 回话亲和性使用ClientIPports:- port: 80targetPort: 8080selector:app: kubia
EOF
[root@localhost ~]# k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.68.0.1 <none> 443/TCP 18h
kubia ClusterIP 10.68.253.97 <none> 80/TCP 18h
kubia-clientip ClusterIP 10.68.136.118 <none> 80/TCP 75s# 执行多次会看到,每次请求的都是同一个pod
[root@localhost ~]# curl http://10.68.136.118
You've hit kubia-hm4fl
[root@localhost ~]# curl http://10.68.136.118
You've hit kubia-hm4fl
[root@localhost ~]# curl http://10.68.136.118
You've hit kubia-hm4fl
不含pod选择器的服务,不会创建 endpoint
cat <<EOF > external-service.yml
apiVersion: v1
kind: Service
metadata:name: external-service # Service命名
spec:ports:- port: 80
EOF
# 创建没有选择器的 Service,不会创建Endpoint
k create -f external-service.yml# 查看Service
k get svc# 通过内部网络ip访问Service,没有Endpoint地址列表,没有任何的转发地址,会拒绝连接
curl http://10.68.56.187
创建endpoint关联到Service,它的名字必须与Service同名
cat <<EOF > external-service-endpoints.yml
apiVersion: v1
kind: Endpoints # 资源类型
metadata:name: external-service # 名称要与Service名相匹配
subsets:
- addresses: # 包含的地址列表- ip: 120.52.99.224 # 中国联通的ip地址- ip: 117.136.190.162 # 中国移动的ip地址ports:- port: 80 # 目标服务的的端口
EOF
# 创建Endpoint
k create -f external-service-endpoints.yml
在访问 curl http://10.68.56.187
发现会在联通和移动两个地址来回调用
curl集群ip,集群内部的虚拟网络ip,跨服务器的
八、服务暴露给客户端
前面创建的Service只能在集群内部网络中访问,那么怎么让客户端来访问Service呢?
三种方式
- NodePort
每个节点都开放一个端口 - LoadBalance
NodePort的一种扩展,负载均衡器需要云基础设施来提供 - Ingress
NodePort
在每个节点(包括master),都开放一个相同的端口,可以通过任意节点的端口来访问Service
cat <<EOF > 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
EOF
可以通过任意节点的30123
端口来访问 Service
http://192.168.64.191:30123
http://192.168.64.192:30123
http://192.168.64.193:30123
进入容器访问service,可以用service的名字直接调用,只有容器内部提供IP的解析环境,
[root@localhost ~]# kubectl exec -it kubia-hm4fl bash
root@kubia-hm4fl:/# curl http://kubia
You've hit kubia-xk9nd
root@kubia-hm4fl:/# curl http://kubia-clientip
You've hit kubia-p4s8w
k8s Dashboard 仪表盘相关推荐
- k8s==安装仪表盘,用仪表盘部署nginx
k8s安装仪表盘_ChengQian's blog的博客-CSDN博客_k8s仪表盘 https://zhuanlan.zhihu.com/p/513430375 # 下载所需要的yaml文件 wge ...
- 搭建K8S dashboard
书接上文:Centos7.9 从0到1搭建 K8S集群_u011663693的博客-CSDN博客本文记录自己从新建的centos7.9虚拟机搭建K8S集群的心路历程https://blog.csdn. ...
- python dashboard django_django 12.dashboard仪表盘 - 刘江的django教程
12.dashboard仪表盘 阅读: 48001 评论:38 对于运维管理平台,一个总览的dashboard仪表盘界面是必须有的,不但提升整体格调,也有利于向老板'邀功请赏'. dashboard页 ...
- 安装k8s Dashboard v2.0.1
安装k8s Dashboard v2.0.1的版本 前提:k8s环境已安装好,且正常启动中 1. 下载dashboard配置文件 wget https://raw.githubusercontent. ...
- k8s dashboard安装
安装 $ wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml ...
- 部署k8s dashboard
1 前提 已通过kubeadm搭建集群环境,具体可参考--使用kubeadm部署k8s 1.15集群--基于CentOS 7 2 创建dashboard应用 直接使用官网提供的yaml文件, kube ...
- (四)部署k8s dashboard web端管理界面
文章目录 1 token令牌认证登录 2 kubeconfig配置文件登录 参考github 1 获取dashboard image镜像 [root@master1 manifests]# docke ...
- EXCEL制作dashboard仪表盘
一.什么是仪表盘 仪表盘(guage,speedometer,dial chart,dashboard),是模仿汽车速度表的一种图表,常用来反映预算完成率.收入增长率等比率性指标.它简单.直观,人人会 ...
- K8s+dashboard安装部署
系统安装 使用虚拟机安装两个centos系统,在/etc/hosts里增加两行 192.168.140.128 kuber-master 192.168.140.129 kuber-node1 关闭防 ...
最新文章
- 将嵌套的Python字典转换为对象?
- Java笔试题库之选题题篇【1-70题】
- ASP.NET中常用到的27个函数集
- 5天玩转C#并行和多线程编程 —— 第五天 多线程编程大总结
- 239 Sliding Window Maximum 滑动窗口最大值
- 【性能优化】 之AWR 报告分析
- Android PreferenceActivity 使用
- [html] 写出不定宽度的子级div,在相对于固定宽度的父级元素水平居中的布局
- leetcode 加一
- 03-从尾到头打印链表
- php获取laydate,laydate日历控件使用方法实例分享
- IDG研究显示,混合云是数字化转型的“强大助推器”
- LINUX邮件服务器
- 【硬见小百科】数字万用表的工作原理
- vmware8.0.4序列号及汉化包安装
- [zz]64bitnbsp;ubuntunbsp;安装32bit软件
- 基于深度学习的显著性目标检测方法综述
- python爬取网易词典,利用Python3和Charles爬取有道词典
- 一文读懂图像三原色原理
- oppo手机root管家,oppo root软件
热门文章
- SEO网站优化方案的五个阶段
- 重口味码农的2020年终总结
- 测试测试测试测试测试测试
- 幼儿教师运用计算机体会,浅谈幼儿园计算机区角活动__幼儿教师网
- 画论22 韩拙《山水纯全集》
- 华擎服务器主板 稳定性,用过华擎主板的朋友进来麻烦谈谈心得体会,大家觉...-卓优商学问答...
- python使用蓝牙与HC05通讯(pybluez调用socket、模拟串口)
- 一文带你怼明白进程和线程通信原理
- AndroidWear 连接手持设备与穿戴设备模拟器到开发环境
- matlab实现牛顿迭代法求解二元函数最优点并绘制动态图像