Kubernetes之多集群统一管理工具 360-wayne

3 篇文章 0 订阅
2 篇文章 0 订阅

K8s集群环境说明

主机名系统版本ip地址docker versionkubelet versionkubeadm versionkubectl versionflannel version备注
mastercentos-release-7-7.1908.0.el7.centos.x86_64192.168.137.101Docker 18.09.6V1.14.2V1.14.2V1.14.2V0.11.0master节点
master-wokercentos-release-7-7.1908.0.el7.centos.x86_64192.168.137.102Docker 18.09.6V1.14.2V1.14.2V1.14.2V0.11.0worker&master节点
wokercentos-release-7-7.1908.0.el7.centos.x86_64192.168.137.103Docker 18.09.6V1.14.2V1.14.2V1.14.2V0.11.0worker节点

wayne环境说明

服务名称版本备注
mysql5.7.28
wayne-backendv1.8.5
wayne-frontendlatest

一、wayne安装

本文使用kubernetes集群方式安装,其他安装方式请参考https://360yun.org/wayne/

1.克隆代码仓库

该章节在master节点上执行

1.1 代码克隆

[root@master work]# go get github.com/Qihoo360/wayne

如果提示-bash: go: 未找到命令,则需要先安装go环境,另外由于go命令会识别github.com域名使用git进行克隆该代码仓库,所以也需要安装git命令。如果克隆成功,则直接进入到下一章节。

1.2 git命令安装

[root@master work]# yum install -y git

1.3 go命令安装

参考文档:go环境安装

下载安装包文件

[root@master work]# wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz

解压安装文件到/usr/local目录下

[root@master work]# tar -C /usr/local -xzf go1.13.4.linux-amd64.tar.gz

/usr/local/go/bin 写入PATH环境变量(临时写入)

[root@master work]# export PATH=$PATH:/usr/local/go/bin

永久写入PATH环境变量

[root@master work]# vim /root/.bashrc

在之前PATH的基础上添加 /usr/local/go/bin:
在这里插入图片描述

1.4 代码克隆

[root@master work]# go get github.com/Qihoo360/wayne

默认会将项目克隆到 /root/go/src下,刚刚克隆的项目地址为:/root/go/src/github.com/Qihoo360/wayne/

2.MySQL服务安装

wayne依赖于mysql数据库,所以我们需要先安装一个mysql,如果有现成的可用mysql也可以直接使用。

2.1 修改yaml文件

[root@master work]# cd /root/go/src/github.com/Qihoo360/wayne/
[root@master wayne]# vim hack/kubernetes/mysql.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-wayne
  namespace: default
  labels:
    app: mysql-wayne
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-wayne
  template:
    metadata:
      labels:
        app: mysql-wayne
    spec:
      containers:
      - name: mysql
        image: 'mysql:5.7'
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: 123456
        volumeMounts:
        - mountPath: /etc/mysql/conf.d/
          name: mysql-conf
        - mountPath: /var/lib/mysql/
          name: mysql-data
      volumes:
      - hostPath:
          path: /data/docker/mysql/conf/
        name: mysql-conf
      - hostPath:
          path: /data/docker/mysql/data/
        name: mysql-data

---

apiVersion: v1
kind: Service
metadata:
  labels:
    app: mysql-wayne
  name: mysql-wayne
  namespace: default
spec:
  type: NodePort
  ports:
  - nodePort: 30306
    port: 3306
    protocol: TCP
    targetPort: 3306
  selector:
    app: mysql-wayne

在这里插入图片描述
修改了如上图的五个地方,由上至下分别是:

  1. 根据标签选择节点(因为mysql内存消耗较大,我只有woker节点有足够空间)
  2. 镜像版本号
  3. root用户的密码
  4. 数据及配置的持久化挂载
  5. 暴露服务,提供集群外机器访问

2.2 安装mysql

[root@master wayne]# kubectl apply -f hack/kubernetes/mysql.yaml 

下载镜像过程取决于网速,mysql有三四百兆的大小。

查看是否安装成功

[root@master wayne]# kubectl get pod

在这里插入图片描述
使用Navicat验证mysql服务是否可用
在这里插入图片描述

2.3 数据库初始化

自动初始化(官方推荐)

Wayne 启动会自动创建数据库并初始化数据,使用自动初始化数据库的方式请勿手动创建数据库,否则系统检测到数据库已存在会跳过数据初始化步骤!

3. 部署 Wayne后端

3.1 修改yaml文件

[root@master wayne]# cd /root/go/src/github.com/Qihoo360/wayne
[root@master wayne]# vim hack/kubernetes/wayne-backend.yaml 

主要修改mysql的配置,mysql使用集群的node节点ip地址,例如:192.168.137.103:30306,使用该地址可以不用担心pod重启的问题。
在这里插入图片描述
完整配置文件如下:

apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    app: wayne-backend
  name: wayne-backend
  namespace: default
data:
  app.conf: |-
    appname = wayne
    httpport = 8080
    runmode = prod
    autorender = false
    copyrequestbody = true
    EnableDocs = true
    EnableAdmin = true
    StaticDir = public:static

    # Custom config
    ShowSql = false

    ## if enable username and password login
    EnableDBLogin = true

    # token, generate jwt token
    RsaPrivateKey = "./apikey/rsa-private.pem"
    RsaPublicKey = "./apikey/rsa-public.pem"

    # token end time. second
    TokenLifeTime=86400

    # kubernetes labels config
    AppLabelKey= wayne-app
    NamespaceLabelKey = wayne-ns
    PodAnnotationControllerKindLabelKey = wayne.cloud/controller-kind

    # database configuration:
    ## mysql
    DBName = "wayne"
    DBTns = "tcp(192.168.137.103:30306)"
    DBUser = "root"
    DBPasswd = "123456"
    DBConnTTL = 30

    # web shell auth
    appKey = "860af247a91a19b2368d6425797921c6"

    # Set demo namespace and group id
    DemoGroupId = "1"
    DemoNamespaceId = "1"

    # Sentry
    LogLevel = "4"
    SentryEnable = false
    SentryDSN = ""
    SentryLogLevel = "4"

    # Robin
    EnableRobin = false

    # api-keys
    EnableApiKeys = true

    # Bus
    BusEnable = true

    # Webhook
    EnableWebhook = false
    WebhookClientTimeout = 10
    WebhookClientWindowSize = 16

---

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: wayne-backend
  name: wayne-backend
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wayne-backend
  template:
    metadata:
      labels:
        app: wayne-backend
    spec:
      volumes:
      - name: config
        configMap:
          name: wayne-backend
      containers:
      - name: wayne
        image: 'q8sio/wayne-backend:v1.8.5-12-ga3c729e'
        command:
        - /opt/wayne/backend
        env:
        - name: GOPATH  # app.conf runmode = dev must set GOPATH
          value: /go
        volumeMounts:
        - name: config
          mountPath: /opt/wayne/conf/
        readinessProbe:
          httpGet:
            path: healthz
            port: 8080
          timeoutSeconds: 1
          periodSeconds: 10
          failureThreshold: 3
        imagePullPolicy: Always

---

apiVersion: v1
kind: Service
metadata:
  labels:
    app: wayne-backend
  name: wayne-backend
  namespace: default
spec:
  type: NodePort
  ports:
  - nodePort: 32001
    protocol: TCP
    port: 8080
    targetPort: 8080
  selector:
    app: wayne-backend

3.2 执行yaml文件

[root@master wayne]# kubectl apply -f hack/kubernetes/wayne-backend.yaml

3.3 查看部署情况

[root@master wayne]# kubectl get pod -o wide

可以看到wayne-backend已经部署成功
在这里插入图片描述

3.4 查看数据库

wayne-backend部署成功后,可以到刚刚的数据库中查看,是否有添加wayne的数据库
可以看到,数据库中自动生成了wayne的数据库,该库中有42张表。
在这里插入图片描述

4. 部署 Wayne前端

4.1 修改yaml文件

[root@master wayne]# vim hack/kubernetes/wayne-frontend.yaml

主要是将服务端的ip地址改为可以访问集群的任意ip
在这里插入图片描述
完整配置文件如下:

apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    app: wayne-frontend
  name: wayne-frontend
  namespace: default
data:
  config.js: |-
    window.CONFIG = {
      URL: 'http://192.168.137.102:32001',
      RAVEN: false,
      RAVEN_DSN: 'RAVEN_DSN'
    };

---

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: wayne-frontend
  name: wayne-frontend
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wayne-frontend
  template:
    metadata:
      labels:
        app: wayne-frontend
    spec:
      volumes:
      - name: config
        configMap:
          name: wayne-frontend
          items:
          - key: config.js
            path: config.js
      containers:
      - name: wayne
        image: 'q8sio/wayne-frontend:latest'
        volumeMounts:
        - name: config
          mountPath: /usr/local/openresty/nginx/html/config.js
          subPath: config.js
        imagePullPolicy: Always

---

apiVersion: v1
kind: Service
metadata:
  labels:
    app: wayne-frontend
  name: wayne-frontend
  namespace: default
spec:
  type: NodePort
  ports:
  - nodePort: 32000
    protocol: TCP
    port: 80
    targetPort: 80
  selector:
    app: wayne-frontend

4.2 部署 wayne前端

[root@master wayne]# kubectl apply -f hack/kubernetes/wayne-frontend.yaml

查看部署情况

[root@master wayne]# kubectl get pod

在这里插入图片描述
等待部署过程会下载镜像,该过程可能比较久。注意查看日志。

[root@master wayne]# kubectl logs wayne-frontend-849667c9f4-l5hvz

二、开始使用wayne

1.访问wayne

使用浏览器打开可以访问集群的任一ip地址的32000端口,如下:

http://192.168.137.102:32000

在这里插入图片描述

2.登录

wayne默认的登录账号密码为 admin:admin,如果是部署到生产环境,则一定要修改这个账号密码。

登录成功后,默认进入前台页面。我们可以通过右上角,切换至后台模式。
在这里插入图片描述

3.配置集群

切换至后台管理页面,进入 集群-列表标签,点击关联集群
在这里插入图片描述
填写相关信息:

  • 名称:必填。可以任意填写,该名称即为后面很多操作中的机房名称。
  • Master:必填。需要填写k8s集群中master节点的kube-apiserver的服务地址,如果是多个apiserver高可用,可以随便填写一个的地址。
  • KubeConfig:必填。需要填写搭建集群时,kubelet的配置文件。二进制搭建的集群一般在/root/.kube/config目录下。
  • 集群状态:可选。有在线维护中两个状态,若选择维护中,则该集群暂时不可被操作。
  • MetaData:可选。集群元数据。
  • 描述:可选。描述集群的一些文字

配置示例:
在这里插入图片描述
注意server栏需要填写集群外部可以访问的ip地址

KubeConfig参考:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tL***
    server: https://192.168.137.101:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: admin
  name: kubernetes
current-context: kubernetes
kind: Config
preferences: {}
users:
- name: admin
  user:
    client-certificate-data: LS0tL***
    client-key-data: LS0tL***

4. 查看集群信息

集群配置完成后,可以进入到Kubernetes选项卡查看集群信息,这一栏是集成了dashboard的部分功能。
在这里插入图片描述
可以看到node节点中,有我们集群可用的worker节点,进入其他各个分类中也可以查看其他集群信息。

5. 创建对应Namespace的wayne部门

在这里插入图片描述
进入命名空间-列表选项卡可以看到有一个默认的demo部门,点击左边的三个点的图案,可以编辑其对应的信息。
在这里插入图片描述
我们将k8s对应的命名空间改为集群中已有的命名空间,并勾选刚刚创建的机房,点击提交。

接下来我们再创建一个新的部门test
点击创建命名空间
在这里插入图片描述
k8s命名空间 一栏中,我们填写了一个集群中不存在的namespace,然后再勾选下面的自动创建选项,则wayne会帮我们在集群中自动创建该namespace,选择机房,并提交。

6. 创建用户

在这里插入图片描述
进入 权限-用户列表 选项卡,点击创建用户 按钮
在这里插入图片描述
该页面中的展示一栏是指展示在页面的用户名称,而名称一栏是用于登录的用户名。
填写相关信息,点击提交。

7. 用户关联部门

右上角点击 进入前台按钮 ,进入前台页面。点击成员列表 选项卡,此时会右上角会弹出报错窗口。报错内容为:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'wayne.T0.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

造成该错误的原因:
MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前的行为的说明,请参见“MySQL 5.6参考手册”。)
在这里插入图片描述

7.1 解决sql异常

该部分在woker节点上操作

进入woker节点(wayne-mysql的pod所在节点)中我们之前挂载的目录,并创建自定义的mysql配置文件。

[root@worker ~]# cd /data/docker/mysql/conf/
[root@worker conf]# vim mysql.cnf

写入如下内容:

[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

保存退出。

7.2 重启mysql服务

该部分在master节点上操作

[root@master wayne]# kubectl exec -it mysql-wayne-6d5b84d7db-khc8n -- service mysql restart

在这里插入图片描述
命令格式:kubectl exec -it pod名称需要执行的命令

7.3 用户与部门管理

再次打开wayne前台页面。点击成员列表 选项卡,发现现在已经不会报错了。
在这里插入图片描述
右上角选择我们刚刚创建的部门test,再进入成员列表,点击 关联部门用户
在这里插入图片描述

  • 名称:必填。填写我们之前创建的用户名。
  • 所属群组:必填。我这里选择的是访客的身份。

点击提交。

8. 使用新用户登录

我们打开另外一个浏览器,或者在google浏览器中打开一个新的无痕窗口。输入wayne地址:
在这里插入图片描述
然后我们发现了这个账号居然没有设置密码。。。

8.1 设置用户密码

回到之前登录的admin的窗口,进入后台页面。进入权限-用户列表,选择我们之前创建的用户,点击重置密码。
在这里插入图片描述
设置完密码后,我们再次进入刚刚新的窗口中登录新的用户。

8.2 新用户登录

这个时候,我们再 进行登录,就可以成功进入前台页面。并且可以选择我们的部门test,由于我们赋予的角色权限是 访客 ,所以这个账号只能进行查看集群的一些信息,而不能做任何更改。
在这里插入图片描述

9. 创建项目

使用admin账号,进入前台页面,选择test部门,进入项目列表,点击创建项目按钮。
在这里插入图片描述
点击确认,我们就可以在项目列表中看到我们的项目了。同样在登录julian账号的窗口中,也可以有权限看到我们的项目。

在这里插入图片描述
接下来就可以进入该项目,进行创建部署、负载均衡等操作了。这里 不再做展示了,具体请参考官网的使用文档:wayne用户文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值