k8s的基本操作

一、入门操作 kubernetes 集群

K8S部署&DevOps 笔记 ,百度云地址 提取码 1111

1.测试

在node1进行测试,添加tomcat

1.1、部署一个 tomcat

node1即master执行
kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8
在这里插入图片描述
获取kubernetes 的所有资源
kubectl get all
或者
kubectl get all -o wide
在这里插入图片描述
可以看出tomacat部署到node2

如果node2的tomcat停止,会在node2重新拉起一个tomcat
如果node2宕机,会在node3重新拉起一个tomcat
如果node2重新恢复,节点会进入终止状态,terminating
总是保证有一个副本

以上就是节点的容灾恢复的实验

如果某个节点宕机,会自动恢复,在其他节点重新拉取副本

1.2、暴露 nginx 访问

暴露 nginx 访问,也就是把副本暴露出去,让外网访问。如暴露tomcat给nginx

1).把tomcat暴露给nginx

在master即node1,执行
kubectl expose deployment tomcat6 --port=80 --target-port=8080 --type=NodePort
Pod 的 80 映射容器的 8080;service 会代理 Pod 的 80
在这里插入图片描述
查看service
kubectl get svc
或者
kubectl get svc -o wide
在这里插入图片描述

2).浏览器访问tomcat

使用浏览器可以访问tomcat,端口号看上面tomcat的端口号
http://192.168.56.101:31037/
在这里插入图片描述

1.3、动态扩容测试

kubectl get deployment
应用升级 kubectl set image (–help 查看帮助)
扩容: kubectl scale --replicas=3 deployment tomcat6
扩容了多份,所有无论访问哪个 node 的指定端口,都可以访问到 tomcat6

1).扩容3个tomcat

master即node1执行
kubectl scale --replicas=3 deployment tomcat6
在这里插入图片描述

kubectl get all
或者
kubectl get all -o wide
可以看到有3个tomcat 在这里插入图片描述

2).tomcat扩容后,测试

这样的话在node2、node3都可以访问tomcat
使用同一个port
在这里插入图片描述

3).缩容,即减少副本

如减少tomcat为1,
在master即 node1执行
kubectl scale --replicas=1 deployment tomcat6
结果会让其他2个副本进入terminating,即终止状态
在这里插入图片描述

1.4、删除

kubectl get all
kubectl delete deploy/nginx
kubectl delete service/nginx-service
流程;创建 deployment 会管理 replicas,replicas 控制 pod 数量,有 pod 故障会自动拉起新的 pod

1).删除部署deployment

master即node1执行
kubectl delete deployment.apps/tomcat6
在这里插入图片描述
结果,只有service,默认名称空间下没有pod
在这里插入图片描述

2).删除service

kubectl delete service/tomcat6
在这里插入图片描述

1.4、以上操作的 yaml 获取

参照 k8s 细节

二、K8S 细节

1、kubectl–不执行

1.1、kubectl 文档

https://kubernetes.io/zh/docs/reference/kubectl/overview/

1.2、资源类型

资源类型及其缩写
如 services 为svc

https://kubernetes.io/zh/docs/reference/kubectl/overview/#%E8%B5%84%E6%BA%90%E7%B1%BB%E5%9E%8B

1.3、格式化输出

常用
-o wide
-o yaml
如 kubectl get pod web-pod-13je7 -o yaml

https://kubernetes.io/zh/docs/reference/kubectl/overview/#%E6%A0%BC%E5%BC%8F%E5%8C%96%E8%BE%93%E5%87%BA

1.4、常用操作

https://kubernetes.io/zh/docs/reference/kubectl/overview/#%E7%A4%BA%E4%BE%8B-%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C

常用 kubectl 操作:

kubectl apply - 以文件或标准输入为准应用或更新资源。

使用 example-service.yaml 中的定义创建服务。
kubectl apply -f example-service.yaml

5、命令参考
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

2、yaml 语法

2.1、yml 模板

在这里插入图片描述

kubectl expose deployment tomcat6 --port=80 --target-port=8080 --type=NodePort --dry-run -o yaml
在这里插入图片描述
获得tomcat的yaml
在这里插入图片描述
把tomcat的yaml变成yaml文件
kubectl get pod 资源名称 -o yaml > mypod.yaml
在这里插入图片描述
编辑 mypod.yaml

在这里插入图片描述
使用mypod.yaml
kubectl apply -f mypod.yaml
应用此yaml文件在这里插入图片描述

2.2、yaml 字段解析

参照官方文档

2.3、入门操作-核心概念

1、Pod 是什么,Controller 是什么

https://kubernetes.io/zh/docs/concepts/workloads/pods/#pods-and-controllers

Pod 和控制器
控制器可以为您创建和管理多个 Pod,管理副本和上线,并在集群范围内提供自修复能力。
例如,如果一个节点失败,控制器可以在不同的节点上调度一样的替身来自动替换 Pod。
包含一个或多个 Pod 的控制器一些示例包括:
Deployment
StatefulSet
DaemonSet
控制器通常使用您提供的 Pod 模板来创建它所负责的 Pod
在这里插入图片描述

2、Deployment&Service 是什么

在这里插入图片描述

3、Service 的部署-不用执行

1、部署一个 nginx
kubectl create deployment nginx --image=nginx
2、暴露 nginx 访问
kubectl expose deployment nginx --port=80 --type=NodePort
统一应用访问入口;
Service 管理一组 Pod。
防止 Pod 失联(服务发现)、定义一组 Pod 的访问策略
现在 Service 我们使用 NodePort 的方式暴露,这样访问每个节点的端口,都可以访问到这
个 Pod,如果节点宕机,就会出现问题

4、labels and selectors

在这里插入图片描述

5、Ingress

通过 Service 发现 Pod 进行关联。基于域名访问。
通过 Ingress Controller 实现 Pod 负载均衡
支持 TCP/UDP 4 层负载均衡和 HTTP 7 层负载均衡
在这里插入图片描述

步骤:
1)、部署 Ingress Controller
2)、创建 Ingress 规则
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web
spec:
rules:
- host: tomcat6.atguigu.com
http:
paths: - backend:
serviceName: tomcat6
servicePort: 80

如果再部署了 tomcat8;看效果;
kubectl create deployment tomcat8 --image=tomcat:8.5.51-jdk8
kubectl expose deployment tomcat8 --port=88 --target-port=8080 --type=NodePort
kubectl delete xxx 删除指定资源
随便配置域名对应哪个节点,都可以访问 tomcat6/8;因为所有节点的 ingress-controller 路由表是同步的。

2.4 操作

所有命令都在 node1,即master执行

1.部署tomcat服务—yaml方式

部署tomcat有2种,一般、yaml方式。一般方式见标题一的1

1).把tomcat部署到tomcat6-deployment.yaml

kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8 --dry-run -o yaml > tomcat6-deployment.yaml
在这里插入图片描述

2).编辑tomcat6-deployment.yaml

master的root下执行
vi tomcat6-deployment.yaml
修改后为以下内容,为3个副本

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: tomcat6
  name: tomcat6
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat6
  template:
    metadata:
      labels:
        app: tomcat6
    spec:
      containers:
      - image: tomcat:6.0.53-jre8
        name: tomcat
3).使用yaml文件进行tomcat部署

kubectl apply -f tomcat6-deployment.yaml
在这里插入图片描述

4).查看部署情况

kubectl get all
结果:部署3个tomcat已经ok
在这里插入图片描述

5).暴露tomcat

暴露tomcat:为了可以外部进行发访问
kubectl expose deployment tomcat6 --port=80 --target-port=8080 --type=NodePort --dry-run -o yaml
在这里插入图片描述

2.把tomcat的deployment与service进行合并***
1).修改tomcat6-deployment.yaml

把1的5)的执行的结果,添加到tomcat6-deployment.yaml中
在这里插入图片描述

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: tomcat6
  name: tomcat6
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat6
  template:
    metadata:
      labels:
        app: tomcat6
    spec:
      containers:
      - image: tomcat:6.0.53-jre8
        name: tomcat

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: tomcat6
  name: tomcat6
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: tomcat6
  type: NodePort

2).用yaml文件同时创建deployment与service
a.删除原来的tomcat部署

kubectl delete deployment.apps/tomcat6

b.使用yaml文件创建deployment与service

kubectl apply -f tomcat6-deployment.yaml
结果查看,同时创建deployment与service成功
kubectl get all
service 端口号31220在这里插入图片描述

c. 浏览器测试tomcat

node2、node3的ip为101、102,端口号在上图中
http://192.168.56.101:30920/
http://192.168.56.102:30920
在这里插入图片描述

问题:如何使用域名访问tomcat呢?

使用 Ingress

3. Ingress

如何使用域名访问tomcat呢 ?使用Ingress
Ingress底层是nginx
在这里插入图片描述
使用ngress-controller.yaml,做ingress的效果

1).部署 Ingress Controller

kubectl apply -f ingress-controller.yaml
在这里插入图片描述

a.查看创建的信息

kubectl get pods --all-namespaces
在这里插入图片描述

2).创建 Ingress 规则

vi ingress-tomcat6.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: web
spec:
  rules:
   - host: tomcat6.atguigu.com
     http:
       paths:
        - backend:
            serviceName: tomcat6
            servicePort: 80

在这里插入图片描述

a.应用ingress-tomcat6.yaml

kubectl apply -f ingress-tomcat6.yaml
在这里插入图片描述

b.查看结果

kubectl get all
在这里插入图片描述

c.配置域名

在这里插入图片描述

d.测试tomcat

http://tomcat6.atguigu.com/
在这里插入图片描述

三.KubeSphere

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

1、简介

KubeSphere 是一款面向云原生设计的开源项目,在目前主流容器调度平台 Kubernetes 之上构建的分布式多租户容器管理平台,提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时,极大降低开发、测试、运维的日常工作的复杂度。

2、安装-前提添加

2.1、前提条件

https://kubesphere.io/docs/v2.1/zh-CN/installation/prerequisites/
或者
https://v2-1.docs.kubesphere.io/docs/zh-CN/installation/prerequisites/

2.2、安装前提环境

在这里插入图片描述
前提环境 https://v2-1.docs.kubesphere.io/docs/zh-CN/installation/prerequisites/

1、安装 helm(master 节点执行)

Helm 是 Kubernetes 的包管理器。包管理器类似于我们在 Ubuntu 中使用的 apt、Centos
中使用的 yum 或者 Python 中的 pip 一样,能快速查找、下载和安装软件包。
Helm 由客户端组件 helm 和服务端组件 Tiller 组成, 能够将一组 K8S 资源打包统一管理, 是查找、共
享和使用为 Kubernetes 构建的软件的最佳方式。

1)、安装helm

curl -L https://git.io/get_helm.sh | bash
在这里插入图片描述

安装失败

在这里插入图片描述

可以使用安装方式1
或者,
安装方式2,推荐***
使用https://github.com/helm/helm/releases/tag/v2.16.3下载tar.gz压缩包,
在这里插入图片描述
把它上传到linux的/root/k8s下,解压
压缩包解压后变成linux-amd64

tar -zxvf helm-v2.16.3-linux-amd64.tar.gz

把helm、teller粘贴到/usr/local/bin 下,
切换到linux-amd64下

cp helm /usr/local/bin/
cp tiller /usr/local/bin/

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

2)、验证版本

helm version

3)、创建权限(master 执行)

vi helm-rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects: 
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

应用配置
kubectl apply -f helm-rbac.yaml
在这里插入图片描述

2、安装 Tiller(master 执行)

1、初始化helm

helm init --service-account=tiller --tiller-image=jessestuart/tiller:v2.16.3 --history-max 300

在这里插入图片描述

初始化helm失败
helm init --service-account=tiller --stable-repo-url=https://charts.helm.sh/stable --tiller-image=sapcc/tiller:v2.16.3 

执行它,会成功

初始化helm成功

在这里插入图片描述

测试是否安装成功

执行helm,再执行tiller
在这里插入图片描述

查看teller是否部署成功

kubectl get pods --all-namespaces
在这里插入图片描述

2.3.存储类型 StorageClass

安装 OpenEBS 创建 LocalPV 存储类型

1、 准备操作
1).获得所有的节点信息

kubectl get node -o wide

2).确认 master 节点是否有 Taint,

如下看到 master 节点有 Taint
kubectl describe node k8s-node1 | grep Taint
其中k8s-node1为master节点的名称
在这里插入图片描述

3).去掉 master 节点的 Taint:

kubectl taint nodes k8s-node1 node-role.kubernetes.io/master:NoSchedule-
其中其中k8s-node1为master节点的名称
在这里插入图片描述

2、安装 OpenEBS
1).创建 OpenEBS 的 namespace

创建 OpenEBS 的 namespace,OpenEBS 相关资源将创建在这个 namespace 下:

kubectl create ns openebs 

在这里插入图片描述
获取所有的名称空间
kubectl get ns
在这里插入图片描述
helm repo add openebs https://openebs.github.io/charts

2).安装 OpenEBS,建议第3种

安装 OpenEBS,可参其一,建议第二种

第一种.若集群安装了 Helm,安装失败

可通过 Helm 命令来安装 OpenEBS
helm install --namespace openebs --name openebs stable/openebs --version 1.5.0

安装失败
在这里插入图片描述

helm repo remove stable
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update

helm search

发现没有stable/openebs
在这里插入图片描述
再次执行,必须失败啦

helm install --namespace openebs --name openebs stable/openebs --version 1.5.0

查看list
helm repo list
第二种.通过 kubectl 命令安装,可能失败

kubectl apply -f https://openebs.github.io/charts/openebs-operator-1.5.0.yaml
在这里插入图片描述

第三种,直接使用yaml文件安装

借鉴它
目前已经在资源里有,openebs_demo.yaml,已经上传。

把openebs_demo.yaml上传到master的/root/k8s下,执行命令,创建openebs

kubectl apply -f openebs_demo.yaml
安装成功
  • 查看,running说明安装成功
    此处我使用helm安装失败,kubectl 就安装成功。
    kubectl get pods --all-namespaces
    在这里插入图片描述
安装成功
  • 查看StorageClass:是否安装成功
    安装成功
    kubectl get sc
    在这里插入图片描述
3)将 openebs-hostpath设置为 默认的 StorageClass:
kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

在这里插入图片描述
查看openebs-hostpath
kubectl get sc在这里插入图片描述

4).安装结束

至此,OpenEBS 的 LocalPV 已作为默认的存储类型创建成功。
可以通过命令 来查看 OpenEBS 相关 Pod 的状态,若 Pod 的状态都是 running,则说明存储安装成功。

kubectl get pod -n openebs
在这里插入图片描述

a、master 节点 Taint 加上
  • 由于在文档开头手动去掉了 master 节点的 Taint,我们可以在安装OpenEBS 后将 master 节点 Taint 加上,避免业务相关的工作负载调度到 master 节点抢占 master 资源
kubectl taint nodes k8s-node1 node-role.kubernetes.io=master:NoSchedule

注意k8s-node1,是master节点的名称
在这里插入图片描述

3.创建工作负载,测试 StorageClass,可以不做
3.1.创建一个 demo-openebs-hostpath.yaml

其中定义的 Deployment 与 PVC 用作测试,检验 openebs-hostpath 的 StorageClass 是否创建成功:

## 注意,若您的 K8s 版本是 1.15,这里的 apiVersion 需要改为 apps/v1beta1
---
apiVersion: v1
kind: Deployment
metadata:
  name: percona
  labels:
    name: percona
spec:
  replicas: 1
  selector:
    matchLabels:
      name: percona
  template:
    metadata:
      labels:
        name: percona
    spec:
      securityContext:
        fsGroup: 999
      tolerations:
      - key: "ak"
        value: "av"
        operator: "Equal"
        effect: "NoSchedule"
      containers:
        - resources:
            limits:
              cpu: 0.5
          name: percona
          image: percona
          args:
            - "--ignore-db-dir"
            - "lost+found"
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: k8sDem0
          ports:
            - containerPort: 3306
              name: percona
          volumeMounts:
            - mountPath: /var/lib/mysql
              name: demo-vol1
      volumes:
        - name: demo-vol1
          persistentVolumeClaim:
            claimName: demo-vol1-claim
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: demo-vol1-claim
spec:
  storageClassName: openebs-hostpath
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5G
---
apiVersion: v1
kind: Service
metadata:
  name: percona-mysql
  labels:
    name: percona-mysql
spec:
  ports:
    - port: 3306
      targetPort: 3306
  selector:
      name: percona
3.2.使用 kubectl 命令创建相关资源:

kubectl apply -f demo-openebs-hostpath.yaml -n openebs
在这里插入图片描述

问题:执行失败

在这里插入图片描述
修改:Deployment的版本为apps/v1
为啥这么修改?
因为:k8s版本为1.17.3,它的deployment的版本为apps/v1
在这里插入图片描述

3、最小化安装 KubeSphere

最小化安装 KubeSphere

3.1 最小化安装 KubeSphere

1).创建kubesphere-mini.yaml

内容就是kubesphere-minimal.yaml的内容
vi kubesphere-mini.yaml

或者直接使用自己的sdsn资源,已经上传了。

2).应用kubesphere-mini.yaml

kubectl apply -f kubesphere-mini.yaml
在这里插入图片描述
查看安装是否成功
kubectl get pods --all-namespaces
在这里插入图片描述

查看滚动刷新的安装日志
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

在这里插入图片描述

3). 浏览器查看kubesphere控制台

http://192.168.56.100:30880/
用户名: admin
密码: P@88w0rd
在这里插入图片描述

3.2 kubesphere控制台

http://192.168.56.100:30880/ ,用户名admin,密码 P@88w0rd

1.准备
1).扩大节点内存、处理器

扩大node2、node3的节点内存、处理器 在这里插入图片描述

2.开启其他功能
1).开启 Metrics-server 安装

修改 ks-installer 的 configmap
执行命令:

 kubectl edit cm -n kubesphere-system ks-installer

修改的内容为: 在这里插入图片描述
:wq,退出,自动安装软件
在这里插入图片描述

查看滚动刷新的安装日志

kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath=’{.items[0].metadata.name}’) -f
可能需要20分钟

查看安装情况

kubectl get pods --all-namespaces 在这里插入图片描述

2).pod节点失败咋办?

要么等,
要么重启执行 kubectl apply -f kubesphere-mini.yaml
要么,使用下面的方法

查询所有pod节点信息

kubectl get pod --all-namespaces 在这里插入图片描述
如kubesphere-devops-system ks-sonarqube-sonarqube-f68dd5ff5-zzlkz

查看pod的执行过程信息

kubectl describe pod ks-sonarqube-sonarqube-f68dd5ff5-zzlkz -n kubesphere-devops-system
在这里插入图片描述
可以看到拉取镜像:joosthofman/wget:1.0,可能会拉取镜像失败

下载镜像

dockerhub地址:https://hub.docker.com/,可以不登录自己的dockerhub
在dockhub上面搜索镜像,并复制镜地址
在这里插入图片描述
pull拉取镜像

docker pull joosthofman/wget:1.0

在这里插入图片描述

删除pod

删除后,会自动重新创建节点的。

kubectl delete pod  ks-sonarqube-sonarqube-f68dd5ff5-zzlkz -n kubesphere-devops-system
pod运行成功
kubectl get pod --all-namespaces

在这里插入图片描述

3).建立隧道–可以不做

建立隧道,可以使用 浙西云https://cloud.zhexi.tech
可以不建立,直接使用http://192.168.56.100:30880/登录控制台

四、快速入门

http://192.168.56.100:30880 ,用户名admin,密码 P@88w0rd

1.多租户管理快速入门

多租户管理快速入门

1.0 操作示例

平台的资源 共三个层级,包括 集群 (Cluster)、 企业空间 (Workspace)、 项目 (Project) DevOps Project (DevOps 工程),层级关系如下图所示,即一个集群中可以创建多个企业空间,而每个企业空间,可以创建多个项目和 DevOps工程,而集群、企业空间、项目和 DevOps工程中,默认有多个不同的内置角色。
在这里插入图片描述

1.1 集群管理员

第一步:创建角色和账号

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

1).新建一个角色

d登录方式: 用户名admin,密码 P@88w0rd
为该角色授予账号管理和角色管理的权限,然后新建一个账号,给这个账号授予 user-manager 角色。

user-manager
CRUD用户,角色,
授予账号管理角色管理的权限在这里插入图片描述

2).新建一个账户

用户名: atguigu-hr
邮箱: atguigu-hr@guigu.com
分配角色: user-manage
密码: Qwer123456
在这里插入图片描述

3).使用新用户atguigu-hr登录

退出admin用户,登录atguigu-hr用户

用户名 atguigu-hr,密码 Qwer123456

a.添加用户

添加用户ws-manager、ws-admin、project-admin、project-regular,密码均为Qwer123456

ws-manager是workspaces-manager
其他都为普通用户cluster-regular在这里插入图片描述
账户管理-添加用户-创建
ws-manager
ws-manager@guigu.com
workspaces-manager
Qwer123456

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

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

1.2 企业空间管理员

第二步:创建企业空间

企业空间 (workspace) 是 KubeSphere 实现多租户模式的基础,是用户管理项目、DevOps 工程和企业成员的基本单位。

2.1. ws-manager登录 KubeSphere

退出,登录ws-manager
密码 Qwer123456
ws-manager 有权限查看和管理平台的所有企业空间。

1).创建企业空间

创建
gulimall-workspace
谷粒商城企业空间
确定
在这里插入图片描述

2).邀请ws-admin

邀请ws-admin,指定ws-admin 为企业空间管理员,即workspace-admin
在这里插入图片描述

2.2. ws-admin 登录 KubeSphere

退出,登录ws-admin
密码 Qwer123456

1).邀请project-admin、project-regular

进入gulimall-workspace企业空间

邀请project-admin、project-regular,分别分配角色为workspace-regular、workspace-viewer
在这里插入图片描述

1.3 项目和 DevOps 工程管理员

第三步:创建项目
3.1 登录project-admin

登录project-admin
密码 Qwer123456
创建gulimall项目,邀请project-regular进入项目,角色为operator

1).创建gulimall项目、邀请成员

gulimall
谷粒商城
下一步
创建
在这里插入图片描述
进入gulimall项目,邀请project-regular进入项目,角色为operator 。
operator :项目维护者,可以管理项目下除用户和角色之外的资源。所以,project-regular是项目维护者。
在这里插入图片描述

2).创建DevOps工程、邀请成员

创建DevOps工程gulimall-devops,邀请project-regular加入,设置角色maintainer 。
maintainer:DevOps工程的维护者,可以进行项目内凭证配置。

创建DevOps工程:
gulimall-devops
gulimall自动化部署
创建
在这里插入图片描述

创建devops工程失败,

原因没有安装ks-jenkins的pod
再次执行kubectl apply -f kubesphere-mini.yaml
重启安装 ks-jenkins的pod ,即可

邀请成员, project-regular,
分配角色: maintainer
在这里插入图片描述

3.2 登录project-regular

登录 project-regular
密码 Qwer123456
在这里插入图片描述

2.创建 Wordpress 应用并发布至 Kubernetes

创建 Wordpress 应用并发布至 Kubernetes

0.WordPress 简介

WordPress 是使用 PHP 开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的环境中架设属于自己的网站。

  • 本文以创建一个 Wordpress 应用 为例,以创建 KubeSphere 应用的形式将 Wordpress 的组件(MySQL 和 Wordpress)创建后发布至 Kubernetes 中,并在集群外访问 Wordpress 服务。

一个完整的 Wordpress 应用会包括以下 Kubernetes 对象,其中 MySQL 作为后端数据库,Wordpress 本身作为前端提供浏览器访问。

在这里插入图片描述

0.前提条件–project-regular登录

已创建了企业空间、项目和普通用户 project-regular账号(该已账号已被邀请至示例项目),并开启了外网访问,请参考 多租户管理快速入门

1.创建密钥

MySQL 的环境变量 MYSQL_ROOT_PASSWORD即 root 用户的密码属于敏感信息,不适合以明文的方式表现在步骤中,因此以创建密钥的方式来代替该环境变量。创建的密钥将在创建 MySQL 的容器组设置时作为环境变量写入。

1.1.创建 MySQL 密钥
1).创建密钥

项目普通用户 project-regular登录 KubeSphere,创建秘钥。

在当前gulimall项目下左侧菜单栏的 配置中心 选择 密钥,点击 创建
在这里插入图片描述

2).填写密钥的基本信息

填写密钥的基本信息,完成后点击 下一步
名称:作为 MySQL 容器中环境变量的名称,可自定义,例如 mysql-secret
别名:别名可以由任意字符组成,帮助您更好的区分资源,例如 MySQL 密钥
描述信息:简单介绍该密钥,如 MySQL 初始密码

在这里插入图片描述

3).密钥设置页

密钥设置页,填写如下信息,完成后点击 创建
类型:选择 默认(Opaque)
Data:Data 键值对填写
MYSQL_ROOT_PASSWORD123456

在这里插入图片描述

1.2.创建 WordPress 密钥

创建一个 WordPress 密钥

WordPress 密钥名称:wordpress-secret
别名 :连接MYSQL密码
Data 键值对填写 WORDPRESS_DB_PASSWORD123456

此时两个密钥都创建完成。
在这里插入图片描述

1.3 创建存储卷
1.3.1 创建wordpress-pvc
1).点击 创建

在当前项目下左侧菜单栏的 存储卷,点击 创建,基本信息如下。
名称:wordpress-pvc
别名:Wordpress 持久化存储卷
描述信息:Wordpress PVC

2)下一步

完成后点击 下一步,存储类型默认 local,访问模式和存储卷容量也可以使用默认值,
在这里插入图片描述
点击 下一步,直接创建即可。

1.3.2 创建mysql-pvc

在这里插入图片描述
两个都是未挂载,等有人使用才会挂载

2.创建应用

2.1 添加 MySQL 组件
1. 部署新应用

左侧菜单栏选择 应用负载应用,然后点击 部署新应用

2.填写基本信息

基本信息中,参考如下填写,
应用名称:wordpress-application
描述信息:简单介绍该工作负载,方便用户进一步了解

完成后在右侧点击 添加组件

3.添加新组件

MySQL 组件信息

添加mysql新组件

名称: mysql
组件版本:v1
别名:MySQL 数据库
负载类型:选择 有状态服务
a.

4.添加容器镜像

点击 添加容器镜像,镜像填写 mysql:5.6(应指定镜像版本号),然后按回车键或点击 DockerHub,点击 使用默认端口
在这里插入图片描述
提示: 注意,在高级设置中确保内存限制 ≥ 1000 Mi,否则可能 MySQL 会因内存 Limit 不够而无法启动。 在这里插入图片描述

5.配置 环境变量

下滑至环境变量,在此勾选 环境变量,然后选择 引用配置文件或密钥
名称填写为 MYSQL_ROOT_PASSWORD,下拉框中选择密钥为 mysql-secretMYSQL_ROOT_PASSWORD

完成后点击** 右下角 √ **。
在这里插入图片描述

6. 为MySQL 创建一个 PVC 实现数据持久化
1).没有就创建 --不推荐

点击 添加存储卷模板,为 MySQL 创建一个 PVC 实现数据持久化。

参考下图填写存储卷信息。

  • 存储卷名称:必填,起一个简洁明了的名称,便于用户浏览和搜索,此处填写 mysql-pvc
  • 存储类型:选择集群已有的存储类型,如 Local
  • 容量和访问模式:容量默认 10 Gi,访问模式默认 ReadWriteOnce (单个节点读写)
  • 挂载路径:存储卷在容器内的挂载路径,选择 读写,路径填写 /var/lib/mysql
  • 完成后 点击 √
2).有mysql-pvc,使用即可,推荐***

在1的1.3,创建存储卷中
读写 , /var/lib/mysql 在这里插入图片描述

  • 完成后 点击 √,结果如下。
  • 注意:千万不能点击创建
    在这里插入图片描述
2.2 添加 WordPress 组件

上图中,点击添加组件
在这里插入图片描述

1.添加 WordPress 组件

参考如下提示完成 WordPress 组件信息:
名称: wordpress
组件版本:v1
别名:Wordpress 前端
负载类型:默认 无状态服务

2. 添加容器镜像

点击 添加容器镜像,镜像填写 wordpress:4.8-apache(应指定镜像版本号),然后按回车键或点击 DockerHub,点击 使用默认端口
在这里插入图片描述

3.配置 环境变量

下滑至环境变量,在此勾选 环境变量,这里需要添加两个环境变量:

  • 点击 引用配置文件或密钥,名称填写 WORDPRESS_DB_PASSWORD,选择在第一步创建的配置 (Secret) wordpress-secretWORDPRESS_DB_PASSWORD
  • 点击 添加环境变量,名称填写 WORDPRESS_DB_HOST,值填写 mysql,对应的是上一步创建 MySQL 服务的名称,否则无法连接 MySQL 数据库。
  • 完成后点击 √。
4.添加存储卷

点击 添加存储卷,选择已有存储卷 wordpress-pvc,访问模式改为 读写,容器挂载路径 /var/www/html
完成后点击 √。
在这里插入图片描述

5.完成,点击创建

检查 WordPress 组件信息无误后,再次点击 √,此时 MySQL 和 WordPress 组件信息都已添加完成,点击 创建

3.wordpress-外网访问

3.1 设置外网访问

gulimall,应用负载,服务
编辑外网访问,NodePort,确定
在这里插入图片描述在这里插入图片描述

3.2 测试访问

获取外网访问的端口号 在这里插入图片描述
测试,并安装WordPress
http://192.168.56.100:31086/

atguigu.wordpress
lzl
123456
自己6的QQ@qq.com

点击点击安装在这里插入图片描述

3.3 安装成功,并登录

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

四、DevOps

K8S部署&DevOps 笔记 ,百度云地址 提取码 1111

多租户管理快速入门

1.笔记

1、项目开发需要考虑的维度

Dev:怎么开发?
Ops:怎么运维?
高并发:怎么承担高并发
高可用:怎么做到高可用

2、什么是 DevOps

在这里插入图片描述
微服务,服务自治。
DevOps: Development 和 Operations 的组合

  • DevOps 看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。
  • 突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、
    发布更加快捷、频繁和可靠。
  • DevOps 希望做到的是软件产品交付过程中 IT 工具链的打通,使得各个团队减少时间损
    耗,更加高效地协同工作。专家们总结出了下面这个 DevOps 能力图,良好的闭环可以大大增加整体的产出。

3、什么是 CI&CD

在这里插入图片描述

1、持续集成(Continuous Integration)
  • 持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现
    其中的错误。“持续集成”源自于极限编程(XP),是 XP 最初的 12 种实践之一。
  • CI 需要具备这些:
    o 全面的自动化测试。这是实践持续集成&持续部署的基础,同时,选择合适的
    自动化测试工具也极其重要;
    o 灵活的基础设施。容器,虚拟机的存在让开发人员和 QA 人员不必再大费周
    折;
    o 版本控制工具。如 Git,CVS,SVN 等;
    o 自动化的构建和软件发布流程的工具,如 Jenkins,flow.ci;
    o 反馈机制。如构建/测试的失败,可以快速地反馈到相关负责人,以尽快解决
    达到一个更稳定的版本。
2、持续交付(Continuous Delivery)

持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」
(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立
在高水平自动化持续集成之上。
灰度发布。
持续交付和持续集成的优点非常相似:

  • 快速发布。能够应对业务需求,并更快地实现软件价值。
  • 编码->测试->上线->交付的频繁迭代周期缩短,同时获得迅速反馈;
  • 高质量的软件发布标准。整个交付过程标准化、可重复、可靠,
  • 整个交付过程进度可视化,方便团队人员了解项目成熟度;
  • 更先进的团队协作方式。从需求分析、产品的用户体验到交互 设计、开发、测试、运
    维等角色密切协作,相比于传统的瀑布式软件团队,更少浪费。
3、持续部署(Continuous Deployment)

持续部署是指当交付的代码通过评审之后,自动部署到生产环境中。持续部署是持续交付的
最高阶段。这意味着,所有通过了一系列的自动化测试的改动都将自动部署到生产环境。它
也可以被称为“Continuous Release”。
“开发人员提交代码,持续集成服务器获取代码,执行单元测试,根据测
试结果决定是否部署到预演环境,如果成功部署到预演环境,进行整体
验收测试,如果测试通过,自动部署到产品环境,全程自动化高效运转。” 持续部署主要好处是,可以相对独立地部署新的功能,并能快速地收集真实用户的反馈。
“You build it, you run it”,这是 Amazon 一年可以完成 5000 万次部署,
平均每个工程师每天部署超过 50 次的核心秘籍。

下图是由 Jams Bowman 绘制的持续交付工具链图
在这里插入图片描述

2.基于Spring Boot项目构建流水线

基于Spring Boot项目构建流水线
Jenkins 用户手册
流水线

Jenkinsfile in SCM 意为将 Jenkinsfile 文件本身作为源代码管理 (Source Control
Management) 的一部分,根据该文件内的流水线配置信息快速构建工程内的 CI/CD 功能模块,比如阶段 (Stage),步骤 (Step) 和任务 (Job)。因此,在代码仓库中应包含 Jenkinsfile。

1.目的

本示例演示如何通过 GitHub 仓库中的 Jenkinsfile 来创建流水线,流水线共包括 8 个阶段,最终将演示示例部署到 KubeSphere 集群中的开发环境和生产环境且能够通过公网访问。 仓库中的 dependency 分支为缓存测试用例,测试方式与 master 分支类似,对 dependency 的多次构建可体现出利用缓存可以有效的提升构建速度。

2. 前提条件

  • 开启安装了 DevOps 功能组件,参考 安装 DevOps 系统;
  • 本示例以 GitHub 和 DockerHub 为例,参考前确保已创建了 GitHub 和 DockerHub 账号;
  • 已创建了企业空间和 DevOps 工程并且创建了项目普通用户 project-regular 的账号,若还未创建请参考 多租户管理快速入门;
  • 使用项目管理员 project-admin邀请项目普通用户 project-regular加入 DevOps 工程并授予 maintainer角色,若还未邀请请参考 多租户管理快速入门 - 邀请成员。
  • 参考 配置 ci 节点 为流水线选择执行构建的节点。

下面的流程图简单说明了流水线完整的工作过程
在这里插入图片描述

3.创建凭证-project-regular登录

创建凭证

以项目 project-regular 登录 KubeSphere,在 devops-demo 的 DevOps 工程点击 凭证,进入凭证管理界面,以下说明几个在 DevOps 工程中常用的凭证。

在这里插入图片描述

3.0.概念

注意:
GitHub 账号或密码带有 “@” 这类特殊字符,需要创建凭证前对其进行 urlencode 编码,可通过一些 第三方网站进行转换,然后再将转换后的结果粘贴到对应的凭证信息中。
这里需要创建的是凭证(Credential),不是密钥(Secret)。

在 多租户管理快速入门 中已给项目普通用户 project-regular 授予了 maintainer 的角色,因此使用 project-regular 登录 KubeSphere,进入已创建的 devops-demo 工程,开始创建凭证。

1、本示例代码仓库中的 Jenkinsfile 需要用到 DockerHub、GitHub 和 kubeconfig (kubeconfig 用于访问接入正在运行的 Kubernetes 集群) 等一共 3 个凭证 (credentials) ,参考 创建凭证 依次创建这三个凭证。

2、然后参考 访问 SonarQube 并创建 Token,创建一个 Java 的 Token 并复制。

3、最后在 KubeSphere 中进入 devops-demo的 DevOps 工程中,与上面步骤类似,在 凭证 下点击 创建
创建一个类型为 秘密文本的凭证,凭证 ID 命名为 sonar-token,密钥为上一步复制的 token 信息,完成后点击 确定。

3.1.创建 DockerHub 凭证
1). 创建 DockerHub 凭证

点击 创建,创建一个用于 DockerHub 登录的凭证;

凭证 ID:必填,此 ID 将用于仓库中的 Jenkinsfile,此示例中可命名为 dockerhub-id
类型:选择 账户凭证
用户名:填写您个人的 DockerHub 的用户名, lzl123456
token / 密码:您个人的 DockerHub 的密码, 12356789
描述信息:介绍凭证,比如此处可以备注为, DockerHub 登录凭证
在这里插入图片描述
在这里插入图片描述

2).、完成后点击 确定。

在这里插入图片描述

3.2.创建 GitHub 凭证

创建一个用于 GitHub 的凭证,凭证 ID 可命名为 github-id ,类型选择 账户凭证
输入您个人的 GitHub 用户名和密码,备注描述信息,完成后点击 确定

github的账户,密码
用户名已经修改为litianyu0
在这里插入图片描述

3.3.创建 kubeconfig 凭证

同上,在 凭证 下点击 创建,创建一个类型为 kubeconfig的凭证,凭证 ID 可命名为 demo-kubeconfig ,完成后点击 确定

在这里插入图片描述

3.4.创建 SonarQube Token

创建 SonarQube Token

参考 访问内置 SonarQube

0).查看sonar的端口号

master使用命令,查看SonarQube
kubectl get svc --all-namespaces
暴露的端口号是31320
在这里插入图片描述

1)、登入 sonar

使用默认账号 admin/admin登入 sonar,然后点击右上角加号下的 Create new project。

访问SonarQube 主页
http://192.168.56.100:31320/
在这里插入图片描述

a.创建project

登录成功,创建project.
项目名 gulimall-analyze 在这里插入图片描述

168820ba7cbb210497c09330017cc5bbd43ead7c

点击右下角的finish 在这里插入图片描述

b.创建凭证

凭证id: sonar-qube
秘密文本: 168820ba7cbb210497c09330017cc5bbd43ead7c
在这里插入图片描述

4.修改 Jenkinsfile

修改Jenkinsfile

第一步:Fork项目

登录 GitHub,将本示例用到的 GitHub 仓库 devops-java-sample Fork 至您个人的 GitHub。

登录自己的github,用户名6的QQ@qq.com,密码lQQ,点击fork。
在这里插入图片描述

第二步:修改 Jenkinsfile-online

在 GitHub UI 点击编辑图标,需要修改如下环境变量 (environment) 的值。
在这里插入图片描述

1).修改 Jenkinsfile-online

dockerhub凭证id: dockerhub-id
github凭证id: github-id
kubeconfig凭证id: demo-kubeconfig
github账号名: 632078823@qq.com或者litianyu0
sonar-qube凭证id: sonar-qube
在这里插入图片描述
:master分支 Jenkinsfile 中 mvn命令的参数 -o,表示开启离线模式。 删除所有 -o

2).提交 修改

修改以上的环境变量后,点击 Commit changes,将更新提交到当前的 master 分支
在这里插入图片描述

5.创建项目

创建项目

CI/CD 流水线会根据示例项目的 yaml 模板文件,最终将示例分别部署到 kubesphere-sample-dev和 kubesphere-sample-prod这两个项目 (Namespace) 环境中。

第一步:创建第一个项目-project-admin登录
1、创建第一个项目

使用项目管理员 project-admin账号登录 KubeSphere,在之前创建的企业空间 (demo-workspace) 下,点击 项目 → 创建,创建一个 资源型项目,作为本示例的开发环境,填写该项目的基本信息,完成后点击 下一步。

  • 名称:固定为 kubesphere-sample-dev,若需要修改项目名称则需在 yaml 模板文件 中修改 namespace
  • 别名:可自定义,比如 开发环境
  • 描述信息:可简单介绍该项目,方便用户进一步了解
    在这里插入图片描述
    在这里插入图片描述
2、创建成功

本示例暂无资源请求和限制,因此高级设置中无需修改默认值,点击 创建,项目可创建成功。

第二步:创建第二项目

名称为 kubesphere-sample-prod的项目,作为生产环境
在这里插入图片描述

第三步:邀请成员project-admin登录
第一个项目邀请成员

两个个项目创建完后,邀请当前的项目普通用户 **project-regular进入 kubesphere-sample-dev项目,进入「项目设置」→「项目成员」,点击「邀请成员」选择邀请 project-regular并授予 operator角色,若对此有疑问可参考 多租户管理快速入门 - 邀请成员 。
在这里插入图片描述

第二个项目邀请成员

邀请普通用户 project-regular进入 kubesphere-sample-prod项目并授予 operator角色。
在这里插入图片描述

6.创建流水线

创建流水线

第一步:填写基本信息
1、创建流水线

进入已创建的 DevOps 工程,选择左侧菜单栏的 流水线,然后点击 创建
在这里插入图片描述

2、输入基本信息
  • 在弹出的窗口中, 输入流水线的基本信息.
  • 名称:demo-cicd
  • 描述信息:简单介绍流水线的主要特性,帮助进一步了解流水线的作用
  • 代码仓库:点击选择代码仓库,代码仓库需已存在 Jenkinsfile
    在这里插入图片描述
第二步:添加仓库

1、点击代码仓库,以添加 Github 仓库为例。

2、点击弹窗中的 获取 Token。
在这里插入图片描述
3、获取 token,如 demo-cicd点击 Generate token
在这里插入图片描述
4、复制生成的 token,在 KubeSphere Token 框中输入该 token 然后点击保存。
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
在这里插入图片描述

5、验证通过后,右侧会列出此 Token 关联用户的所有代码库,选择其中一个带有 Jenkinsfile 的仓库。比如此处选择准备好的示例仓库 devops-java-sample,点击 选择此仓库,完成后点击 下一步。
在这里插入图片描述
在这里插入图片描述

第三步:高级设置

完成代码仓库相关设置后,进入高级设置页面,高级设置支持对流水线的构建记录、行为策略、定期扫描等设置的定制化,以下对用到的相关配置作简单释义。

1、分支设置

分支设置中,勾选 丢弃旧的分支,此处的 保留分支的天数 和 保留分支的最大个数 默认为 -1。
在这里插入图片描述

2、修改脚本路径

默认的 脚本路径 为 Jenkinsfile,请将其修改为 Jenkinsfile-online
在这里插入图片描述

3、删除某策略

行为策略中,KubeSphere 默认添加了三种策略。由于本示例还未用到 从 Fork 仓库中发现 PR 这条策略,此处可以删除该策略,点击右侧删除按钮

4、选择扫描机制

在 扫描 Repo Trigger 勾选 如果没有扫描触发,则定期扫描,扫描时间间隔可根据团队习惯设定,本示例设置为 5 minutes。
在这里插入图片描述

5、webhook 推送设置

在这里插入图片描述
复制此地址,在自己github设置
在这里插入图片描述
在这里插入图片描述

6.创建

完成高级设置后点击 创建。
在这里插入图片描述

第四步:运行流水线

可以停止运行,修改github的pom依赖,让他父仓库下载,拉取项目速度快点
版本修改,删除远程仓库 在这里插入图片描述
重新启动

在这里插入图片描述
1、点击右侧 运行,将根据上一步的 行为策略 自动扫描代码仓库中的分支,在弹窗选择需要构建流水线的 master分支,系统将根据输入的分支加载 Jenkinsfile-online (默认是根目录下的 Jenkinsfile)。

2、由于仓库的 Jenkinsfile-online 中 TAG_NAME: defaultValue没有设置默认值,因此在这里的 TAG_NAME可以输入一个 tag 编号,比如输入 v0.0.1

3、点击 确定,将新生成一条流水线活动开始运行。

至此,流水线 已完成创建并开始运行。

问题1:docker , 防止容器自动退出

docker 新手向 - 防止容器自动退出的解决方案
https://segmentfault.com/a/1190000017967660

问题2:解决Github连接失败的问题

解决Github连接失败的问题
安装流水线,github总是连接不上
错误原因

  • 网络不通
  • 本地DNS无法正确解析地址

解决方案
打开C:\Windows\System32\drivers\etc\hosts文件:
在最后加入内容:

192.30.255.112  github.com git 
185.31.16.184 github.global.ssl.fastly.net  12

至此问题解决,github可以正常访问。

谷粒商城集群篇

Logo

开源、云原生的融合云平台

更多推荐