上一篇,我们已经部署了k8s,但是node状态为NotReady,并且coredns是pending状态。今天我们来解决这个问题,并且把k8s dashboard(可视化界面)部署上去。
coredns是个DNS服务器,它在k8s里面主要是用来发现服务的。那为什么需要服务发现呢?
我们知道Pod是可以动态增加和删除的,并且可能都不在同一个服务器中,这样每个Pod的IP可能是不断变化的。如果是这样,那部署的程序将无法调用的。
这个时候,k8s引入了Service, 每个Service将会关联它selector名称所有的Pod,Service从创建开始,它的IP就不会变化。我们接口调用时,就可以直接调用Service的IP。我们先看一下Service的部署文件:
---
kind: Service
apiVersion: v1
metadata:
name: mozhi-basedata
namespace: mozhi-smartinvent
spec:
type: NodePort
ports:
- port: 44321
targetPort: 80
nodePort: 32056
selector:
name: mozhi-basedata
我们的服务器内网IP是:192.168.124.11,外网IP:20.16.45.21。我们在其他Pod中调用mozhi-basedata的接口,就只需要用192.168.124.11:44321,如果在外网就用20.16.45.21:32056。
哈哈,是不是,我们并不需要关心Pod的IP地址。
接着,就是coredns的作用。我们平常打开百度,并不是在浏览器输入百度的IP吧,我们都是输入域名,因为域名容易记嘛!同样,我们也可以在调用mozhi-basedata服务的时候,直接使用mozhi-basedata名称去访问呢?这个时候coredns就解决了这个问题。具体的应用,我将会在后面的站点部署中详细阐述。
coredns其实还需要依赖一个插件calico(不止这一个,有兴趣的小伙伴可以到去找找),先去官网找到k8s版本对应的calico版本:
https://docs.tigera.io/archive/v3.22/getting-started/kubernetes/requirements
输入命令,拿到部署文件。
curl https://docs.tigera.io/archive/v3.22/manifests/calico.yaml -O
文件会默认放在centos的Home目录下面,拿不到文件的小伙伴,可以后台私信我。
输入命令部署
kubectl apply -f calico.yaml
再来查看pod的情况,可以看到已经在初始化了,这里整个服务器都会卡顿,不要着急,等一等,千万不要做关机操作。如果一直卡,可以把虚拟的CPU和内存调大一点。
kubectl get pods --all-namespaces -o wide
期间,其他的Pod会有几次crashloopbakcoff,不用管它。过一会就会好。如果master node 和pod都正常,就可以进入下一步,部署dashboard。
我们先下载dashboard的yaml文件,这里用的v2.5.1版本。如果raw.githubusercontent.com访问不了,到百度查找,更改/etc/hosts文件。下载不了,同样可以私信我。
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 master
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 master
185.199.110.133 raw.githubusercontent.com
在home文件夹下找到recommended.yaml,编辑Service段落,其他不要去编辑,增加外网访问端口。
---
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort # ":"号后面一定要空格
ports:
- port: 443
targetPort: 8443
nodePort: 32508 #外网访问地址
selector:
k8s-app: kubernetes-dashboard
kubectl apply -f recommended.yaml
当dashboard为running状态时,操作虚拟机的IP地址
ifconfig
在浏览器输入
https://192.168.41.147:32508看是否可以访问。这里一定要用https访问。
home目录下创建admin-user.yaml部署文件
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
kubectl create -f admin-user.yaml
获取登录的token,这个token一直时可用的,执行完后可以保存起来
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
到这里,k8s就算全部完成。可以开始部署我们的.net core程序啦。下一节,我将会部署一个简单的程序上去,敬请期待!
如果你觉得我的文章还不错,欢迎关注,转发和评论。大家也可以在微信公众号和今日头条搜索"墨汁软件"关注我哟!