kubernetes 简单部署 nginx 和 web-ui
? k8s ?    2020-03-05 17:02:47    1367    0    0
gua_l   ? k8s ?

前提

 

基于ubuntu 18.4 已经搭建了一套简单的k8s 集群
kubectl,docker 服务能正常停启

基本环境

lcf@vm1:~/k8s$ kubectl get nodes
NAME   STATUS   ROLES    AGE   VERSION
vm1    Ready    master   5d    v1.12.5
vm2    Ready    <none>   5d    v1.12.5​

master:vm1
node1:vm2

查看本集群中的node

tips : 查看各种对象列表: kubectl get nodes/svc/pods, 默认-n 是 namespace=default , 如果查找不到,可-n 更详细的namespace

 

部署一个最简单的测试应用nginx

创建一个部署和服务

kubectl create deployment nginx --image=nginx
kubectl create service nodeport nginx --tcp 80:80​


创建成功后可查看执行中的pod

lcf@vm1:~/Tekton$ kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
nginx-55bd7c9fd-94tj5   1/1     Running   0          4h33m​


注: 使用--image=nginx 默认是从docker mirror 中pull 镜像,会默认从国外镜像pull , 如果pull 失败时,看到的pod 的状态为:ImagePullBackOff , 当status 不是running 时,需要进一步查看该pod 的执行情况,可以在describe 中看到实际failed 的原因

kubectl describe pod nginx-55bd7c9fd-94tj5​

 


扩展: 如果是连接超时pull失败,可改docker 镜像为阿里镜像,在/etc/docker/daemon.json中加入,注意如果原来已有内容,新增记录时,需以逗号隔开上下文。否则daemon reload后 会因配置文件语法错误无法restart docker

 

/etc/docker/daemon.json
   .......  ,
  "registry-mirrors": ["http://ef017c13.m.daocloud.io"]


获取阿里mirror 的方法,登录进官网https://cr.console.aliyun.com/#/accelerator,在加速镜像中copy 自己的链接http://xxxxxxxx.m.daocloud.io​


修改完registry-mirrors之后,重启docker

systemctl daemon-reload
systemctl  restart docker​


然后重新启动部署

# 在master 即vm1 上重新部署服务
kubectl delete deployments/nginx services/nginx
kubectl create deployment nginx --image=nginx
kubectl create service nodeport nginx --tcp 80:80
kubectl get pods,svc
当pod status是running 时,使用nodeIP:nodeport进行访问​



比如,查看服务nginx 是 可用32746访问

lcf@vm1:~/Tekton$ kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        5d1h
nginx        NodePort    10.110.190.22   <none>        80:32746/TCP   4h44m​


在node 端验证curl localhost:32746 , 本例中是vm2

root@vm2:~# curl localhost:32746
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>​



同理,使用vm2的http://vm2ip:32746 浏览器访问也能显示。


同理,master在k8s里实际是一特殊的node,所以换成vm1ip时也应能正常访问服务,**即当一个服务以节点端口暴露时,应该是可以使用任意结点ip+节点端口访问**



部署k8s 的 WEB UI 应用

https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

参考官网的方法,但是官网的方法直接使用的话,只能通过kubectl proxy在本机上访问ui 的面板。即如果我的集群master 是 vm1  ,我部署完web-ui后,只能在vm1上打开vm1本身浏览器访问本地链接http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ ,网上有些方法可以在执行proxy的时候指定address ,就可以用指定的ip 去访问这个地址,但是后续填token 的时候响应有些问题,所以我没有用这个方法。

这种情况有一个便捷一点的方法就是把这个部署为nodeport 类型的服务,就可以在集群内的任一节点,使用节点ip 加 节点端口去访问。而不是使用上面的地址。

需要在kubectl apply recommended.yaml之前,先修改yaml里的内容,给服务增加一个类型。

1. 官网的标准做法,全部在master 上执行和打开链接

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
kubectl proxy​

see in http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/.​



2. 为了适应实际远程操作服务器的需要做出的调整

2.1先下载上文所说的yaml文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
vi recommended.yaml  #修改文件,找到一个名字为kubernetes-dashboard 的 Service,在spec里面加入type: NodePort


2.2 应用这个文件,创建里面的资源

kubectl apply -f recommended.yaml​


2.3 不需要执行kubectl proxy进行代码,直接查看服务,获取节点端口

lcf@vm1:~/k8s$ kubectl get svc -n  kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.109.133.255   <none>        8000/TCP        24h
kubernetes-dashboard        NodePort    10.96.168.219    <none>        443:30524/TCP   24h​

 

2.4  从2.3可知能使用 ip:节点端口30524访问,比如vm1_ip:30524 或vm2_ip:30524
可以从本机的windows PC 使用 刚才部署的控制面板 https://ip:30524​​



进入控制面板:




使用token 的形式:

创建一个service account ,名称为myuisa或自定义 ,namespace 为kubernetes-dashboard,这个根据上面的yaml创建资源的时候用的namespace
kubectl create serviceaccount myuisa -n kubernetes-dashboard


将帐户myuisa 与集群角色权限绑定起来
 kubectl create clusterrolebinding dashboard-admin --clusterrole=admin --serviceaccount=kubernetes-dashboard:myuisa


查看此帐号的secret name
 kubectl get secret  -n kubernetes-dashboard | grep myuisa
查看此secret的token
 kubectl describe secret myuisa-1-token-xpwhl -n kubernetes-dashboard​



将上方命令结果里的token 拷贝出来,sign in 进入以下界面








Pre: ubuntu 18 vs 14 的差异

Next: ubuntu ISO 的安装定制

1367
Sign in to leave a comment.
No Leanote account? Sign up now.
0 comments
Table of content