目录
4、使用Dashboard 部署一个应用 - 高级选项
Dashboard是kubernetes的用户网页接口,用于界面化管理Kubernetes集群
bs体系:浏览器和服务器,dashboard属于bs体系中的一类
cs体系:客户端和服务器
部署dashboard,默认官方提供部署地址国内无法打开
$ wget https://gitee.com/cai_xiao_man/file/blob/master/k8s/dashboard/recommended.yaml $ kubectl apply -f recommended.yaml namespace/kubernetes-dashboard created #创建了名称空间 serviceaccount/kubernetes-dashboard created #创建了服务账号 service/kubernetes-dashboard created #创建了服务 secret/kubernetes-dashboard-certs created #创建了3个机密 secret/kubernetes-dashboard-csrf created secret/kubernetes-dashboard-key-holder created configmap/kubernetes-dashboard-settings created #创建了配置地图 role.rbac.authorization.k8s.io/kubernetes-dashboard created #创建了角色 clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created #创建了集群角色 rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created #角色绑定 clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created #集群角色绑定 deployment.apps/kubernetes-dashboard created service/dashboard-metrics-scraper created deployment.apps/dashboard-metrics-scraper created$ kubectl -n kubernetes-dashboard get pods -o wide #查看命名空间 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES dashboard-metrics-scraper-8c47d4b5d-kk9jw 1/1 Running 0 5h12m 172.16.126.13 k8s-worker2 <none> <none> kubernetes-'dashboard'-6c75475678-jbhtq 1/1 Running 0 5h12m 172.16.194.70 k8s-worker1 <none> <none> '查看dashboard运行在哪台设备''将服务类型改为NodePort' $ kubectl -n kubernetes-dashboard patch services kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' service/kubernetes-dashboard patched '或者用edit方式修改服务也可以' $ kubectl -n kubernetes-dashboard edit services kubernetes-dashboard $ kubectl -n kubernetes-dashboard get services kubernetes-dashboard #查看类型已修改 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes-dashboard NodePort 10.107.166.102 <none> 443:'30929'/TCP 5h33m参考资料(patch): Kubectl Reference Docs (kubernetes.io)
参考资料(kubectl): 命令行工具 (kubectl) | Kubernetes
参考资料(部署仪表盘): 部署和访问 Kubernetes 仪表板(Dashboard) | Kubernetes
提示:发送的是http请求,但是要访问https
提示: 证书和主机名不匹配,或者是私有证书无法访问,输入 thisisunsafe ,会自动跳转到如下界面
①. 创建serviceaccount,根据其管理目标,rolebinding或者clusterrolebinding绑定至合理role或者clusterrole
②. 获取到此 serviceAccount 的 secret,查看secret 的详细信息,其中就有token,粘贴到web界面的令牌里面
注意:新版本后不再有token,需要自行创建
$ kubectl -n kubernetes-dashboard describe secrets “token” #因为没有所以无法查看
$ kubectl -n kubernetes-dashboard create token kubernetes-dashboard #服务账号是kubernetes-dashboard ...输出省略... 此为token值
查看权限
$ kubectl -n kubernetes-dashboard get serviceaccounts kubernetes-dashboard #查看服务状态 NAME SECRETS AGE kubernetes-dashboard 0 8h '因为token只是创建了,但是没有放在secrets里' $ kubectl -n kubernetes-dashboard describe clusterrole cluster-admin #集群管理员有所有权限 Name: cluster-admin Labels: kubernetes.io/bootstrapping=rbac-defaults Annotations: rbac.authorization.kubernetes.io/autoupdate: true PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- *.* [] [] [*] [*] [] [*] $ kubectl -n kubernetes-dashboard describe clusterrole kubernetes-dashboard #dashboard只有看的权限 Name: kubernetes-dashboard Labels: k8s-app=kubernetes-dashboard Annotations: <none> PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- nodes.metrics.k8s.io [] [] [get list watch] pods.metrics.k8s.io [] [] [get list watch]提权
$ kubectl create clusterrolebinding kubernetes-dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:kubernetes-dashboard '集群角色绑定(kubernetes-dashboard-cluster-admin名称任意)' clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-cluster-admin created $ kubectl get clusterrolebindings -o wide | grep dash #查看集群的权限绑定 kubernetes-dashboard ClusterRole/kubernetes-dashboard 9h kubernetes-dashboard/kubernetes-dashboard kubernetes-dashboard-cluster-admin ClusterRole/cluster-admin 3m36s kubernetes-dashboard/kubernetes-dashboard
参考文档(生成secret): 使用 kubectl 管理 Secret | Kubernetes
把 serviceaccount 的token 封装为 kubeconfig 文件
①. 创建服务账号
$ kubectl -n kube-system create serviceaccount dashboard-admin serviceaccount/dashboard-admin created 'v1.24.0 更新之后进行创建 ServiceAccount 不会自动生成 Secret 需要对其手动创建'$ kubectl -n kube-system describe serviceaccounts dashboard-admin #查询服务账号信息,没有对 Token 进行创建 Name: dashboard-admin Namespace: kube-system Labels: <none> Annotations: <none> Image pull secrets: <none> Mountable secrets: <none> Tokens: <none> Events: <none> $ kubectl -n kube-system get secrets #查看secrets没有被创建 No resources found in kube-system namespace.②. 创建secret(yaml方式)
$ kubectl apply -f- <<EOF apiVersion: v1 kind: Secret type: kubernetes.io/service-account-token metadata: name: dashboard-admin namespace: kube-system annotations: kubernetes.io/service-account.name: "dashboard-admin"$ kubectl -n kube-system describe serviceaccounts dashboard-admin Name: dashboard-admin Namespace: kube-system Labels: <none> Annotations: <none> Image pull secrets: <none> Mountable secrets: <none> Tokens: dashboard-admin 'ServiceAccount 已对 Secret 关联' Events: <none> $ kubectl -n kube-system describe secrets dashboard-admin #查看详细信息 ...输出省略...参考文档:Secret | Kubernetes
②. 账号提权
$ kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin '服务账号绑定、提权(那个名称空间:服务账号)' clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created
③. 制作配置文件
$ SN=$(kubectl -n kube-system get secret | awk '/dashboard-admin/ {print $1}') #查key $ DASH_TOKEN=$(kubectl -n kube-system get secret ${SN} -o jsonpath={.data.token} | base64 -d) #获取token '设置集群,创建一个配置文件、集群名字叫ck8s、ca证书用的ca.crt、开启https、服务器地址和端口(默认文件不存在)' $ kubectl config set-cluster ck8s \ --certificate-authority=/etc/kubernetes/pki/ca.crt \ --embed-certs=true \ --server=https://192.168.147.102:6443 \ --kubeconfig=dashboard-admin.kubeconfig '设置上下文关系,用户名@集群名、ck8s集群中、用户名、添加到配置文件中(配置文件默认不存在) 配置后集群名和用户名已经存在,cat dashboard-admin.kubeconfig来查看' $ kubectl config set-context dashboard-admin@ck8s \ --cluster=cks8 \ --user=dashboard-admin \ --kubeconfig=dashboard-admin.kubeconfig '创建令牌,设置账号名dashboard-admin、设置token、设置(再看用户下边多了token)' $ kubectl config set-credentials dashboard-admin \ --token=${DASH_TOKEN} \ --kubeconfig=dashboard-admin.kubeconfig '使用刚刚创建的集群用户' $ kubectl config use-context dashboard-admin@ck8s \ --kubeconfig=dashboard-admin.kubeconfig $ cat -n dashboard-admin.kubeconfig |grep current #查看当前已经切换到此用户 12 current-context: dashboard-admin@ck8s
④. 比较文件
$ vimdiff ~/.kube/config dashboard-admin.kubeconfig
⑤. 测试
将kubeconfig文件拷贝到物理机,然后访问浏览器
参考文件: Kubectl Reference Docs (kubernetes.io)
1. 顶部操作区(用户可以搜索集群中的资源、名称空间、创建资源)
2. 左边导航菜单(查看和管理集群中的各种资源)
①. Cluster 级别资源
3. 中间主体区(在导航菜单中点击了某类资源,中间主体区就会显示该资源的所有实例)
选中不同Namespace,可以看到该 Namespace 下所有的资源情况
对于集群和命名空间管理员,Dashboard 列出 Nodes、Namespaces 和持久化卷,并为其提供详细视图。Node 列表视图包含所有Node 的 CPU 和内存使用指标。详情视图显示Node的指标、规格、状态、分配的资源、事件和Node 上运行的Pod(新版本不再有,新版使用workload替代)
①. 显示所选Namespace 中运行的所有基于 Workload 类型(如 Deployments、ReplicaSets等)的应用程序,并且每个Workload 类型可以分开查看
②. Workload 的详细视图显示了对象的状态、规格信息以及各个对象之间的关系
为Kubernetes 集群部署容器化应用
从表单创建:*代表必选、
1. 查看 Kubernetes 集群中容器化应用的信息
2. 通过Kubernetes 集群容器化应用的日志进行故障排查
3. 查看Kubernetes 集群的资源状态
1. 修改Kubernetes 集群资源(Deployments、Jobs、DaemonSets等)
2. 扩容或者缩容Pod数量
3. 编辑应用的 yaml 文件(修改点击更新后直接生效)
对于不使用 / 有问题的应用进行删除,达到资源合理使用目的
必须在所选的Kubernetes namespace 中唯一,且必须以小写字母开头和结尾,只能包含小写字母、数字和“-”。它只限于24个字符,头和尾的空格会被忽略。将会在
Replication Controller 和 Service 中添加带有该名称的标签
在registry 上的公有 Docker 容器镜像或托管在Google Container Registry 或 Docker Hub
上私有镜像的URL,容器镜像规格必须以冒号结尾
应用程序部署的目标数量,该值必须是正整数
服务、协议等
Services
①. 外部Service:对于应用的某些部分(如前端),需要将Service(如集群的公共IP地址)裸露出去。对于外部Service,需要打开一个或多个端口来执行此操作
②. 内部Service:只在集群内部可见的服务
不管哪种Service类型,如果选择创建Service,需要配合容器的监听端口(传入),
包括 port 和 Target port
①. 该Service将传入端口映射到容器的目标端口上,而且自动会添加到部署Pod的路由
②. 支持的协议是TCP 和 UDP
③. Service 的内部 DNS 名称将使用指定的 app name
1. Description:此处输入的文本将作为Replication Controller 的注释添加到应用程序的详细信息中
2. Labels:应用程序的默认标签包含应用程序名称和版本,可以指定的附加标签(发行版本、环境信息等)到 Replication Controller 、Service、Pod里
3. Namespace:在下拉列表中提供所有可用的 Namespace,也可以创建新的Namespace,名称最多包含63个字母数字字符和“-”,创建成功后,默认选中,如果创建失败,则自动选择列表中第一个
4. Image Pull Secret:如果指定的Docker 容器镜像是私有镜像,则某些私有镜像可能需要Pull Secret 凭据
①. Dashboard 提供所有可用的Secret,并允许您创建新的Secret,Secret的名称必须遵循DNS域名语法(如new.image-pull.secret),最大支持253个字符
②. Secret 的内容必须是base64 编码和在.dockercfg 文件中指定的
5. CPU requirement (cores)和 Memory requirement(MiB):为容器指定最小的资源限制,默认情况下,Pod运行时是没有CPU和内存的限制
6. Run command 和 Run command arguments:默认情况下,容器会使用Docker 镜像中指定的默认入口点命令运行,可以使用命令选项和参数来重写它
7. Run as privileged:该设置决定特权容器中的进程是否相当于在主机上运行为root权限的进程,特权容器具备使用操作网络堆栈和访问设备等的能力
8. Environment variables:Kubernetes 通过环境变量暴露Service,可以使用环境变量的值编写环境变量或传递参数到命令中,这些变量可以用于在应用中查找Service,这个值可以通过“$(VAR_NAME)” 语法来引用其他变量
如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b
Kubernetes(K8s)是一个用于管理容器化应用程序的开源平台,可以帮助开发人员更轻松地部署、管理和扩展应用程序。在Kubernetes中,集群划分是一种重要的概念,可以帮助我们更好地组织和管理集群中的节点和资源。本文将介绍如何使用Kubernetes对集群进行划分,并提供详细的操作示例,希望能够帮助读者更好地了解和使用Kubernetes平台。Node划分Node划分是将集群中的节点按照一定的规则进行划分。在Kubernetes中,可以使用NodeSelector和Affinity机制来实现Node划分。NodeSelectorNodeSelector是一种将Pod调度到符合特定节点标
文章目录Kubernetes(k8s)工作负载一、Workloads二、Pod三、Deployment四、RC、RS、DaemonSet、StatefulSet五、Job、CronJob1、Job2、CronJob六、GCKubernetes(k8s)工作负载一、Workloads什么是工作负载(Workloads)工作负载是运行在Kubernetes上的一个应用程序。一个应用很复杂,可能由单个组件或者多个组件共同完成。无论怎样我们可以用一组Pod来表示一个应用,也就是一个工作负载Pod又是一组容器(Containers)所以关系又像是这样工作负载(Workloads)控制一组PodPod控制
文章目录一.k8s集群修改config1.1备份当前k8s集群配置文件1.2删除当前k8s集群的apiserver的cert和key1.3生成新的apiserver的cert和key1.4刷新admin.conf1.5重启apiserver1.6刷新.kube/config二.安装kubectl2.1下载kubectl2.2配置kubectl三.使用kubernetes-client操作k8s集群3.1依赖3.2注意(可忽略)3.3创建StatefulSet3.4运行shell命令3.5删除StatefulSet3.6线上运行注意一.k8s集群修改config因为默认的是内网IP,复制出来后,
本文导读一、前言二、Ingress和pod有什么关系三、使用Ingress对外暴露应用1.创建应用并使用NodePort暴露端口2.应用Ingress(1)部署IngressController(2)创建Ingress规则(3)在Windows系统的hosts文件添加域名访问规则一、前言在以往的操作过程中,我们都是将某端口号对外暴露,然后再使用IP+端口号进行访问服务,这是通过Service中的NodePort实现的。但是NodePort有着明显的缺陷:NodePort会在每一个node节点都启用一个端口,也就是说在集群中的任何一个node节点中,使用节点IP+端口号都能访问到该服务;每个端口
一、云计算的含义云计算是指能够按照需求,随时随地、便捷高效地从可配置的计算资源共享池中获取网络、服务器、存储、应用及服务等所需资源的模式。二、云计算的特征规模大、虚拟化、高可靠性、响应速度快、高可伸缩性、按需服务、托管省心、更安全等。三、kubernetes各核心组件kubernetes整体架构包括Master、Node以及etcd。3.1mastermaster即主节点,负责控制整个kubernetes集群。它包括ApiServer、Scheduler、Controller等组成部分。它们都需要和Etcd进行交互以存储数据。ApiServer:主要提供资源操作的统一入口,这样就屏蔽了与Etc
这是我的另一个widget-relatedquestion的后续问题.我想检查一下实际写入小部件首选项的内容。这些数据实际存储在哪里? 最佳答案 每个单独的小部件和仪表板本身的首选项都保存在文件夹/Users/YOUR-USER-NAME/Library/Preferences/中。 关于javascript-DashboardWidget首选项实际保存在哪里?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow
文章目录1.HAProxy安装问题汇总1.1绑定vip启动失败2.ETCD安装问题汇总集群无法启动2.1etcd节点重启失败3.Kubernetes安装问题汇总3.1namespace无法删除3.2大量Pod状态为Terminating3.3Pod日志无法查看3.4Pod容器初始化失败3.5Pod被驱逐3.6node节点报错3.7查看kubelet日志3.8主节点无法调度4.Calico安装问题汇总4.1节点之间访问Timeout4.2Calico-nodePod启动失败5.CoreDNS安装问题汇总5.1DNS域名服务IP地址调整6.Istio安装问题汇总6.1Kiali无法连接Istiod
Kubernetes声明式对象的增删改查前言一、创建对象二、更新对象三、删除对象四、查看对象总结前言我们可以通过在一个目录中存储多个对象配置文件、并使用kubectlapply来递归地创建和更新对象来创建、更新和删除Kubernetes对象。这种方法会保留对现有对象已作出的修改,而不会将这些更改写回到对象配置文件中。kubectldiff也会给你呈现apply将作出的变更的预览。一、创建对象使用kubectlapply来创建指定目录中配置文件所定义的所有对象,除非对应对象已经存在:$kubectlapply-f/此操作会在每个对象上设置kubectl.kubernetes.io/last-ap
【说明】本文档详细描述了在openEuler22.03LTS上通过ansible以二进制模式自动化部署高可用Kubernetes集群(适用k8sv1.26版本)。本文档参考了小陈运维的ansible剧本,并进行了适当改造,使之适用于openEuler22.03LTS,并改用nginx实现高可用;仅采用containerd作为容器运行时;采用calico网络插件;采用yaml配置文件自动部署dashboard。改造后的ansible剧本在华为私有云中的ECS测试通过,ECS系统统一采用openEuler22.03LTSSP1(根据小陈运维的说法,也可以支持CentOS7、CentOS8和Ubun