CentOS7 环境部署 kubenetes1,数据库 mysql 面试题
前提
本次实战需要科学上网,才能 kubernetes 相关的操作用于学习和实践;
实战
在 master 节点的控制台上,执行以下命令创建 dashboard 相关资源:
kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
执行以下命令,查看所有服务:
kubectl get services --all-namespaces
控制台输出服务相关信息:
[root@localhost ~]# kubectl get services --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6h25m
default tomcat001 NodePort 10.109.30.238 <none> 8080:30006/TCP 80m
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 6h25m
kube-system kubernetes-dashboard ClusterIP 10.102.251.175 <none> 443/TCP 15m
可见 dashboard 服务的 namespace 是 kube-system,但是该服务的类型是 ClusterIP,不便于我们通过浏览器访问,因此需要改成 NodePort 型的;
执行以下命令,创建 dashboard 服务的配置文件:
cat <<EOF > ~/dashboard-svc.yaml
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort
ports:
port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
EOF
删除现有的 dashboard 服务:
kubectl delete service kubernetes-dashboard --namespace=kube-system
用刚刚创建的 yaml 文件创建新的 dashboard 服务:
kubectl create -f ~/dashboard-svc.yaml
再次用 kubectl get 命令查看服务,可见 dashboard 服务的类型已经变成了 NodePort,映射的端口是 32073:
[root@localhost ~]# kubectl get services --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6h33m
default tomcat001 NodePort 10.109.30.238 <none> 8080:30006/TCP 88m
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 6h33m
kube-system kubernetes-dashboard NodePort 10.108.210.180 <none> 443:32073/TCP 13s
想要访问 dashboard 服务,就要有访问权限,这里需要先设置一个 dashboard 服务的权限和绑定关系,执行以下命令创建对应的资源文件 dashboard-svc-account.yaml:
cat <<EOF > ~/dashboard-svc-account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-admin
namespace: kube-system
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard-admin
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
kind: ServiceAccount
name: kubernetes-dashboard-admin
namespace: kube-system
EOF
执行命令创建 ServiceAccount 和 ClusterRoleBinding:
kubectl create -f ~/dashboard-svc-account.yaml
找出 secret,这个 secret 中有 token,该 token 是登录 dashboard 时用到的:
kubectl -n kube-system get secret | grep kubernetes-dashboard-admin
执行的结果如下图所示,红框中的 kubernetes-dashboard-admin-token-wc5tf 就是 dashboard 的 secret:
![在
这里插入图片描述](https://static001.geekbang.org/infoq/a6/a6cfdb786bf3bcdd43500f246bcfb335.jpeg)
查看 kubernetes-dashboard-admin-token-wc5tf 的详情,里面有对应的 token 信息:
kubectl describe -n kube-system secret/kubernetes-dashboard-admin-token-wc5tf \
|grep token:
如下图所示,token:右侧的"eyJhbGciOiJSU…"这一长串字符串就是 token,这是个永久生效的 token,请保存下来:
接下来需要知道 dashboard 对应的 pod 是部署在哪个 node 上的,执行命令:
评论