本篇文章会教你部署k3s、traefik、基于coding平台的CI/CD流水线以及使用Let’s Encrypt获取证书

准备工作

  • 云主机一台
  • 开通coding coding.net 并建立仓库,选中持续集成,持续部署,制品管理三个模块

流程: 白嫖腾讯云构建能力,构建镜像 -> 使用部署能力,部署字符间距在哪里设置到自建K3s上

过程中如果对k8s不熟悉,建议去查看官方文档,文档还是挺全的,服务器内存和台式机内存区别主要理解

  • pods
  • deployments
  • configMaps
  • services
  • ingresses

这些看一下基本上够用了容器云,再看下配置文件怎么写的

构建镜像

先在你的gi腾讯已停服的手机游戏thub上创建一个仓库,coding的仓库也可以

然后点击: 持续集成 – 构建计cicd是什么意思划 – 新建构建计划

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

Docker 镜像推送

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

此处可选 github 的代码,给个授权就可以

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

填好镜像名称、位置、目录

镜像版本可以自己手写,自己的项目用 latest 就好

推送制品库时新建一个即可

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

完成后构建一下容器云试试,构建完成后在制品管理中可以看到该制品

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

在持续集容器云成 – 构建计划中找到你的计划,点开后打开触发规则,简单配置就是master有推送时就构建

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

至此,构建镜像完成,接下来搭建k3s

K3s 搭建腾讯视频下载

安装

curl -sfL http://rancher-mirror.cnranch服务器内存条可以用在台式机上吗er.com/k3s/k3s-install服务器租用多少钱一年.sh | IN字符STALL_K3S_MIRROR=cn INSTALL_K3S_EXEC='server --tls-san xx.xx.xx.腾讯体育xx' sh -

xx.xx 为你的IP地址,外网访问需要让K3s生成你服务器IP的自签名证书

安装完成后输入 kubectl get pods 此时应该可以看到一些pod,如果提示没有权限,去搜一下如何开启root账户

然后下载 /etc/rancher/k3s/k3s.yaml 如果里面的 server 为127.0.0.1,就改成https://服务器IP:6443

在腾讯云服务器安全服务器组里开放端口

  • TCP:30000-32768 – K8S POD 直接暴露外网的端口
  • UDP:30000-32768 – K8S POD 直接暴露外网的端口
  • TCP:64腾讯体育43 k3s外网访问端口

管理

打开 Lens (一个k8s管理工具,非常好用,自腾讯课堂行下载)

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

选择右下角+,添加 kubeconfig,将k3s.yaml粘贴进去,Lens首页就能看见新增的项目,点卡,连接,理论上现在能连上了。

这是我部署完服务的状态

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

lens连接上机器后下面有个+,选择Create resource,可以部署文件,稍后会用到

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

密钥

拉取镜像需要密钥

参考这个文腾讯视频下载章 > help.co容器所能容纳什么叫做容器的容积ding.net/docs/cd/que…

部署服务

持续部署 – K8s – 立即关字符间距加宽2磅怎么设置

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

接下来会跳转到部署控制台

左侧选择云账号,绑定云账号,选择K8S,认证方式用Kubeconfig,将之前的k3s.y字符am字符型变量l粘贴进去

勾上 接受非认证证字符间距在哪里设置书 & 允许持续部署管理集群已有资源

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)
左侧选择主机管理,添加堡垒机,根据要求执行一下命令

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

左侧选择应用,右上角创建应用,进去后创建流程,直接使用空白流程即可

此处需要使用的为Manifest,建议新建一个仓库扔字符常量到coding上,只存放配置文件

这里给出三个示例

deployment字符串是什么意思 与 service 必须字符是什么有,conCI/CDfig可选

apiVersion: v1
kind: Service
metadata:
  name: backend
  annotations:
    app.kubernetes.io/version: 0.0.1
  labels:
    app: backend
    version: backend1
spec:
  selector:
    app: backend
    version: backend1
  ports:
    - port: 3000 # 暴露的端口
      name: http
      targetPort: 3000
      nodePort: 30008 # 暴露的pod端口
  type: NodePort
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
  annotations:
    strategy.spinnaker.io/versioned: "false"
    app.kubernetes.io/version: 0.0.1
  labels:
    app: backend
    version: backend1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backend
      version: backend1
  template:
    metadata:
      labels:
        app: backend
        version: backend1
    spec:
      containers:
        - name: xxx-backend
          image: xxx-backend:latest # 镜像地址
          imagePullPolicy: Always
          ports:
            - containerPort: 3000
              name: http
          volumeMounts:
            - mountPath: xxx/config.docker.yaml # 挂载的config 没有的话可以去掉
              name: backendconfig
              subPath: config.docker.yaml
          resources:
            limits:
              cpu: 1000m
              memory: 2000Mi
            requests:
              cpu: 100m
              memory: 200Mi
      volumes:
        - name: backendconfig
          configMap:
            name: backendconfig
      imagePullSecrets:
        - name: coding-docker # 拉取容器的证书,参考上面拉取镜像的密钥部分
apiVersion: v1
kind: ConfigMap
metadata:
  name: backendconfig
  annotations:
    app.kubernetes.io/version: 0.0.1
    strategy.spinnaker.io/versioned: "false"
  labels:
    app: backend
    version: backend1
data:
  config.docker.yaml: |
    # redis configuration
    redis:
      db: 0
      addr: 'xxx:30379'
      password: ''
    mysql:
      path: 'xxx:30060'
      config: 'charset=utf8mb4&parseTime=True&loc=Local'
      db-name: ''
      username: 'root'
      password: ''
      max-idle-conns: 0
      max-open-conns: 0
      log-mode: false
      log-zap: ""

点击基础配置,弹出的右侧菜单添加一个触发器

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

点击基础配置后面的+,添加一个流程,命名为 部署configMap (如果你需要这个流程)

这里 configMap 的配置有个坑 metadata.服务器怎么搭建annotations 里添加

strategy.spinnaker.io/versioned: "fals腾讯课堂e"

不然部署的时候会在 name 后加容器英文个随机字符串,会导致你的服务找不到这个 co服务器操作系统nfigMap

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

确定后在 configMap 流程后新建一个流程,添加 services 的配置,配置与 configMap 差不多,容器对桌面的压强怎么算选择的文件不同而已

最后再部署你的服务

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

这里有应该可以自腾讯课堂动获取到你的腾讯已停服的手机游戏镜像腾讯漫画地址

此时返回,启动一下试试,部署时可以在Lens里看到对应的服务被部署了

如果报错可以在L容器中有某种酒精含量的酒精溶液ens里字符间距怎么加宽找到Pods,右边三个点腾讯会议app下载,选择Logs查看

如果部署失败,则在Lens里,Deployme容器设计nts 里删除即可,coding里正在跑的部署直接取消掉

此时服务字符常量应该部署好了,快去看看能不能连接上

字符常量里如果你的 deployment 里镜像设置的 latest ,那么你需要添加 imagePullPolicy: Always,使其更新时能重新拉取镜像部署pod

tCI/CDraefik ingress字符间距加宽2磅

先搭建好 traefik

doc.traefik.io/traefik/ref…

把这里的3个文件扔到lens字符间距加宽2磅里去,create出来

doc.traefik.io/服务器操作系统traefik/use…

然后看这篇,部署services和deployments即可

先部署dashboard

注意 xxx.xxx.com 是你的域名腾讯已停服的手机游戏

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: traefikingress
  namespace: default
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`xxx.xxx.com`)
      kind: Rule
      services:
        - name: api@internal
          kind: TraefikService

部署完腾讯会议后访问一下,腾讯视频下载应该能打开 traefik dashboard

Auth 2.0

由于traefik自带的中间件有auth2.0的能力,先控制访问 trae服务器操作系统fik dashbo腾讯地图ard 吧

lens连接上机器后下面有个腾讯地图+,选择Create resource

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

左上角选腾讯体育择 Select Template – Secret

白嫖coding,利用k3s自建CI/CD流水线并使用let's encrypt 自动获取证书(附mysqlredis k8s 配置文件)

name 改为 web-auth

username 后面写你需要的用户名

password 为你的密码

之后添加这个

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: web-auth
spec:
  basicAuth:
    secret: web-secret

再试试访问 traefik dashboard ,会提示需要用户名和密码

删除无用配置

在lens左边最下面有traefik的资源,custom Resources – traefik.containo.us – ingressRo容器的容积一定比它的体积小uteTCP / UDP / TraefikServic容器技术es/ ServersTransport / TLSOption 中的资源全部删掉

证书

关于traefik获取证书可以参考下面的文章,但是我部署失败了,提示No ACME certificate ge服务器价格neration required for domains有兴趣的可以自行尝字符是什么

zhuanlan.zhihu.com/p/431491328

www.qikqiak.com/post/traefi…

这里直接使用腾讯地图dv的证书,后面有另一种获取自动证字符间距怎么加宽书的方法。

将你的证书放到服务器上,执行下面的命令

kubectl create secret tls xxx-tls --ce腾讯会议app下载rt=xxx.cn_bundle.crt --key=xxx.cn.key

接下来配置router

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: traefikingress-web
  namespace: default
spec:
  entryPoints:
    - web
  routes:
    - kind: Rule
      match: Host(`xxx.cn`)
      middlewares:
        - name: redirect-https-middleware
      services:
        - kind: TraefikService
          name: api@internal
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: traefikingress-tls
  namespace: default
spec:
  entryPoints:
    - websecure
  routes:
    - kind: Rule
      match: Host(`xxx.cn`)
      middlewares:
        - name: web-auth
      services:
        - kind: TraefikService
          name: api@internal
  tls:
    secretName: traefik-tls

接下腾讯已停服的手机游戏来http访问应该可以跳到https了

拯救自动证书

还是想拯救一下自动腾讯地图证书,通过曲线救国的方式实现

这里通过 let’s encrypt 签发的证书,可以拿到非常香的通配符证书 *.xxx.com

但是有效期只cicd持续集成全程有3个月,所以需要让他自动续签

先安装helm

helm.sh/zh/docs/int…

curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

安装 cert-manager

cert-manager.io/next-docs/i…

kubectl apply -f https://github.com/cert腾讯视频下载-manager/cert-manager/releases/download/v1.7.2/cert-manager.yaml

建议把这个文件下载后扔到服务器上执行,服务器访问github可能会要很cicd是什么意思

如果提示

Kubernetes cluster unreachable:Get"http://localhost:8080/ve服务器操作系统rsion?timeout=32s": dial tcp 127.0.0.1:8080: connect: connection refused

输入这个在执行上面的 cert-manager.yamcicd流程l

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

然后找对应你域名代服务器怎么搭建理商的教程,这里我用的 dnspod

imroc腾讯先锋.cc/k8s/trick/c…

新建文件
dnspod-webhook-values.字符间距加宽2磅yaml

clusterIssuer:
  namespace: default
  enabled: true
  name: dnspod # 自动创建的 ClusterIssuer 名称
  ttl: 600
  staging: false
  secretId: "xxx" # 替换成你的 SecretId
  secretKey: "xxx" # 替换成你的 SecretKey
  email: xxx@xx.com # 用于接收证书过期的邮件告警。如果cert-manager和webhook都正常工作,证书会自动续期不会过期

这里跟原教程字符间距加宽2磅不同的是加了个 namespace: default

helm容器对桌面的压强怎么算 repo add r容器技术oc https://ch服务器操作系统arts.imroc.cc

helm upgrade --install -f dnspod-webhook-values.yaml cert-manager-webhook-dnspod roc/cert-manager-webhook-dnspod -n cert-manager

接下来签发证书
cer服务器内存和台式机内存区别tificate.yaml

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: example-crt
  namespace: istio-system
spec:
  secretName: example-crt-secret # 证书保存在这个 secret 中
  issuerRef:
    name: dnspod # 这里使用自动生成出来的 ClusterIssuer
    kind: ClusterIssuer
    group: cert-manager.io
  dnsNames: # 填入需要签发证书的域名列表,支持泛域名,确保域名是使用 dnspod 管理的
  - "example.com"
  - "*.example.com"

然后查看签发状字符常量态,整个签发一般要3min

kubectl get certificates.cert-manager.io

失败的话查看日志

k字符是什么ubectl describe certificat服务器租用es.cert-manager.io example-crt

日志看到

Issuing certificate as Secret docicd流程es not exist

多等一会儿

失败可以看看这个

cert-manager.io/docs/faq/tr…

以下就是成功了

NAME            READY   SECRET                 AGE
xxx-cn-crt   True    xxx-cn-crt-secret   3m40s

之后使用,在 lens 的左侧 Cu容器技术stom Resources – traefik.containo.us – IngressRoute 中找到你的配置,最底下 tls 修改为下面

tls:
    secretName: xxx-tle # certificate.yaml 中的name

然后访问看看,应该有证书了

附带 Mysql 单机/主从,Redis 单机部署容器是什么文件

fland.coding.腾讯地图net/public/mysq…