Kubernetes 学习笔记(一)--- 基本概念及利用kubeadm部署K8S

简介: Kubernetes中文文档http://docs.kubernetes.org.cn/目录一、K8S由来二、K8S特性 自动装箱 自我修复 水平扩展 服务发现/负载均衡 自动发布和回滚 密钥和配...

Kubernetes中文文档
http://docs.kubernetes.org.cn/

目录

一、K8S由来

二、K8S特性
    自动装箱
    自我修复
    水平扩展
    服务发现/负载均衡
    自动发布和回滚
    密钥和配置管理
    存储编排
    批量处理执行

三、K8S的架构
    API Server
    Scheduler
    Controller-Manager
    Kubelet
    Kube-proxy

四、逻辑概念
    Pod
    Pod控制器

五、K8S网络

六、通过kubeadm部署K8S集群
    1. 环境准备(所有节点)
    2. kubeadm初始化
    3. 在master部署flannel
    4. 扩展Pod的副本个数
    5. 配置kubectl子命令自动补全

一、K8S由来

Kuberbetes简称K8S,是由Google的几位工程师创立的,2014年6月首次对外公布。K8S的开发深受谷歌内部的一个叫做Borg系统的影响,Borg系统是谷歌内部稳定运行了十几年的大规模容器编排工具。谷歌沿用Borg系统的思路,用GO语言重新构建了这个容器编排工具,并命名为Kubernetes。

二、K8S特性

自动装箱

基于资源依赖,以及其它约束,能够自动完成容器的部署而且不影响可用性。

自我修复

具有自愈能力,考虑到容器非常轻量级的特点,一旦某个应用容器崩溃了,可以很快启动一个新的应用容器替代。

水平扩展

能够实现自动水平扩展,一个容器不够,就再启一个,可以不断的扩展,只要你的物理平台资源足够。

服务发现/负载均衡

自动实现服务发现和负载均衡

自动发布和回滚

密钥和配置管理

存储编排

对存储卷实现动态供给。如某一个容器需要用到存储卷时,会根据容器的需求自动创建符合要求的存储卷

批量处理执行

三、K8S的架构

Kubernetes集群包含有节点代理Kubelet 和Master组件(APIs,scheduler,etc.),下面是K8S的架构图。


img_2df60b16581125515454e9b0206f2d3e.png
image.png

Master节点包含API Server、Scheduler(调度器)、ControllerManager(控制器管理器)这三个核心的组件。Node节点包含的核心组件有Kubelet、Docker容器引擎、Kube-proxy

API Server

负责接受请求,解析请求,处理请求

Scheduler

调度器,它负责监测每一个Node节点上的可用计算资源,并根据用户创建容器时的最小资源请求量去评估哪个Node节点最合适,就把容器创建在最合适的Node节点上。

Controller-Manager

负责监控每一个Controller(控制器)的健康状态,并确保控制器是健康的。而控制器是确保Pod健康的组件。

Kubelet

是用于与Master节点的API Server进行通信,并接受Master调度过来的各种任务并执行的集群代理。

Kube-proxy

负责管理Service

四、逻辑概念

Pod

K8S并不是直接调度容器,K8S中最小的调度单元是Pod。容器是运行在Pod内部的,并且一个Pod内可以运行多个容器,这多个容器共享同一个底层的网络名称空间,它们共享底层的Net、UTS、IPC三个名称空间。另外三个名称空间是互相隔离的:USER、MNT、PID。同一个Pod中的容器通过lo进行通信。同一个Pod中的容器还共享第二种资源:存储卷。通常情况下一个Pod中只放一个容器,除非多个容器间有非常非常紧密的联系。

K8S把Pod分为两类:

  • 自主式Pod,是自我管理的,只在某个节点上运行,一旦节点故障,Pod就会丢失,不支持全局调度;
  • 由控制器管理的Pod,它是由Pod控制器进行管理的。

Pod控制器

常见的Pod控制器:

  • ReplicationController (副本控制器),确保Pod的数量始终保持设定的个数。也支持Pod的滚动更新。
  • ReplicaSet (副本集),它不直接使用,有一个声明式更新的控制器叫Deployment来负责管理。但是Deployment只能负责管理那些无状态的应用。
  • StatefulSet (有状态副本集),负责管理有状态的应用。
  • DaemonSet ,如果需要在每一个Node上只运行一个副本,而不是随意运行,就需要DaemonSet。
  • Job,运行作业,对于时间不固定的操作,比如:某个应用生成了一大堆数据集,现在需要临时启动一个Pod去清理这些数据集,清理完成后,这个Pod就可以结束了。 这些不需要一直处于运行状态的应用,就用Job这个类型的控制器去控制。如果Pod运行过程中意外中止了,Job负责重启Pod。如果Pod任务执行完了,就不需要再启动了。
  • Cronjob,周期性作业。

Deployment这种控制器还支持二级控制器,叫HPA (HorizontalPodAutoscaler,水平Pod自动伸缩控制器)。当业务量增长,一组Pod不足以支持业务时,HPA会自动增加Pod数量,业务量下降后,还会自动减少Pod数量。

五、K8S网络

K8S中包含三种网络:

  • 节点网络: 各个节点主机之间的通信网络;
  • Service网络:也被称为集群网络;
  • Pod网络:Pod之间通信的网络。
img_edb0cbfdc4195529418e0e54a13c029e.png
image.png

K8S通过CNI(Container Network Interface,容器网络接口)插件体系来接入外部的网络解决方案。这些插件都应该提供Service网络和Pod网络。
以下三种常用的CNI插件:

  • flannel : 支持网络配置;是叠加网络。简单,但是不支持网络策略;CoreOS开源项目
  • calico :支持网络配置、网络策略;是三层遂道网络。缺点:功能强大,但网络配置较为复杂。
  • canel : 是结合了flannel和calico的优点,使用flannel的网络配置、使用calico的网络策略。
  • 。。。最常用的就是这三种,其他网络插件不一一列举。

以上这些网络插件可以做为节点上的守护进程运行,也可以托管在K8S之上做为容器运行。

六、通过kubeadm部署K8S集群

kubeadm是K8S官方提供的集群部署工具。kubeadm将master节点上的apiserver、scheduler、controller-manager、etcd和node节点上的kube-proxy都部署为Pod运行,所以master和node都需要安装kubelet和docker。

img_d52c32c134e2c212c5b5e047b33f802b.png
image.png
img_1c8857fcdc7a4e2da0d90b34f454428d.png
image.png

主机准备:

主机名 IP 系统 配置
k8s-master.fhw.com 192.168.100.135 CentOS7.4 4C8G
k8s-node1.fhw.com 192.168.100.136 CentOS7.4 2C8G
k8s-node2.fhw.com 192.168.100.137 CentOS7.4 2C8G

1. 环境准备(所有节点)

关闭防火墙和禁用selinux

systemctl stop firewalld
setenforce 0

准备yum源

rm -rf /etc/yum.repos.d/*

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo
yum makecache fast
yum install -y vim wget net-tools lrzsz
cd /etc/yum.repos.d
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

准备kubernetes的Yum源文件

[root@k8s-master yum.repos.d]# cat kubernetes.repo 
[kubernetes]
name=Kubernetes Repo
baaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

安装docker

yum install docker-ce -y 

修改docker启动配置文件,在[Service]下加入如下内容:
vim /usr/lib/systemd/system/docker.service

Environment="NO_PROXY=127.0.0.0/8"
Environment="NO_PROXY=172.20.0.0/16"
Environment="NO_PROXY=reg.fhw.com"
Environment="NO_PROXY=192.168.100.0/24"    # 将自己的镜像仓库地址设置不通过代理访问
ExecStart=/usr/bin/dockerd --insecure-registry=reg.fhw.com --insecure-registry=192.168.100.0/24
ExecStart=/usr/bin/dockerd --insecure-registry=reg.fhw.com --insecure-registry=192.168.100.0/24
ExecStart=/usr/bin/dockerd --insecure-registry=reg.fhw.com --insecure-registry=192.168.100.0/24

启动Docker

systemctl enable docker
systemctl start docker

确保以下两个内核参数为1:

[root@k8s-master ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables 
1
[root@k8s-master ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables 
1

kubelet相关文件介绍:

[root@k8s-master ~]# rpm -ql kubelet
/etc/kubernetes/manifests               # 清单目录
/etc/sysconfig/kubelet                  # kubelet配置文件
/etc/systemd/system/kubelet.service     # unit文件
/usr/bin/kubelet                        # 二进制可执行文件

设置kubelet开机自启

systemctl enable kubelet

此时,因为各种配置还没有初始化完成,初始化完成以后才能启动kubelet。

kubeadm init相关参数:

[root@k8s-master ~]# kubeadm init --help
Run this command in order to set up the Kubernetes master.

Usage:
  kubeadm init [flags]

Flags:
      --apiserver-advertise-address string   API Server监听的IP地址,默认是0.0.0.0
      --apiserver-bind-port int32            API Server监听的端口 (default 6443)
      --apiserver-cert-extra-sans strings    Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names.
      --cert-dir string                      保存和存储证书的路径。(default "/etc/kubernetes/pki")
      --config string                        kubeadm配置文件的路径。 警告:配置文件的使用是实验性的。
      --cri-socket string                    指定要连接的CRI套接字。 (default "/var/run/dockershim.sock")
      --dry-run                              Don't apply any changes; just output what would be done.
      --feature-gates string                 A set of key=value pairs that describe feature gates for various features. Options are:
                                             Auditing=true|false (ALPHA - default=false)
                                             CoreDNS=true|false (default=true)
                                             DynamicKubeletConfig=true|false (ALPHA - default=false)
                                             SelfHosting=true|false (ALPHA - default=false)
                                             StoreCertsInSecrets=true|false (ALPHA - default=false)
  -h, --help                                 help for init
      --ignore-preflight-errors strings      预检查时忽略哪些错误。Example: 'IsPrivilegedUser,Swap'. 值为“all”时,忽略所有检查到的错误。
      --kubernetes-version string            指定Kubernetes版本。 (default "stable-1.11")
      --node-name string                     Specify the node name.
      --pod-network-cidr string              指定Pod网络的IP地址范围。 如果设置,控制平面将自动为每个节点分配CIDR。
      --service-cidr string                  Service网络使用的IP地址范围。 (default "10.96.0.0/12")
      --service-dns-domain string            Use alternative domain for services, e.g. "myorg.internal". (default "cluster.local")
      --skip-token-print                     Skip printing of the default bootstrap token generated by 'kubeadm init'.
      --token string                         The token to use for establishing bidirectional trust between nodes and masters. The format is [a-z0-9]{6}\.[a-z0-9]{16} - e.g. abcdef.0123456789abcdef
      --token-ttl duration                   The duration before the token is automatically deleted (e.g. 1s, 2m, 3h). If set to '0', the token will never expire (default 24h0m0s)

Global Flags:
  -v, --v Level   log level for V logs

配置忽略Swap相关报错

[root@k8s-master ~]# cat /etc/sysconfig/kubelet 
KUBELET_EXTRA_ARGS="--fail-swap-on=false"

先拉取必要镜像并重新打tag (只在master节点操作即可)

docker pull gcrxio/kube-apiserver-amd64:v1.11.3
docker pull gcrxio/kube-controller-manager-amd64:v1.11.3
docker pull gcrxio/kube-scheduler-amd64:v1.11.3
docker pull gcrxio/kube-proxy-amd64:v1.11.3
docker pull gcrxio/pause:3.1
docker pull gcrxio/etcd-amd64:3.2.18
docker pull gcrxio/coredns:1.1.3

docker tag gcrxio/kube-apiserver-amd64:v1.11.3 k8s.gcr.io/kube-apiserver-amd64:v1.11.3
docker tag gcrxio/kube-proxy-amd64:v1.11.3 k8s.gcr.io/kube-proxy-amd64:v1.11.3
docker tag gcrxio/kube-controller-manager-amd64:v1.11.3 k8s.gcr.io/kube-controller-manager-amd64:v1.11.3
docker tag gcrxio/kube-scheduler-amd64:v1.11.3 k8s.gcr.io/kube-scheduler-amd64:v1.11.3
docker tag gcrxio/coredns:1.1.3 k8s.gcr.io/coredns:1.1.3
docker tag gcrxio/etcd-amd64:3.2.18 k8s.gcr.io/etcd-amd64:3.2.18
docker tag gcrxio/pause:3.1 k8s.gcr.io/pause:3.1

k8s.gcr.io/pause:3.1是为pod提供底层基础的容器,它仅为pod分配网络名称空间,IP地址、主机名和存储卷。

2. kubeadm初始化

kubeadm init --kubernetes-version=v1.11.3 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

出下如下截图,表示初始化成功


img_f0edf6e5be47835e8f2c0d792cbc96f0.png
image.png

生产环境中,如图中提示,用一个普通用户配置后操作:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

测试环境我就直接用root操作了。

查看各组件状态信息:

[root@k8s-master ~]# kubectl get cs
NAME                 STATUS    MESSAGE              ERROR
controller-manager   Healthy   ok                   
scheduler            Healthy   ok                   
etcd-0               Healthy   {"health": "true"}

在node1和node2执行以下命令,以加入k8s集群:

kubeadm join 192.168.100.135:6443 --token edsptl.yqqaxnrzg3n09bk8 --discovery-token-ca-cert-hash sha256:ce4ee322a957729cdb0f59ba9d6be15edd585ba1a7a605e6c5a70f54aadc7d2f --ignore-preflight-errors=Swap

# 拉镜像和打tag,以下两个镜像是node节点运行起来的必要镜像
docker pull gcrxio/pause:3.1
docker pull gcrxio/kube-proxy-amd64:v1.11.3
docker tag gcrxio/pause:3.1 k8s.gcr.io/pause:3.1
docker tag gcrxio/kube-proxy-amd64:v1.11.3 k8s.gcr.io/kube-proxy-amd64:v1.11.3

在master节点查看节点信息,可以看到node1和node2已经加入集群了:

[root@k8s-master ~]# kubectl get nodes
NAME                 STATUS     ROLES     AGE       VERSION
k8s-master.fhw.com   NotReady   master    19m       v1.11.3
k8s-node1.fhw.com    NotReady   <none>    48s       v1.11.3
k8s-node2.fhw.com    NotReady   <none>    7s        v1.11.3

之所为STATUS是NotReady (未就绪状态),是因为缺少网络插件flannel或calico。这里我们用flannel做为集群的网络插件。

3. 在master部署flannel

# kubernetes 1.7以上的版本,可以直接执行如下命令部署flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

出现下图,并不表示flannel已经部署成功了。


img_fdf6442c69099ef29ec5b58ddc97ac33.png
image.png

此时在拉取flannel的镜像,有点慢。。。,等待flannel的pod变为Running状态才是成功了。


img_f6546756c87bc0a0f35e392f1a0da40c.png
image.png

从上图还可以看出coredns的状态为ImagePullBackOff, 这表示镜像拉取失败了。可以通过命令kubectl describe pod coredns-78fcdf6894-dqjzn -n kube-system查看Events :

img_2ab8dc7ee481d087e629d64f991b414b.png
image.png

可以看到确实是拉取镜像k8s.gcr.io/coredns:1.1.3失败了。

再看一下coredns的pod是部署在哪个节点上:


img_5cdb1d2af464e55d6735a15469490310.png
image.png

图中是部署在node1节点,再查看另一个coredns 的pod是部署在哪个节点上。然后在对应的节点主机上手动拉取镜像。
解决方法如下:

# 拉取coredns的镜像再重新打tag
docker pull coredns/coredns:1.1.3
docker tag coredns/coredns:1.1.3 k8s.gcr.io/coredns:1.1.3

镜像拉下来后,过一会再次查看coredns的状态是否为Running

img_65cabc0a177d640dd64b6b8153906f04.png
image.png

再看看各个节点状态


img_674ffdbabea162605ad0680e73889a33.png
image.png

三个节点都已经是Ready状态了。

4. 扩展Pod的副本个数

获取deployment

[root@k8s-master .kube]# kubectl get deployment -n kube-system
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
coredns   2         2         2            0           14h

AVAILABLE为0表示coredns可用的pod个数为0,也就是部署两个coredns pod都没有成功,原因就是第3小节中coredns的镜像拉取失败造成的。

扩展pod数量

[root@k8s-master .kube]# kubectl scale --replicas=3 deployment/coredns -n kube-system
deployment.extensions/coredns scaled

coredns镜像拉取失败的问题解决后,再次查看deployment:

[root@k8s-master ~]# kubectl get deployment -n kube-system
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
coredns   3         3         3            3           14h

此时3个coredns pod都正常运行,AVAILABLE值变为3了。

5. 配置kubectl子命令自动补全

先确认当前shell

[root@k8s-master ~]# echo $SHELL
/bin/bash

安装必要的包

yum install bash-completion -y
# 当前shell为bash:
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

# 如果当前shell为zsh:
source <(kubectl completion zsh)
echo "source <(kubectl completion zsh)" >> ~/.bashrc

6. 部署K8S Dashboard

6.1 部署

在Github上: https://github.com/kubernetes/dashboard 在这个页面上获取部署K8S Dashboard的命令:

img_d575bc3b9e12f063bf9ef93de3ce837c.png
image.png

先将kubernetes-dashboard.yaml下载下来,修改一些东西

wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

修改镜像为siriuszg/kubernetes-dashboard-amd64:v1.10.0

img_85178cfbe82bfdb1b0d4e123bcd1fa10.png
image.png

修改Service类型为NodePort,这样可以从K8S集群外部访问Dashboard;添加nodePort: 30001, 指定外部访问时用的端口。

img_741f0d93f767bd33bf7f6a8cd6a187c5.png
image.png

执行如下命令部署Kubernetes Dashboard:

kubectl apply -f kubernetes-dashboard.yaml

注意:以上命令依赖谷歌的镜像:k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0,国内因为网络原因无法正常拉取此镜像。通过如下命令生成所需要的镜像:

如果遇到如下问题,注意查检firewalld服务是否停用。

Error while initializing connection to Kubernetes apiserver. This most likely means that the cluster is misconfigured (e.g., it has invalid apiserver certificates or service account's configuration) or the --apiserver-host param points to a server that does not exist. Reason: Get https://10.96.0.1:443/version: dial tcp 10.96.0.1:443: getsockopt: no route to host

停止firewalld服务:systemctl stop firewalld, systemctl disable firewalld, firewalld服务启动会影响K8S集群中的Pod之间相互访问。

获取kubernetes-dashboard的Service


img_48c3b807e6e50357a51118db7341672f.png
image.png

浏览器访问:https://192.168.100.135:30001/,出现下图界面


img_fd9cea61a4eebdfdb8409d2e7a86c4e2.png
image.png

这表明Dashboard已经成功部署,接下来配置认证信息。

6.2 配置认证信息

从上图中可以看出有Kubeconfig令牌两种认证方法。
认证时的账号必须为ServiceAccount: 被Dashboard Pod拿来由Kubernetes进行认证。

令牌认证(也就是token认证)
创建ServiceAccount,根据其管理目标,使用rolebinding或clusterrolebinding绑定至合理的role或clusterrole。

创建serviceaccount

kubectl create serviceaccount dashboard-admin -n kube-system

dashboard-admin与集群管理员建立绑定关系

[root@k8s-master ~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created

--serviceaccount=NAMESPACE:SERVICEACCOUNT

获取dashboard-admin这个serviceaccount的secret信息:

[root@k8s-master ~]# kubectl get secrets -n kube-system | grep dashboard-admin
dashboard-admin-token-fg5s8                      kubernetes.io/service-account-token   3         7m
[root@k8s-master ~]# 
[root@k8s-master ~]# 
[root@k8s-master ~]# kubectl describe secrets dashboard-admin-token-fg5s8 -n kube-system 
Name:         dashboard-admin-token-fg5s8
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=dashboard-admin
              kubernetes.io/service-account.uid=0f74c4f6-d2d7-11e8-8078-000c29eced73

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tZmc1czgiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMGY3NGM0ZjYtZDJkNy0xMWU4LTgwNzgtMDAwYzI5ZWNlZDczIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.RzDorq-mQ8Mwb75LGKKC4vd5SRzxq7d7GxD9pG43xi4WCoftiIIBI38WvWGBn5MXYYFVwDqjkNfLMJStMTXiJomlLd7xJtGphdHJ8PR-jnyIGksDiNFicUOKjG7k6OGkKbCfIPb0cPglcNfceO8aNzRadiTasgoXLyxCpYRQd6kH4rx4UVLUWkEjWYTG4PNkNVjA4duRZ2FuKCdpqhysGwiQo9RMzUF9rTQToCQlu-N-UmsRqsGDAnx6GuZNX5BC97Yrzw1iRiFboekm2-RtGZPYczkVN7N9cP4GQPaNfoPVSpNPDx-y-Go_XqENdiniPQzwq9cUFON1l177hyo_RQ

上述输出结果中的token就是服务账户dashboard-admin的认证令牌。将token的值复制至浏览器登录。


img_0a3fa4bab24eb81868f85158083137dd.png
image.png

登录成功。

创建Kubeconfig认证
这里我们创建一个只对default这个名称空间有操作权限的账户。

创建一个serviceaccount

[root@k8s-master ~]# kubectl create serviceaccount def-ns-admin -n default
serviceaccount/def-ns-admin created

由于我们想让def-ns-admin这个账号只对default名称空间有管理员权限,所以必须用rolebinding去绑定role,这样这个账号才只对这一个名称空间有管理员权限。

[root@k8s-master ~]# kubectl create rolebinding def-ns-admin --clusterrole=admin --serviceaccount=default:def-ns-admin
rolebinding.rbac.authorization.k8s.io/def-ns-admin created

这里我把rolebinding和serviceaccount都命名为def-ns-admin,不要搞混淆了。

获取def-ns-admin的secret,利用它的token来生成kubeconfig文件:

[root@k8s-master ~]# kubectl get secrets  | grep def-ns-admin
def-ns-admin-token-6jr4v   kubernetes.io/service-account-token   3         9m
[root@k8s-master ~]# 
[root@k8s-master ~]# 
[root@k8s-master ~]# 
[root@k8s-master ~]# kubectl describe secrets def-ns-admin-token-6jr4v 
Name:         def-ns-admin-token-6jr4v
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=def-ns-admin
              kubernetes.io/service-account.uid=02d5e211-d2d9-11e8-8078-000c29eced73

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  7 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZi1ucy1hZG1pbi10b2tlbi02anI0diIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJkZWYtbnMtYWRtaW4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwMmQ1ZTIxMS1kMmQ5LTExZTgtODA3OC0wMDBjMjllY2VkNzMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpkZWYtbnMtYWRtaW4ifQ.nrNVbuxrJra-cp3BOnWPzfbeQc_0Xe1E0xVzkDkxY6rJ9HexP4fbJIBvUmiqWyoFs5Yq9TT9wRQ_6kaOus0wjcjd7HWx5ZZzui-_UyQzvc3PRqwvWvn11ldLLHAz-7CM37Bcmm-eorj3JOeDvJF4OiloKiAPZ-9xxMQagqckSfa_VB7GGfOzOuRiRSi_fbC5ii81qCvAZxwgqIKFDhUUhXICOQVnZEW5FxMPdZAvYNziug6Ze7iPiAhFysq4ErUHBXzV6D1jghjNYiq01WkAbCmz7uLj7JVatJB9K28da-Wqc6cEBrP80uAfky9f4kz0SglxwqFVrXTd8X_GMqjd2Q

set-cluster

[root@k8s-master pki]# kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.crt --server="https://192.168.100.135:6443" --embed-certs=true --kubeconfig=/root/def-ns-admin.conf
Cluster "kubernetes" set.

查看:

[root@k8s-master pki]# kubectl config view --kubeconfig=/root/def-ns-admin.conf 
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://192.168.100.135:6443
  name: kubernetes
contexts: []
current-context: ""
kind: Config
preferences: {}
users: []

set-credentials

[root@k8s-master ~]# DEF_NS_ADMIN_TOKEN=$(kubectl get secrets def-ns-admin-token-6jr4v -o jsonpath={.data.token} | base64 -d)
[root@k8s-master ~]# 
[root@k8s-master ~]# 
[root@k8s-master ~]# kubectl config set-credentials def-ns-admin --token=$DEF_NS_ADMIN_TOKEN --kubeconfig=/root/def-ns-admin.conf 
User "def-ns-admin" set.

查看


img_8de0e4d720bf5997ec2562b985566bca.png
image.png

set-context

kubectl config set-context def-ns-admin@kubernetes --cluster=kubernetes --user=def-ns-admin --kubeconfig=/root/def-ns-admin.conf
Context "def-ns-admin@kubernetes" created.

查看


img_ac89863917bd51648d85b9adca094704.png
image.png

use-context

[root@k8s-master ~]# kubectl config use-context def-ns-admin@kubernetes --kubeconfig=/root/def-ns-admin.conf 
Switched to context "def-ns-admin@kubernetes".
img_279600c118d271e8f9967b201b7277fc.png
image.png

现在/root/def-ns-admin.conf这个文件就可以做为Kubeconfig认证的文件了。

将def-ns-admin.conf这个文件复制至浏览器所在系统上。使用Kubeconfig认证方式:


img_a91861f198c218b9b58c943396358868.png
image.png

成功登录,并且只对default名称空间有管理权限:


img_20793063a7fbe83d9b2563d0626aa8bb.png
image.png
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
5天前
|
Kubernetes Java 数据库连接
实时计算 Flink版产品使用合集之如何打包到Kubernetes(K8s)
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5天前
|
Kubernetes 关系型数据库 MySQL
实时计算 Flink版产品使用合集之在Kubernetes(k8s)中同步MySQL变更到Elasticsearch该怎么操作
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5天前
|
Kubernetes 调度 Docker
Ubantu docker学习笔记(十一)k8s基本操作
Ubantu docker学习笔记(十一)k8s基本操作
|
6天前
|
存储 Kubernetes 监控
容器服务 Kubernetes 版 ACK功能特性
分布式云容器平台ACK One(Distributed Cloud Container Platform for Kubernetes)是阿里云面向混合云、多集群、分布式计算、容灾等场景推出的企业级云原生平台。ACK One可以连接并管理您任何地域、任何基础设施上的Kubernetes集群,并提供一致的管理和社区兼容的API,支持对计算、网络、存储、安全、监控、日志、作业、应用、流量等进行统一运维
36 1
|
7天前
|
Kubernetes 关系型数据库 分布式数据库
【PolarDB开源】PolarDB与Kubernetes集成:容器化部署的最佳实践
【5月更文挑战第21天】本文介绍了将阿里云的高性能数据库PolarDB与容器编排工具Kubernetes集成的步骤。首先,需准备Kubernetes集群和PolarDB Docker镜像,安装Helm。然后,通过Helm部署PolarDB,设置存储类和副本数。接着,应用配置PolarDB连接信息,打包成Docker镜像并在K8s集群中部署。此外,调整PolarDB参数以优化性能,并使用Prometheus和Grafana监控。本文为PolarDB在Kubernetes中的最佳实践提供了指导。
32 4
|
8天前
|
存储 弹性计算 Kubernetes
【阿里云云原生专栏】深入解析阿里云Kubernetes服务ACK:企业级容器编排实战
【5月更文挑战第20天】阿里云ACK是高性能的Kubernetes服务,基于开源Kubernetes并融合VPC、SLB等云资源。它提供强大的集群管理、无缝兼容Kubernetes API、弹性伸缩、安全隔离及监控日志功能。用户可通过控制台或kubectl轻松创建和部署应用,如Nginx。此外,ACK支持自动扩缩容、服务发现、负载均衡和持久化存储。多重安全保障和集成监控使其成为企业云原生环境的理想选择。
155 3
|
1天前
|
存储 监控 Kubernetes
Kubernetes 集群监控与日志管理实践
【5月更文挑战第27天】 在微服务架构日益普及的当下,容器化技术与编排工具如Kubernetes已成为现代云原生应用的基石。然而,随着集群规模的不断扩大和复杂性的增加,如何有效监控和管理这些动态变化的服务成为了维护系统稳定性的关键。本文将深入探讨Kubernetes环境下的监控策略和日志管理的最佳实践,旨在为运维人员提供一套系统的解决思路,确保应用性能的最优化和问题的快速定位。
|
1天前
|
Kubernetes 物联网 区块链
未来技术的脉动:区块链、物联网和虚拟现实的新纪元Kubernetes 集群性能优化实践
【5月更文挑战第27天】 随着科技的飞速发展,新兴技术如区块链、物联网(IoT)和虚拟现实(VR)正在重塑我们的世界。这些技术不仅在逐步成熟,而且在各个行业中找到了创新的应用。区块链技术以其不可篡改和去中心化的特性,为金融交易、供应链管理和身份验证提供了新的解决方案。物联网通过智能设备和系统的互联互通,优化了资源管理并提升了生活品质。而虚拟现实技术则在娱乐、教育和医疗等领域创造了沉浸式体验。本文将深入探讨这些技术的发展趋势和多样化应用场景,展望它们如何共同塑造未来社会的面貌。
|
1天前
|
存储 监控 Kubernetes
Kubernetes 集群的监控与性能优化策略网络安全与信息安全:防范漏洞、加强加密、提升安全意识
【5月更文挑战第27天】 在微服务架构日益普及的背景下,容器编排工具如Kubernetes成为运维工作的核心。然而,随之而来的是监控复杂性增加和性能调优的挑战。本文将深入探讨针对Kubernetes集群的监控方案和性能优化技巧,旨在帮助读者构建一个高效、稳定的容器化环境。通过分析集群资源消耗模式,结合实时监控数据,本文提出了一系列实用的优化措施,以期提高系统响应速度,降低资源浪费,确保服务的高可用性。
|
2天前
|
存储 Kubernetes 监控
Kubernetes 集群的持续性能优化实践
【5月更文挑战第26天】 在动态且复杂的微服务架构中,确保 Kubernetes 集群的高性能和稳定性是至关重要的。本文将探讨一系列实用的策略和工具,用于监控、分析和优化 Kubernetes 集群的性能。通过深入理解资源分配、调度策略以及网络和存储配置的影响,我们能够揭示提升集群效率的关键步骤。文章将结合真实案例,展示如何通过细致的调优过程,实现服务的持续性能提升。