Centos7 k8s部署dahsboard
一、k8s部署dahsboard
[root@k8s-master ~]# docker pull docker.io/siriuszg/kubernetes-dashboard-amd64:v1.5.1
[root@k8s-master ~]# docker tag docker.io/siriuszg/kubernetes-dashboard-amd64:v1.5.1 192.168.125.130:5000/kubernetes-dashboard:v1.5.1
[root@k8s-master ~]# docker push 192.168.125.130:5000/kubernetes-dashboard:v1.5.1
2、修改配置文件,并创建dashboard
[root@k8s-master ~]# vim kubernetes-dashboard.yaml kind: Deployment apiVersion: extensions/v1beta1 metadata: labels: app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system spec: replicas: 1 selector: matchLabels: app: kubernetes-dashboard template: metadata: labels: app: kubernetes-dashboard # Comment the following annotation if Dashboard must not be deployed on master annotations: scheduler.alpha.kubernetes.io/tolerations: | [ { "key": "dedicated", "operator": "Equal", "value": "master", "effect": "NoSchedule" } ] spec: containers: - name: kubernetes-dashboard image: 192.168.125.130:5000/kubernetes-dashboard:v1.5.1 修改地址为私有仓库得地址 imagePullPolicy: Always ports: - containerPort: 9090 protocol: TCP args: # Uncomment the following line to manually specify Kubernetes API server Host # If not specified, Dashboard will attempt to auto discover the API server and connect # to it. Uncomment only if the default does not work. - --apiserver-host=http://192.168.125.130:8080 修改为api,主节点的IP地址 livenessProbe: httpGet: path: / port: 9090 initialDelaySeconds: 30 timeoutSeconds: 30 --- kind: Service apiVersion: v1 metadata: labels: app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system spec: type: NodePort ports: - port: 80 targetPort: 9090 selector: app: kubernetes-dashboard
[root@k8s-master ~]# kubectl create -f kubernetes-dashboard.yaml
3、node节点安装服务
[root@k8s-node1 ~]#yum install *rhsm* -y
[root@k8s-node1 ~]# systemctl restart kubelet.service
[root@k8s-node1 ~]# systemctl restart kube-proxy.service
4、查看容器
[root@k8s-master ~]# kubectl get deployment --namespace=kube-system 这个是系统功能,需要加上命名空间才能看到 NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE kubernetes-dashboard 1 1 1 1 19m
[root@k8s-master opt]# kubectl get pods --namespace=kube-system NAME READY STATUS RESTARTS AGE kubernetes-dashboard-2518785241-gj838 1/1 Running 0 20m
[root@k8s-master opt]# kubectl get pods --all-namespaces 查看所有容器
5、启动成功之后,访问web页面(输入http://192.168.125.130:8080 )
6、看到如下界面,再输入(http://192.168.125.130:8080 /ui/,即可跳转页面),如果未能跳转页面,则需执行如下步骤
错误现象:
当我们创建完k8s dashboard,试图访问web ui界面的时候如:
dashboard访问地址;http://192.168.125.130:8080/ui
抛出如下错误:
Error: 'dial tcp 192.168.125.130:9090: getsockopt: connection timed out' Trying to reach: 'http://192.168.125.130:9090/'
原因分析:
为什么访问的是8080端口被重定向到了不同的ip和不同的端口呢?
这是因为:
我们首先是通过在 master节点ip:8080/ui (apiserver restful api外部交互总入口)端口去访问dashboard,然后具体的dashboard pod却是在minion/node节点上通过kubelet创建部署的,所以不同的ip和端口就是你实际在Minion/Node节点所创建的ip地址和
端口即其访问端点endpoint。9090应该是你创建dashboard的yaml中自己配置pod的访问端口。
可以通过在master节点使用命令,查看dashboard pod的ip地址。
kubectl describe pod kubernetes-dashboard-2518785241-gj838 --namespace kube-system Name: kubernetes-dashboard-2518785241-gj838 Namespace: kube-system Node: k8s-node2/192.168.125.132 Start Time: Sat, 20 Jun 2020 10:41:03 +0800 Labels: app=kubernetes-dashboard pod-template-hash=2518785241 Status: Running IP: 172.16.100.2 Controllers: ReplicaSet/kubernetes-dashboard-2518785241
因此,问题就明确了,是因为从Master节点无法访问Node节点pod ip+端口而导致的错误。
解决方法:
关闭iptables防火墙 (如果是防火墙原因导致的master节点无法ping通node之上的Pod节点)
systemctl stop iptables
systemctl disable iptables
即使关闭了防火墙跨主机间容器、pod始终无法ping通
这是由于linux还有底层的iptables,所以在node上分别执行:
iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F iptables -L -n
如果从主节点ping Node节点Pod ip地址可以ping通,则查看web ui应该没有问题了。
7、再次访问:http://192.168.125.130:8080/ui,即可自动跳转,得到如下界面
即安装部署成功!!!
二、功能介绍
1、web页面创建pods,选中新副本控制器,点击右上角的创建。
2、填好信息,点击创建容器
3、可以看到已经创建成功了。
4、命名空间,点击Namespace,选择命名空间
12、Workloads介绍
deamon set:一个node节点只能启动一个,适合跑监控pod,日志收集pod
pet sets(1.4后改为stathfull):宠物应用,有状态的,有数据的应用
deployment:畜生应用,随便杀死,没有数据,无状态应用
Job:一次性的任务,合适周期性的执行备份任务。
cronjob:定时任务,k8s里面的
5、其他介绍
三、容器访问方式
1、拓扑图
定义了targetPOrt参数
敲回车,可以访问,后面的都是参数。
2、自定义一个
[root@k8s-master opt]# kubectl get deployment [root@k8s-master opt]# kubectl delete deployment nginx-web [root@k8s-master opt]# kubectl edit deployment nginx-deployment
3、创建svc
[root@k8s-master opt]# vim nginx-svcv2.yaml apiVersion: v1 kind: Service metadata: name: web spec: selector: app: web 刚才得标签名字 ports: - port: 80 targetPort: 80
4、创建svc
kubectl create -f nginx-svcv2.yaml
5、查看详情,看到已经关联了几个pods
6、访问地址
http://192.168.125.130:8080/api/v1/proxy/namespaces/default/services/web/
命名空间使用默认,后面svc=web
访问成功!!!
用nodePOrt,和api代理,都可以访问,对比配置文件
k8s pod访问方式另外还有一种,LoadBalancer,访问效率最高,但是现在都用云主机,就慢慢没有怎么用了。