k8s的基本操作
k8s的基本操作一、入门操作 kubernetes 集群1.测试1.1、部署一个 tomcat1.2、暴露 nginx 访问1).吧tomcat暴露给nginx2).浏览器访问tomcat1.3、动态扩容测试1).扩容3个tomcat2).tomcat扩容后,测试3).缩容,即减少副本1.4、删除1).删除部署deployment2).删除service1.4、以上操作的 yaml 获取2.二、1
k8s的基本操作
- 一、入门操作 kubernetes 集群
- 二、K8S 细节
- 三.KubeSphere
- 四、快速入门
- 四、DevOps
一、入门操作 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
1.4、常用操作
常用 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
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
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_PASSWORD和 123456
1.2.创建 WordPress 密钥
创建一个 WordPress 密钥
WordPress 密钥名称:wordpress-secret
别名 :连接MYSQL密码,
Data 键值对填写 WORDPRESS_DB_PASSWORD和 123456。
此时两个密钥都创建完成。
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 数据库
负载类型:选择 有状态服务
4.添加容器镜像
点击 添加容器镜像,镜像填写 mysql:5.6(应指定镜像版本号),然后按回车键或点击 DockerHub,点击 使用默认端口 。
提示: 注意,在高级设置中确保内存限制 ≥ 1000 Mi,否则可能 MySQL 会因内存 Limit 不够而无法启动。
5.配置 环境变量
下滑至环境变量,在此勾选 环境变量,然后选择 引用配置文件或密钥,
名称填写为 MYSQL_ROOT_PASSWORD,下拉框中选择密钥为 mysql-secret和 MYSQL_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-secret和 WORDPRESS_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
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
第一步: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可以正常访问。
’
更多推荐
所有评论(0)