首页 文章 精选 留言 我的

精选列表

搜索[k8s],共3934篇文章
优秀的个人博客,低调大师

k8s使用ServiceAccount Token的方式访问apiserver

首先,如果是普通版kubernetes集群,可以登陆到master集群,可以使用私钥证书的方式访问。证书路径:master的/etc/kubernetes/pki 下面。 使用命令: curl --cacert ca.crt --cert apiserver.crt --key apiserver.key https://$server/api server是apiserver公网访问地址 curl --cacert ca.crt --cert apiserver.crt --key apiserver.key https://server:6443/api { "kind": "APIVersions", "versions": [ "v1" ], "serverAddressByClientCIDRs": [ { "clientCIDR": "0.0.0.0/0", "serverAddress": "192.168.0.251:6443" } ] } 接下来介绍一下使用ServiceAccount Token的方式访问集群。serviceaccount的权限由集群中对应的rolebinding决定,官方文档 https://kubernetes.io/docs/reference/access-authn-authz/rbac/ 请选择对应权限的ServiceAccount来获取token,我这边选择的是admin ServiceAccount kubectl get sa admin -n kube-system -o yaml apiVersion: v1 kind: ServiceAccount metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","kind":"ServiceAccount","metadata":{"annotations":{},"name":"admin","namespace":"kube-system"}} creationTimestamp: 2018-11-05T09:23:39Z name: admin namespace: kube-system resourceVersion: "889" selfLink: /api/v1/namespaces/kube-system/serviceaccounts/admin uid: 7af4f177-e0dc-11e8-8ef4-00163e009d2a secrets: - name: admin-token-5tctj 查看对应的clusterrolebinding: kubectl get clusterrolebinding admin -oyaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"rbac.authorization.k8s.io/v1beta1","kind":"ClusterRoleBinding","metadata":{"annotations":{},"name":"admin","namespace":""},"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"cluster-admin"},"subjects":[{"kind":"ServiceAccount","name":"admin","namespace":"kube-system"}]} creationTimestamp: 2018-11-05T09:23:39Z name: admin resourceVersion: "886" selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/admin uid: 7af6ff9d-e0dc-11e8-8ef4-00163e009d2a roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin namespace: kube-system 查看admin sa绑定的clusterrole和对应的权限。命令: kubectl get clusterrole cluster-admin -o yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "true" creationTimestamp: 2018-11-05T09:18:49Z labels: kubernetes.io/bootstrapping: rbac-defaults name: cluster-admin resourceVersion: "38" selfLink: /apis/rbac.authorization.k8s.io/v1/clusterroles/cluster-admin uid: ce28c0e7-e0db-11e8-9852-00163e009d2a rules: - apiGroups: - '*' resources: - '*' verbs: - '*' - nonResourceURLs: - '*' verbs: - '*' 获取对应sa的secret从中获取token。并进行base64解码。 kubectl get secret admin-token-5tctj -n kube-system -o jsonpath={".data.token"} | base64 -d eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi01dGN0aiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjdhZjRmMTc3LWUwZGMtMTFlOC04ZWY0LTAwMTYzZTAwOWQyYSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.aMzef7qssxhFCkKHYFX99XBCkA_lnpKQhBvWPJ_AEsg89HUJ9cgYs2M7VRQJ2KcsG1BndSW0Ne-yLdsXFGDMaIRF58Rz02V99ViqAH8W86UZqcgARlw6DbYtpyHx2LZp4_HbrOy0xHJXGOx0FzwbCNJR5TE5LAZWx2Q5WowuxzdIhpkr15tn9UTZB0i2VXyANG3D6xyf1M67ojav59eC04qWu3ZuFC2GgngHGbZ1qnP55UnFTHWdFtHAzU5qAX7jrWJAOBdSPXwoxC9XTIBoL2umQk2XQN-OsBnQ_saXXLPe2cdpKdoboJCZgcUfO-5D94KO-5P8wNVhGWubNutvug 最后使用该token访问apiserver: 最后使用公网slb地址访问。curl-k-H'Authorization:Bearertoken'https://111.111.111.111:6443 例如: curl -k -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi01dGN0aiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjdhZjRmMTc3LWUwZGMtMTFlOC04ZWY0LTAwMTYzZTAwOWQyYSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.aMzef7qssxhFCkKHYFX99XBCkA_lnpKQhBvWPJ_AEsg89HUJ9cgYs2M7VRQJ2KcsG1BndSW0Ne-yLdsXFGDMaIRF58Rz02V99ViqAH8W86UZqcgARlw6DbYtpyHx2LZp4_HbrOy0xHJXGOx0FzwbCNJR5TE5LAZWx2Q5WowuxzdIhpkr15tn9UTZB0i2VXyANG3D6xyf1M67ojav59eC04qWu3ZuFC2GgngHGbZ1qnP55UnFTHWdFtHAzU5qAX7jrWJAOBdSPXwoxC9XTIBoL2umQk2XQN-OsBnQ_saXXLPe2cdpKdoboJCZgcUfO-5D94KO-5P8wNVhGWubNutvug' https://111.111.111.111:6443/api { "kind": "APIVersions", "versions": [ "v1" ], "serverAddressByClientCIDRs": [ { "clientCIDR": "0.0.0.0/0", "serverAddress": "192.168.0.252:6443" } ] }

优秀的个人博客,低调大师

阿里云K8S服务-数据盘扩容方案

介绍 目前容器服务Kubernetes集群在创建的时候,可以让客户选择是否挂载Worker节点的数据盘,并配置其容量;这里的数据盘会保存docker容器、镜像、kubelet等相关数据; 这里的数据盘与客户应用使用的云盘区别: 这里的数据盘:是用来保存docker、kubelet等容器系统服务数据的; 应用挂载云盘:是您的应用来保存数据的,可以通过pv、pvc挂载; 云盘扩容方案:https://yq.aliyun.com/articles/629008 如上图,创建集群的时候为worker节点添加数据盘,会默认挂载在worker的/dev/vdb设备; # ls /dev | grep vdb vdb vdb1 # df -h | grep vdb /dev/vdb1 58G 1.1G 54G 2% /var/

优秀的个人博客,低调大师

K8S存储卷常见问题 - 云盘

1. Pod挂载、卸载失败,日志中报Orphaned pod; 该问题为kubelet删除pod的bug,相关解决方法:链接 2. 卸载失败: 2.1. 云盘umount失败,有残留挂载点 【发生场景】:创建集群时,worker节点挂载了数据盘作为docker、kubelet的存储盘; 在节点上:/var/lib/docker, /var/lib/kubelet挂载到/dev/vdb1上; 【现象】:云盘无法从节点自动卸载,登陆节点发现,类似如下挂载点没有umount成功: /dev/vdc on /var/lib/kubelet/plugins/kubernetes.io/flexvolume/alicloud/disk/mounts/d-2zefwuq9sv0gkxqrll5t type ext4 (rw,relatime,data=ord

优秀的个人博客,低调大师

K8S集群存储服务相关日志获取指南

自动日志获取 1. 在一台可以通过kubectl访问集群的节点上下载脚本: curl -o diagnose_storage.sh http://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/diagnose/diagnose_storage.sh 2. 执行脚本: sh diagnose_storage.sh logs podID nameSpaceName 其中:podID为出问题的pod ID;nameSpaceName为出问题pod的名词空间; 3. 查看日志: 在当前目录下面会生成日志文件: 一个logs目录和对其打包的文件;logs下面包括:flexvolume、disk provisioner、kubelet的日志。 Flexvolume日志(master1上执行

优秀的个人博客,低调大师

K8S有状态服务-StatefulSet使用最佳实践

介绍 StatefulSet是一种给Pod提供唯一标志的控制器,它可以保证部署和扩展的顺序。 Pod一致性:包含次序(启动、停止次序)、网络一致性。此一致性与Pod相关,与被调度到哪个node节点无关。 稳定的次序:对于N个副本的StatefulSet,每个Pod都在[0,N)的范围内分配一个数字序号,且是唯一的。 稳定的网络:Pod的hostname模式为$(statefulset名称)-$(序号)。 稳定的存储:通过VolumeClaimTemplate为每个Pod创建一个PV。删除、减少副本,不会删除相关的卷。 阿里云云盘支持动态挂载的功能,可以通过VolumeClaimTemplate方式部署statefulset应用。 部署Statefulset服务 volumeClaimTemplates:表示一类PVC的模板,系统会根据Statef

优秀的个人博客,低调大师

Kubernetes(K8S)集群管理Docker容器(部署篇)

一、架构拓扑图 二、环境规划 角色 IP 组件 master 192.168.0.211 etcd kube-apiserver kube-controller-manager kube-scheduler node01 192.168.0.212 kubelet kube-proxy docker node02 192.168.0.213 kubelet kube-proxy docker 环境说明: 操作系统:Ubuntu16.04 or CentOS7 Kubernetes版本:v1.8.3 Docker版本:v17.09-ce 均采用当前最新稳定版本。 关闭selinux。 三、部署集群 3.1下载二进制包 打开下面网址,下载下面两个红色框框的包。 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.8.md#v183 下载完成后,上传到服务器: kubernetes-server-linux-amd64.tar.gz上传到master节点。 kubernetes-node-linux-amd64.tar.gz 上传到node节点。 3.2 安装etcd3 1 2 3 4 5 6 7 8 k8s-master #yuminstalletcd–y k8s-master #vi/etc/etcd/etcd.conf ETCD_NAME= "default" ETCD_DATA_DIR= "/var/lib/etcd/default" ETCD_LISTEN_CLIENT_URLS= "http://0.0.0.0:2379" ETCD_ADVERTISE_CLIENT_URLS=http: //0 .0.0.0:2379 k8s-master #systemctlenableetcd k8s-master #systemctlstartetcd 注意:Ubuntu系统etcd配置文件在/etc/default/etcd。 3.3运行Master节点组件 1 2 3 k8s-master #tarzxvfkubernetes-server-linux-amd64.tar.gz k8s-master #mkdir-p/opt/kubernetes/{bin,cfg} k8s-master #mvkubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl}/opt/kubernetes/bin 3.3.1 apiserver 创建配置文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #vi/opt/kubernetes/cfg/kube-apiserver #启用日志标准错误 KUBE_LOGTOSTDERR= "--logtostderr=true" #日志级别 KUBE_LOG_LEVEL= "--v=4" #Etcd服务地址 KUBE_ETCD_SERVERS= "--etcd-servers=http://192.168.0.211:2379" #API服务监听地址 KUBE_API_ADDRESS= "--insecure-bind-address=0.0.0.0" #API服务监听端口 KUBE_API_PORT= "--insecure-port=8080" #对集群中成员提供API服务地址 KUBE_ADVERTISE_ADDR= "--advertise-address=192.168.0.211" #允许容器请求特权模式,默认false KUBE_ALLOW_PRIV= "--allow-privileged=false" #集群分配的IP范围 KUBE_SERVICE_ADDRESSES= "--service-cluster-ip-range=10.10.10.0/24" 创建systemd服务文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #vi/lib/systemd/system/kube-apiserver.service [Unit] Description=KubernetesAPIServer Documentation=https: //github .com /kubernetes/kubernetes [Service] EnvironmentFile=- /opt/kubernetes/cfg/kube-apiserver #ExecStart=/opt/kubernetes/bin/kube-apiserver${KUBE_APISERVER_OPTS} ExecStart= /opt/kubernetes/bin/kube-apiserver \ ${KUBE_LOGTOSTDERR}\ ${KUBE_LOG_LEVEL}\ ${KUBE_ETCD_SERVERS}\ ${KUBE_API_ADDRESS}\ ${KUBE_API_PORT}\ ${KUBE_ADVERTISE_ADDR}\ ${KUBE_ALLOW_PRIV}\ ${KUBE_SERVICE_ADDRESSES} Restart=on-failure [Install] WantedBy=multi-user.target 启动服务,并设置开机启动: 1 2 3 #systemctldaemon-reload #systemctlenablekube-apiserver #systemctlrestartkube-apiserver 注意:apiserver默认支持etcd3,如果是etcd2,需启动时指定版本选项--storage-backend=etcd2 3.3.2 scheduler 创建配置文件: 1 2 3 4 5 #vi/opt/kubernetes/cfg/kube-scheduler KUBE_LOGTOSTDERR= "--logtostderr=true" KUBE_LOG_LEVEL= "--v=4" KUBE_MASTER= "--master=192.168.0.211:8080" KUBE_LEADER_ELECT= "--leader-elect" 创建systemd服务文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #vi/lib/systemd/system/kube-scheduler.service [Unit] Description=KubernetesScheduler Documentation=https: //github .com /kubernetes/kubernetes [Service] EnvironmentFile=- /opt/kubernetes/cfg/kube-scheduler ExecStart= /opt/kubernetes/bin/kube-scheduler \ ${KUBE_LOGTOSTDERR}\ ${KUBE_LOG_LEVEL}\ ${KUBE_MASTER}\ ${KUBE_LEADER_ELECT} Restart=on-failure [Install] WantedBy=multi-user.target 启动服务,并设置开机启动: 1 2 3 #systemctldaemon-reload #systemctlenablekube-scheduler #systemctlrestartkube-scheduler 3.3.3 controller-manager 创建配置文件: 1 2 3 4 #vi/opt/kubernetes/cfg/kube-controller-manager KUBE_LOGTOSTDERR= "--logtostderr=true" KUBE_LOG_LEVEL= "--v=4" KUBE_MASTER= "--master=192.168.0.211:8080" 创建systemd服务文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #vi/lib/systemd/system/kube-controller-manager.service [Unit] Description=KubernetesControllerManager Documentation=https: //github .com /kubernetes/kubernetes [Service] EnvironmentFile=- /opt/kubernetes/cfg/kube-controller-manager ExecStart= /opt/kubernetes/bin/kube-controller-manager \ ${KUBE_LOGTOSTDERR}\ ${KUBE_LOG_LEVEL}\ ${KUBE_MASTER}\ ${KUBE_LEADER_ELECT} Restart=on-failure [Install] WantedBy=multi-user.target 启动服务,并设置开机启动: 1 2 3 #systemctldaemon-reload #systemctlenablekube-controller-manager #systemctlrestartkube-controller-manager 3.3.4小结 Master节点组件就全部启动了,需要注意的是服务启动顺序有依赖,先启动etcd,再启动apiserver,其他组件无顺序要求。 查看Master节点组件进程状态: 说明组件都在运行。 如果启动失败,请查看启动日志,例如: #journalctl -u kube-apiserver 3.4 运行Node节点组件 1 2 3 k8s-node01 #tarzxvfkubernetes-node-linux-amd64.tar.gz k8s-node01 #mkdir-p/opt/kubernetes/{bin,cfg} k8s-node01 #mvkubernetes/node/bin/{kubelet,kube-proxy}/opt/kubernetes/bin/ 3.4.1 kubelet 创建kubeconfig配置文件: 1 2 3 4 5 6 7 8 9 10 11 12 #vi/opt/kubernetes/cfg/kubelet.kubeconfig apiVersion:v1 kind:Config clusters: -cluster: server:http: //192 .168.0.211:8080 name: local contexts: -context: cluster: local name: local current-context: local kubeconfig文件用于kubelet连接master apiserver。 创建配置文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #vi/opt/kubernetes/cfg/kubelet #启用日志标准错误 KUBE_LOGTOSTDERR= "--logtostderr=true" #日志级别 KUBE_LOG_LEVEL= "--v=4" #Kubelet服务IP地址 NODE_ADDRESS= "--address=192.168.0.212" #Kubelet服务端口 NODE_PORT= "--port=10250" #自定义节点名称 NODE_HOSTNAME= "--hostname-override=192.168.0.212" #kubeconfig路径,指定连接API服务器 KUBELET_KUBECONFIG= "--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig" #允许容器请求特权模式,默认false KUBE_ALLOW_PRIV= "--allow-privileged=false" #DNS信息 KUBELET_DNS_IP= "--cluster-dns=10.10.10.2" KUBELET_DNS_DOMAIN= "--cluster-domain=cluster.local" #禁用使用Swap KUBELET_SWAP= "--fail-swap-on=false" 创建systemd服务文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #vi/lib/systemd/system/kubelet.service [Unit] Description=KubernetesKubelet After=docker.service Requires=docker.service [Service] EnvironmentFile=- /opt/kubernetes/cfg/kubelet ExecStart= /opt/kubernetes/bin/kubelet \ ${KUBE_LOGTOSTDERR}\ ${KUBE_LOG_LEVEL}\ ${NODE_ADDRESS}\ ${NODE_PORT}\ ${NODE_HOSTNAME}\ ${KUBELET_KUBECONFIG}\ ${KUBE_ALLOW_PRIV}\ ${KUBELET_DNS_IP}\ ${KUBELET_DNS_DOMAIN}\ ${KUBELET_SWAP} Restart=on-failure KillMode=process [Install] WantedBy=multi-user.target 启动服务,并设置开机启动: 1 2 3 #systemctldaemon-reload #systemctlenablekubelet #systemctlrestartkubelet 3.4.2 proxy 创建配置文件: 1 2 3 4 5 6 7 8 9 #vi/opt/kubernetes/cfg/kube-proxy #启用日志标准错误 KUBE_LOGTOSTDERR= "--logtostderr=true" #日志级别 KUBE_LOG_LEVEL= "--v=4" #自定义节点名称 NODE_HOSTNAME= "--hostname-override=192.168.0.212" #API服务地址 KUBE_MASTER= "--master=http://192.168.0.211:8080" 创建systemd服务文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #vi/lib/systemd/system/kube-proxy.service [Unit] Description=KubernetesProxy After=network.target [Service] EnvironmentFile=- /opt/kubernetes/cfg/kube-proxy ExecStart= /opt/kubernetes/bin/kube-proxy \ ${KUBE_LOGTOSTDERR}\ ${KUBE_LOG_LEVEL}\ ${NODE_HOSTNAME}\ ${KUBE_MASTER} Restart=on-failure [Install] WantedBy=multi-user.target 启动服务,并设置开机启动: 1 2 3 #systemctldaemon-reload #systemctlenablekube-proxy #systemctlrestartkube-proxy 3.4.3小结 其他节点加入集群与node01方式相同,但需修改kubelet的--address和--hostname-override选项为本机IP。 查看Node节点组件进程状态: 说明组件都在运行。 如果启动失败,请查看启动日志,例如: #journalctl -u kubelet 3.5 验证集群是否部署成功 设置可执行文件到系统变量,方便使用: 1 2 #echo"exportPATH=$PATH:/opt/kubernetes/bin">>/etc/profile #source/etc/profile 查看集群节点状态: 两个节点都加入到了kubernetes集群,就此部署完成。 本文转自 李振良OK 51CTO博客,原文链接:http://blog.51cto.com/lizhenliang/1983392,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册