• k8s集群安装Ingress,KubeSphere可视化界面安装K8s


    1 安装Ingress

    Ingress 是对集群中服务的外部访问进⾏管理的 API 对象,典型的访问⽅式是 HTTP
    Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管
    通过Ingress发现pod进⾏关联。基于域名访问
    通过Ingress controller实现POD负载均衡
    ⽀持TCP/UDP 4层负载均衡和HTTP 7层负载均衡
    在这里插入图片描述

    步骤:

    (1)部署Ingress controller

    执行下面这个文件,格式是yaml的,读者可以复制以下内容,保存格式为yaml格式的。在这里插入图片描述

    apiVersion: v1
    kind: Namespace
    metadata:
      name: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    
    ---
    
    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: nginx-configuration
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    
    ---
    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: tcp-services
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    
    ---
    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: udp-services
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: nginx-ingress-serviceaccount
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRole
    metadata:
      name: nginx-ingress-clusterrole
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    rules:
      - apiGroups:
          - ""
        resources:
          - configmaps
          - endpoints
          - nodes
          - pods
          - secrets
        verbs:
          - list
          - watch
      - apiGroups:
          - ""
        resources:
          - nodes
        verbs:
          - get
      - apiGroups:
          - ""
        resources:
          - services
        verbs:
          - get
          - list
          - watch
      - apiGroups:
          - "extensions"
        resources:
          - ingresses
        verbs:
          - get
          - list
          - watch
      - apiGroups:
          - ""
        resources:
          - events
        verbs:
          - create
          - patch
      - apiGroups:
          - "extensions"
        resources:
          - ingresses/status
        verbs:
          - update
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: Role
    metadata:
      name: nginx-ingress-role
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    rules:
      - apiGroups:
          - ""
        resources:
          - configmaps
          - pods
          - secrets
          - namespaces
        verbs:
          - get
      - apiGroups:
          - ""
        resources:
          - configmaps
        resourceNames:
          # Defaults to "-"
          # Here: "-"
          # This has to be adapted if you change either parameter
          # when launching the nginx-ingress-controller.
          - "ingress-controller-leader-nginx"
        verbs:
          - get
          - update
      - apiGroups:
          - ""
        resources:
          - configmaps
        verbs:
          - create
      - apiGroups:
          - ""
        resources:
          - endpoints
        verbs:
          - get
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: RoleBinding
    metadata:
      name: nginx-ingress-role-nisa-binding
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: nginx-ingress-role
    subjects:
      - kind: ServiceAccount
        name: nginx-ingress-serviceaccount
        namespace: ingress-nginx
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRoleBinding
    metadata:
      name: nginx-ingress-clusterrole-nisa-binding
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: nginx-ingress-clusterrole
    subjects:
      - kind: ServiceAccount
        name: nginx-ingress-serviceaccount
        namespace: ingress-nginx
    
    ---
    
    apiVersion: apps/v1
    kind: DaemonSet 
    metadata:
      name: nginx-ingress-controller
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    spec:
      selector:
        matchLabels:
          app.kubernetes.io/name: ingress-nginx
          app.kubernetes.io/part-of: ingress-nginx
      template:
        metadata:
          labels:
            app.kubernetes.io/name: ingress-nginx
            app.kubernetes.io/part-of: ingress-nginx
          annotations:
            prometheus.io/port: "10254"
            prometheus.io/scrape: "true"
        spec:
          hostNetwork: true
          serviceAccountName: nginx-ingress-serviceaccount
          containers:
            - name: nginx-ingress-controller
              image: siriuszg/nginx-ingress-controller:0.20.0
              args:
                - /nginx-ingress-controller
                - --configmap=$(POD_NAMESPACE)/nginx-configuration
                - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
                - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
                - --publish-service=$(POD_NAMESPACE)/ingress-nginx
                - --annotations-prefix=nginx.ingress.kubernetes.io
              securityContext:
                allowPrivilegeEscalation: true
                capabilities:
                  drop:
                    - ALL
                  add:
                    - NET_BIND_SERVICE
                # www-data -> 33
                runAsUser: 33
              env:
                - name: POD_NAME
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.name
                - name: POD_NAMESPACE
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace
              ports:
                - name: http
                  containerPort: 80
                - name: https
                  containerPort: 443
              livenessProbe:
                failureThreshold: 3
                httpGet:
                  path: /healthz
                  port: 10254
                  scheme: HTTP
                initialDelaySeconds: 10
                periodSeconds: 10
                successThreshold: 1
                timeoutSeconds: 10
              readinessProbe:
                failureThreshold: 3
                httpGet:
                  path: /healthz
                  port: 10254
                  scheme: HTTP
                periodSeconds: 10
                successThreshold: 1
                timeoutSeconds: 10
    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ingress-nginx
      namespace: ingress-nginx
    spec:
      #type: NodePort
      ports:
      - name: http
        port: 80
        targetPort: 80
        protocol: TCP
      - name: https
        port: 443
        targetPort: 443
        protocol: TCP
      selector:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285

    底层还是通过Nginx实现的
    将创建好的文件通过我们之前的拖拽方式,直接拖拽到k8s文件夹下,如下
    在这里插入图片描述
    应用刚刚上传的配置

     kubectl apply -f ingress-controller.yaml
    
    • 1

    在这里插入图片描述
    查看

    [root@k8s-node1 k8s]# kubectl get pods --all-namespaces
    
    • 1

    在这里插入图片描述
    这⾥master节点负责调度,具体执⾏交给node2和node3来完成,能够看到它们正在下载完成了镜像,并且已经在运行了。
    在上述命令后加 -o wide可以看具体执行在哪个节点下面
    在node2下面可以看到节点
    在这里插入图片描述
    上一篇我们讲到通过yaml来配置Tomcat,这样我们可以通过host和端口直接访问到我们集群中的任意一个节点,例如
    在这里插入图片描述
    但是如果我们集群中该节点挂掉了,那么通过host+端口的方式 就访问不到了,这时候反向代理和负载均衡就能派上用场了。通过域名的方式就可以一举多得。

    (2)创建Ingress规则

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
     name: web
    spec:
     rules:
     - host: tomcat6.kubenetes.com
     http:
     paths:
     - backend:
     serviceName: tomcat6
     servicePort: 80
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    [root@k8s-node1 k8s]# touch ingress-tomcat6.yaml
    #将上⾯的规则,添加到ingress-tomcat6.yaml⽂件中
    [root@k8s-node1 k8s]# vi ingress-tomcat6.yaml 
    [root@k8s-node1 k8s]# kubectl apply -f ingress-tomcat6.yaml
    ingress.extensions/web created
    [root@k8s-node1 k8s]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    在这里插入图片描述
    修改本机的hosts⽂件,添加如下的域名转换规则:

    192.168.56.102 tomcat6.kubenetes.com
    
    • 1

    修改软件下载,SwitchHost

    如果出现保存的时候说没有写入Host权限的话,可以修改一下Host文件的权限,进行写入host。记住打开SwitchHost软件的时候一定是以管理员身份打开才行。
    在这里插入图片描述

    在这里插入图片描述
    如果不行的话,把当前用户的权限也打开一下
    在这里插入图片描述

    最后执行成功。
    在这里插入图片描述
    使用域名成功访问到了。
    在这里插入图片描述
    并且集群中即便有⼀个节点不可⽤,也不影响整体的运⾏。

    2 kubesphere 可视化界面

    默认的dashboard没啥⽤,我们⽤kubesphere可以打通全部的devops链路,kubesphere集成了很多套件,集群要求⽐较⾼
    https://kubesphere.io
    kuboard也很不错,集群要求不⾼
    https://kuboard.cn/support/

    1 简介

    KubeSphere 是在 Kubernetes 之上构建的⾯向云原⽣应⽤的分布式操作系统,完全开源,⽀持多云与多集群管理,提供全栈的 IT ⾃动化运维的能⼒,简化企业的 DevOps ⼯作流。它的架构可以⾮常⽅便地使第三⽅应⽤与云原⽣⽣态组件进⾏即插即⽤ (plug-and-play) 的集成。
    作为全栈的多租户容器平台,KubeSphere 提供了运维友好的向导式操作界⾯,帮助企业快速构建⼀个强⼤和功能丰富的容器云平台。KubeSphere 为⽤户提供构建企业级 Kubernetes 环境所需的多项功能,例如多云与多集群管理、Kubernetes 资源管理、DevOps、应⽤⽣命周期管理、微服务治理(服
    务⽹格)、⽇志查询与收集、服务与⽹络、多租户管理、监控告警、事件与审计查询、存储管理、访问权限控制、GPU ⽀持、⽹络策略、镜像仓库管理以及安全管理等。
    KubeSphere 还开源了 Kubekey 帮助企业⼀键在公有云或数据中⼼快速搭建 Kubernetes 集群,提供单节点、多节点、集群插件安装,以及集群升级与运维。
    在这里插入图片描述

    2、安装

    对于刚接触 KubeSphere 并想快速上⼿该容器平台的⽤户,All-in-One 安装模式是最佳的选择,它能够帮助您零配置快速部署 KubeSphere 和 Kubernetes。

    步骤 1:准备 Linux 机器

    若要以 All-in-One 模式进⾏安装,您仅需参考以下对机器硬件和操作系统的要求准备⼀台主机。硬件推荐配置
    因为电脑本身配置的原因,所以这里只在node1节点上进行安装。
    在这里插入图片描述
    备注
    以上的系统要求和以下的说明适⽤于没有启⽤任何可选组件的默认最⼩化安装。如果您的机器⾄少有 8Core CPU 和 16 G 内存,则建议启⽤所有组件。有关更多信息,请参⻅启⽤可插拔组件

    之前在前面的文档中,我们第一次安装好了节点 以后,备份了一次,现在我们要通过那个备份文件快速备份回去。
    在这里插入图片描述
    可以看到备份回去以后,一夜回到了解放前
    在这里插入图片描述
    然后现在重新配置节点,能给多大内存就给多大内存。我的电脑配置是
    i7 12700H 32+512G的
    不要超过那条红线的开始节点就行。

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    节点要求
    节点必须能够通过 SSH 连接。
    节点上可以使⽤ sudo / curl / openssl 命令。
    docker 可以由您⾃⼰安装或由 KubeKey 安装。
    备注
    如果您想离线安装 KubeSphere,请务必提前安装好 docker 。

    依赖项要求
    KubeKey 可以将 Kubernetes 和 KubeSphere ⼀同安装。针对不同的 Kubernetes 版本,需要安装的依赖项可能有所不同。您可以参考以下列表,查看是否需要提前在节点上安装相关的依赖项。
    在这里插入图片描述
    信息
    KubeKey 是⽤ Go 语⾔开发的⼀款全新的安装⼯具,代替了以前基于 ansible 的安装程序。KubeKey 为⽤户提供了灵活的安装选择,可以分别安装 KubeSphere 和 Kubernetes 或⼆者同时安装,既⽅便⼜⾼效。

    ⽹络和 DNS 要求
    必须确保 /etc/resolv.conf 中的 DNS 配置可⽤,否则集群中的 DNS 可能会有问题。
    如果您的⽹络配置使⽤了防⽕墙或安全组,请确保基础设施组件可以通过特定端⼝相互通信。有关更多信息,请参⻅端⼝要求关闭防⽕墙。

    提示
    建议您的操作系统处于⼲净状态(不安装任何其他软件),否则可能会发⽣冲突。
    如果您⽆法从 dockerhub.io 下载容器镜像,建议提前准备好容器镜像或者配置镜像加速器。有关更多信息,请参⻅为安装配置加速器。

    步骤 2:下载 KubeKey

    请按照以下步骤下载 KubeKey。
    如果您能正常访问 GitHub/Googleapis
    如果您访问 GitHub/Googleapis 受限

    先执⾏以下命令以确保您从正确的区域下载 KubeKey。

    export KKZONE=cn
    
    • 1

    在这里插入图片描述

    执⾏以下命令下载 KubeKey

    curl -sfL https://get-kk.kubesphere.io | VERSION=v1.0.1 sh -
    
    • 1

    在这里插入图片描述

    备注
    在您下载 KubeKey 后,如果您将其传⾄新的机器,且访问 Googleapis 同样受限,在您执⾏以下步骤之前请务必再次执⾏ export KKZONE=cn 命令。
    备注
    执⾏以上命令会下载最新版 KubeKey (v1.0.1),您可以修改命令中的版本号下载指定版本。
    为 kk 添加可执⾏权限:

    chmod +x kk
    
    • 1
    步骤 3:开始安装

    在本快速⼊⻔教程中,您只需执⾏⼀个命令即可进⾏安装,其模板如下所示:

    ./kk create cluster [--with-kubernetes version] [--with-kubesphere version]
    
    • 1

    若要同时安装 Kubernetes 和 KubeSphere,可参考以下示例命令:

    ./kk create cluster --with-kubernetes v1.17.9 --with-kubesphere v3.0.0
    
    
    • 1
    • 2

    安装的过程会比较久一点
    在这里插入图片描述安装过程中出现
    在这里插入图片描述
    docker安装失败的原因是因为我们还没有配置docker的阿里云,需要把这个再执行一次。

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
     "registry-mirrors": ["https://azk2srw0.mirror.aliyuncs.com"],
     "exec-opts": ["native.cgroupdriver=systemd"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    备注
    ⽀持的 Kubernetes 版本:v1.15.12, v1.16.13, v1.17.9 (默认), v1.18.6。
    ⼀般来说,对于 All-in-One 安装,您⽆需更改任何配置。
    如果您在这⼀步的命令中不添加标志 --with-kubesphere ,则不会部署 KubeSphere,KubeKey将只安装 Kubernetes。如果您添加标志 --with-kubesphere 时不指定 KubeSphere 版本,则会安装最新版本的 KubeSphere。
    KubeKey 会默认安装 OpenEBS 为开发和测试环境提供 LocalPV 以⽅便新⽤户。对于其他存储类型,请参⻅持久化存储配置。

    步骤 4:验证安装结果

    当您看到以下输出时,表明安装已经完成。
    在这里插入图片描述
    在这里插入图片描述
    当上述容器都已经执行准备就绪的时候,执行一下命令

    输⼊以下命令以检查安装结果。

    kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
    
    • 1

    输出信息会显示 Web 控制台的 IP 地址和端⼝号,默认的 NodePort 是 30880 。现在,您可以使⽤默认的帐户和密码 ( admin /P@88w0rd ) 通过 EIP:30880 访问控制台。
    在这里插入图片描述
    上述已经安装成功了!访问的时候我们用192.68.56.200去访问
    在这里插入图片描述
    在这里插入图片描述

    备注
    您可能需要配置端⼝转发规则并在安全组中开放端⼝,以便外部⽤户访问控制台。
    登录⾄控制台后,您可以在服务组件中查看各个组件的状态。如果要使⽤相关服务,您可能需要等待部分组件启动并运⾏。您也可以使⽤ kubectl get pod --all-namespaces 来检查 KubeSphere 相关组件的运⾏状况。
    在这里插入图片描述
    登录以后可以 去工作台改一下个人密码,规则 大小写 +数字。
    平台管理下
    在这里插入图片描述
    集群管理 下
    在这里插入图片描述
    在这里插入图片描述

    项目管理下:
    在这里插入图片描述

    工作负载下:
    在这里插入图片描述
    自带的kubectl 命令工具
    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    LeetCode--215. 数组中的第K个最大元素(C++描述)
    康托展开与逆康托展开
    这份 Github 下载量高达 76.9W 次的《Java 系列面试宝典》,足以吊打各个大厂面试官
    SourceInsight添加对汇编语言文件.s和.S的支持
    基于Java的电影院管理系统设计与实现
    QLineEdit设置数据的输入范围QIntValidator和QDoubleValidator
    拼多多快捷回复怎么设置
    全波形反演的目标和技术
    GOOGLE/DYNAMICWORLD/V1
    Linux命令(100)之sz
  • 原文地址:https://blog.csdn.net/delete_bug/article/details/126814033