Kubernetes 学习笔记(一)--- 基本概念及利用kubeadm部署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的架构图。
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之间通信的网络。
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。
主机准备:
主机名 | 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
出下如下截图,表示初始化成功
生产环境中,如图中提示,用一个普通用户配置后操作:
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已经部署成功了。
此时在拉取flannel的镜像,有点慢。。。,等待flannel的pod变为Running状态才是成功了。
从上图还可以看出coredns的状态为ImagePullBackOff
, 这表示镜像拉取失败了。可以通过命令kubectl describe pod coredns-78fcdf6894-dqjzn -n kube-system
查看Events
:
可以看到确实是拉取镜像k8s.gcr.io/coredns:1.1.3
失败了。
再看一下coredns的pod是部署在哪个节点上:
图中是部署在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
再看看各个节点状态
三个节点都已经是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的命令:
先将kubernetes-dashboard.yaml下载下来,修改一些东西
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
修改镜像为siriuszg/kubernetes-dashboard-amd64:v1.10.0
,
修改Service类型为NodePort
,这样可以从K8S集群外部访问Dashboard;添加nodePort: 30001
, 指定外部访问时用的端口。
执行如下命令部署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
浏览器访问:https://192.168.100.135:30001/,出现下图界面
这表明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的值复制至浏览器登录。
登录成功。
创建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.
查看
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.
查看
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".
现在/root/def-ns-admin.conf这个文件就可以做为Kubeconfig认证的文件了。
将def-ns-admin.conf这个文件复制至浏览器所在系统上。使用Kubeconfig认证方式:
成功登录,并且只对default名称空间有管理权限:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里如何实现100%容器化镜像化?八年技术演进之路回顾
八年时间,阿里集团实现了 100%内部容器化镜像化,经历了几代演进。本文将从最初的架构开始,向大家介绍下阿里内部的容器化演化过程。 PouchContainer 现在服务于阿里巴巴集团和蚂蚁金服集团的绝大部分 BU, 包括交易&中间件,B2B/CBU/ICBU,搜索广告数据库,还有收购或入股的一些公司,比如优酷高德、UC等。其中体量最大的是交易和电商平台,在 2017 年双 11 的时候我们支撑了破纪录的峰值,背后的应用都是跑在 PouchContainer 里面,整体容器实例已经到了百万级规模。使用了 PouchContainer 的应用涵盖了各种各样的场景。这些场景从运行模式来看,有标准的在线 App,还有像购物车、广告、测试环境等比较特殊的场景。不同的场景对 PouchContainer 有不同的使用方式和需求。 从编程
- 下一篇
如何做好网站安全防护,防止被黑客攻击
一、为什么黑客会攻击我? 从最近我收到的很多站长反馈以及我主动去了解的情况来看,相当一部分站长对于自己网站被黑表示非常的不理解,觉得自己的网站不大,弄得又不怎么的,怎么就被黑客盯上了,并挂上了黑链。然后开始怀疑自己是不是表现得太高调了,是不是长得太帅了遭到妒忌了等等。 首先,我非常肯定的告诉大家,黑客攻击绝对不会因为你长得太帅了。从目前的趋势来看,黑客攻击的范围真正是全网段。黑客利用工具对全网的网站进行简单的批量化扫描,然后记录下网站防护没有,本身存在重大漏洞的网站,最后对这些网站进行攻击。所以很多网站是躺着中枪的,没有别的原因。你说有没有可能是故意被人攻击的,这个肯定是有的,但前提是网站足够大,市场竞争激烈。当然也会有些黑客就是闲得蛋疼,随便吃着东西看到一个地址就上手进行测试攻击。 二、黑客都怎么攻击我的? 想要如何防护,最好先了解下黑客们大概都会是一个怎么攻击流程,都是从什么地方入手的。 刚才我们说到黑客用工具扫描全网,发现了一些站点有较大漏洞后,他会到一些网站查询你站点的相关信息,大致了解下网站服务器类型、网站运行的脚本类型,网站的操作系统等。然后用更强大的工具对网站进行注入等测...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7