一、 查看 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 仪表盘相关推荐

  1. k8s==安装仪表盘,用仪表盘部署nginx

    k8s安装仪表盘_ChengQian's blog的博客-CSDN博客_k8s仪表盘 https://zhuanlan.zhihu.com/p/513430375 # 下载所需要的yaml文件 wge ...

  2. 搭建K8S dashboard

    书接上文:Centos7.9 从0到1搭建 K8S集群_u011663693的博客-CSDN博客本文记录自己从新建的centos7.9虚拟机搭建K8S集群的心路历程https://blog.csdn. ...

  3. python dashboard django_django 12.dashboard仪表盘 - 刘江的django教程

    12.dashboard仪表盘 阅读: 48001 评论:38 对于运维管理平台,一个总览的dashboard仪表盘界面是必须有的,不但提升整体格调,也有利于向老板'邀功请赏'. dashboard页 ...

  4. 安装k8s Dashboard v2.0.1

    安装k8s Dashboard v2.0.1的版本 前提:k8s环境已安装好,且正常启动中 1. 下载dashboard配置文件 wget https://raw.githubusercontent. ...

  5. k8s dashboard安装

    安装 $ wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml ...

  6. 部署k8s dashboard

    1 前提 已通过kubeadm搭建集群环境,具体可参考--使用kubeadm部署k8s 1.15集群--基于CentOS 7 2 创建dashboard应用 直接使用官网提供的yaml文件, kube ...

  7. (四)部署k8s dashboard web端管理界面

    文章目录 1 token令牌认证登录 2 kubeconfig配置文件登录 参考github 1 获取dashboard image镜像 [root@master1 manifests]# docke ...

  8. EXCEL制作dashboard仪表盘

    一.什么是仪表盘 仪表盘(guage,speedometer,dial chart,dashboard),是模仿汽车速度表的一种图表,常用来反映预算完成率.收入增长率等比率性指标.它简单.直观,人人会 ...

  9. K8s+dashboard安装部署

    系统安装 使用虚拟机安装两个centos系统,在/etc/hosts里增加两行 192.168.140.128 kuber-master 192.168.140.129 kuber-node1 关闭防 ...

最新文章

  1. 将嵌套的Python字典转换为对象?
  2. Java笔试题库之选题题篇【1-70题】
  3. ASP.NET中常用到的27个函数集
  4. 5天玩转C#并行和多线程编程 —— 第五天 多线程编程大总结
  5. 239 Sliding Window Maximum 滑动窗口最大值
  6. 【性能优化】 之AWR 报告分析
  7. Android PreferenceActivity 使用
  8. [html] 写出不定宽度的子级div,在相对于固定宽度的父级元素水平居中的布局
  9. leetcode 加一
  10. 03-从尾到头打印链表
  11. php获取laydate,laydate日历控件使用方法实例分享
  12. IDG研究显示,混合云是数字化转型的“强大助推器”
  13. LINUX邮件服务器
  14. 【硬见小百科】数字万用表的工作原理
  15. vmware8.0.4序列号及汉化包安装
  16. [zz]64bitnbsp;ubuntunbsp;安装32bit软件
  17. 基于深度学习的显著性目标检测方法综述
  18. python爬取网易词典,利用Python3和Charles爬取有道词典
  19. 一文读懂图像三原色原理
  20. oppo手机root管家,oppo root软件

热门文章

  1. SEO网站优化方案的五个阶段
  2. 重口味码农的2020年终总结
  3. 测试测试测试测试测试测试
  4. 幼儿教师运用计算机体会,浅谈幼儿园计算机区角活动__幼儿教师网
  5. 画论22 韩拙《山水纯全集》
  6. 华擎服务器主板 稳定性,用过华擎主板的朋友进来麻烦谈谈心得体会,大家觉...-卓优商学问答...
  7. python使用蓝牙与HC05通讯(pybluez调用socket、模拟串口)
  8. 一文带你怼明白进程和线程通信原理
  9. AndroidWear 连接手持设备与穿戴设备模拟器到开发环境
  10. matlab实现牛顿迭代法求解二元函数最优点并绘制动态图像