当前位置: 首页 > news >正文

北京建设银行网站/seo排名优化推广报价

北京建设银行网站,seo排名优化推广报价,网站建设里面链接打不开,上海网站建设怎么文章目录[toc]Helm、Kustomize、KubetplHelmKustomizeKubetpl安装 KubetplKubetpl 命令参数参数选项completion - 参数自动补齐render - 渲染模板go-template 语法注释引用变量在 template 中定义变量条件判断遍历开始使用简单使用准备一个 yaml 模板准备变量文件生成新的 yaml…

文章目录

    • @[toc]
    • Helm、Kustomize、Kubetpl
      • Helm
      • Kustomize
      • Kubetpl
    • 安装 Kubetpl
    • Kubetpl 命令参数
      • 参数选项
        • completion - 参数自动补齐
        • render - 渲染模板
    • go-template 语法
      • 注释
      • 引用变量
      • 在 template 中定义变量
      • 条件判断
      • 遍历
    • 开始使用
      • 简单使用
        • 准备一个 yaml 模板
        • 准备变量文件
        • 生成新的 yaml 文件
      • 稍微复杂一点的场景
        • 准备一个 yaml 模板
        • 准备变量文件
        • 生成新的 yaml 文件
        • 生成后的 yaml 文件
      • kubetpl/data-from-file
        • 准备一个 yaml 模板
        • 准备变量文件
        • 准备 file 文件
        • 生成新的 yaml 文件
        • 生成后的 yaml 文件

Helm、Kustomize、Kubetpl

  • 本人实际没有使用过 Helm 和 Kustomiz 这两款工具,以下的对比,仅个人观点,仅供参考;如果有说的不对的地方,还望指点

Helm

  • Helm 官方 Doc
  • 在有网络的情况下
    • Helm 可以很好的进行产品的迭代升级,只需要配置好 repo 仓库,拉取相应版本的 chart 包,修改对应的 values.yaml 文件就可以完成
      • 对于需要快速部署一些主流的中间件或者服务的时候,可以不需要去考虑自己需要准备那些对象(deployment、service、configmap等等),因为仓库里面都有现成的,不需要自己造轮子,拿来就可以用
  • 在没有网络的情况下
    • 比如一些 saas 类型的产品交付公司,在一些银行、证券类的客户现场,大多数的生产环境是不通外网的,在这些苛刻条件下,如果使用 Helm 就会需要涉及 Helm 的私仓,相对于交付来说,架构会过于庞大且麻烦

Kustomize

  • 使用 Kustomize 对 Kubernetes 对象进行声明式管理
  • Kustomize - github
  • Helm 对于服务的定制仅限于预置变量,那么如果需要更多更灵活的的 YAML 定制就需要用到 Kustomize
  • Kustomize 是一套采用合并思想,对 Kubernetes 原生配置进行管理的工具,使用无模板的方案定义应用配置
    • 允许用户使用一系列的描述文件为基础,然后通过 overlay 的方式生成最终部署应用所需的描述文件

Kubetpl

  • Kubetpl - github
  • 有点类似于 Helm 的 values.yaml 的方式配置相应的变量,通过预先配置好的 yaml 文件模板,带入变量后生成新的 yaml 文件
  • 可以定制化配置不同场景的模板,不过模板的管理会相对麻烦很多
  • 比较轻量化,不需要任何服务器组件,只是单纯的配置和管理 yaml 文件

安装 Kubetpl

curl -sSL https://github.com/shyiko/kubetpl/releases/download/0.9.0/kubetpl-0.9.0-$(bash -c '[[ $OSTYPE == darwin* ]] && echo darwin || echo linux')-amd64 -o kubetpl && chmod a+x kubetpl && sudo mv kubetpl /usr/local/bin/

Kubetpl 命令参数

参数选项

  • completion - 命令行参数自动补齐
  • help - 命令帮助
  • render - 渲染模板

completion - 参数自动补齐

  • 可选参数:bashzsh
# bash
source <(kubetpl completion bash)# zsh
source <(kubetpl completion zsh)

render - 渲染模板

参数解释
--allow-fs-access--chroot=<directory containing template> 的 缩写
-c, --chroot stringkubetpl/data-from-file 允许读取的文件的路径,--chroot 以外的文件都会被拒绝访问
在模板文件中可以写好路径,使用 --allow-fs-access 参数也可以实现
-z, --freeze
--freeze-list stringSlice
--freeze-ref stringArray
--ignore-unset
冻结 ConfigMap/Secret
<kind>/<name> 的方式冻结,例如(ConfigMap/foo, Secret/bar)
不应包含在输出中的外部 ConfigMap/Secret,但需要对其进行 --freeze 的引用
如果未设置,则保留 $VAR/${VAR}(例如,"echo 'kind:$A$B'|kubetpl r --s A=X --syntax=$ --ignore-unset" 输出:"kind:X$B")`
-i, --input stringArray指定配置文件:*.{env,yml,yaml,json}
-o, --output string指定输出的文件名称
-s, --set stringArray<var>=<value> 的形式申明变量
如果 --input 有配置则以 --input 优先
变量少的情况下,可以不写 --input,直接使用 --set 申明
-x, --syntax string定义模板风格
$,go-template,template-kind - 三个可选项

关于模板风格:$,go-template,template-kind ,主要区别在于变量引用的方式不同

  • $ - shell 的风格
    • $NAME
  • go-template - go 语言 template 库的风格
    • {{ .VAR }} - 获取变量名称为 VAR 的变量值
    • {{ if isset "VAR" }} ... {{ end }} - 当定义了 VAR 变量的时候才会在 }} ... {{ 中间展示变量值
    • {{ get "VAR" "default" }} - 获取 VAR 的值,如果未设置,则返回 "default"
    • {{ .VAR | quote }} - 引用 VAR 值
    • {{ .VAR | indent 4 }} - VAR 的缩进值(带 4 个空格)
    • {{ .VAR | b64enc }} - VAR 值以 base64 编码展示
  • template-kind - 没太看懂....

go-template 语法

  • 本人没有接触过 go 语言,临时找了一些资料来学习一些简单的使用
  • go 语言的变量好像是不支持 - 出现在变量名称内的,go 语言使用的是驼峰命名,不然可能会有这样的报错:
    • template: nginx-template.yaml:3: unexpected bad character U+002D '-' in range

注释

{{/* 注释 */}}

引用变量

  • 输出 hostAlias 变量的值
{{ .hostAlias }}
  • hostAlias 是匿名字段时,可以访问其内部字段或方法
{{ .hostAlias.ip }}
  • 如果需要引用外部变量,需要在前面加上 $ 符号
{{ $.hostAlias }} 

在 template 中定义变量

  • 变量名称前面需要带上 $ 符号
  • 使用 := 来对变量赋值
{{ $x := "hello" }}
  • 定义变量的值引用其他变量的值
{{ $x := .hostAlias }}

条件判断

  • if 后面可以是一个条件表达式(包括管道函数表达式。pipeline 即管道)
  • 也可以是一个字符串变量布尔值变量
    • 当为字符串变量时,如为空字符串则判断为 false,否则判断为 true
{{ if .hostAlias }}
- ip: {{ .ip }}hostnames: {{ .hostnames }}
{{ end }}

遍历

  • 普通用法,当变量值存在时才会有后面的内容输出
{{ range $.hostAliases }}
- ip: {{ .ip }}hostnames: {{ .hostnames }}
{{ end }}
  • 另一种用法
{{ range $k,$v := .labels }}
{{ $k }}: {{ $v }}
{{ end }}

开始使用

简单使用

准备一个 yaml 模板

  • 这里直接从 github 上面复制过来用了,以下所有的 yaml 文件只是用来模拟 kubetpl 生成 yaml 文件使用的,不能被直接使用的
  • # kubetpl:syntax:go-template
    • 定义模板风格,如果不在模板文件内定义,则需要通过 --syntax 的方式申明,否则会有类似如下报错
      • does not appear to be a valid YAML (yaml: line 3: did not find expected key). Did you forget to specify --syntax=<$|go-template|template-kind> / add "# kubetpl:syntax:<$|go-template|template-kind>"?
# kubetpl:syntax:go-templateapiVersion: v1
kind: Service
metadata:name: {{ .NAME }}-service
spec:selector:app: {{ .NAME }}ports:- protocol: TCPport: 80
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:name: {{ .NAME }}-deployment
spec:replicas: {{ .REPLICAS }}template: metadata:labels:app: {{ .NAME }}spec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80

准备变量文件

  • 支持的格式

    • *.env - <var>=<value>
    • yaml/json 文件

    *.env 的方式

cat << EOF > valus.env
NAME=sample-app
REPLICAS=2
EOF

yaml 文件 的方式

cat << EOF > env.yaml
NAME: my-nginx
REPLICAS: 3
EOF

生成新的 yaml 文件

  • 两个变量文件定义的变量值是有差异的,这个单纯就是用来比较使用的,只是选择哪种变量文件,全看各自的选择
# 使用 valus.env
kubetpl render nginx-template.yaml -i valus.env -o nginx-env.yaml# 使用 env.yaml
kubetpl render nginx-template.yaml -i env.yaml -o nginx-yaml.yaml

稍微复杂一点的场景

  • 因为 kubetpl 是通过 -i 的方式引入的变量,所以下面的变量引用都需要加上 $ 符号表示外部引入变量,才能正常识别,不然会有类似如下的报错:
    • template: nginx-template.yaml:9:23: executing "nginx-template.yaml" at <.static.namespace>: map has no entry for key "static"

准备一个 yaml 模板

# kubetpl:syntax:go-template{{ range $getName := .staticInfo }}
---
apiVersion: v1
kind: Service
metadata:name: {{ $getName.name }}-svcnamespace: {{ $.static.namespace }}
spec:selector:app: {{ $getName.name }}ports:- protocol: TCPport: {{ $getName.port }}
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:name: {{ $getName.name }}namespace: {{ $.static.namespace }}
spec:replicas: {{ $.static.replicas }}template:metadata:labels:app: {{ $getName.name }}spec:containers:- name: {{ $getName.name }}image: {{ $.global.Image }}imagePullPolicy: {{ $.global.ImagePull }}ports:- containerPort: 80
{{ end }}

准备变量文件

global:Image: nginx:1.16ImagePull: IfNotPresent
static:namespace: web-staticreplicas: 3
staticInfo:- name: app-staticport: 80- name: backend-staticport: 8080

生成新的 yaml 文件

kubetpl render nginx-template.yaml -i env.yaml -o nginx.yaml

生成后的 yaml 文件

---
apiVersion: v1
kind: Service
metadata:name: app-static-svcnamespace: web-static
spec:ports:- port: 80protocol: TCPselector:app: app-static
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:name: app-staticnamespace: web-static
spec:replicas: 3template:metadata:labels:app: app-staticspec:containers:- image: nginx:1.16imagePullPolicy: IfNotPresentname: app-staticports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: backend-static-svcnamespace: web-static
spec:ports:- port: 8080protocol: TCPselector:app: backend-static
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:name: backend-staticnamespace: web-static
spec:replicas: 3template:metadata:labels:app: backend-staticspec:containers:- image: nginx:1.16imagePullPolicy: IfNotPresentname: backend-staticports:- containerPort: 80

kubetpl/data-from-file

  • 当我们需要配置 configmap 的时候,可以通过文件带入的形式来配置 yaml 文件,这样可以单独维护 configmap 给所有的 yaml 文件来使用,对于维护来说,能减轻不少的成本

准备一个 yaml 模板

# kubetpl:syntax:go-template---
apiVersion: v1
kind: ConfigMap
kubetpl/data-from-file:- ./nginx.confmetadata:name: {{ $.configmap.name }}namespace: {{ $.static.namespace }}
data:{{ range $getName := .staticInfo }}
---
apiVersion: v1
kind: Service
metadata:name: {{ $getName.name }}-svcnamespace: {{ $.static.namespace }}
spec:selector:app: {{ $getName.name }}ports:- protocol: TCPport: {{ $getName.port }}
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:name: {{ $getName.name }}namespace: {{ $.static.namespace }}
spec:replicas: {{ $.static.replicas }}template:metadata:labels:app: {{ $getName.name }}spec:containers:- name: {{ $getName.name }}image: {{ $.global.Image }}imagePullPolicy: {{ $.global.ImagePull }}ports:- containerPort: 80volumeMounts:- name: nginx-confmountPath: /workspace/nginx/confvolumes:- name: nginx-confconfigMap:name: {{ $.configmap.name }}
{{ end }}

准备变量文件

  • 对比前面的,增加了一个 configmap
global:Image: nginx:1.16ImagePull: IfNotPresent
static:namespace: web-staticreplicas: 3
staticInfo:- name: app-staticport: 80- name: backend-staticport: 8080
configmap:name: static-cm

准备 file 文件

  • 命名为 nginx.conf
user root;
worker_processes 4;
error_log  logs/nginx_error.log  warn;
pid  logs/nginx.pid;
worker_rlimit_nofile 51200;
events {use epoll;worker_connections 51200;multi_accept on;
}http {include       mime.types;default_type  application/octet-stream;server_names_hash_bucket_size 128;client_header_buffer_size 256k;large_client_header_buffers 16 256k;client_max_body_size 1m;keepalive_timeout 0;client_body_timeout 10;client_header_timeout 10;send_timeout 5;sendfile on;tcp_nopush  on;tcp_nodelay on;gzip on;gzip_min_length  1k;gzip_buffers     4 16k;gzip_http_version 1.0;gzip_comp_level 5;gzip_disable "MSIE [1-6].";gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php image/jpeg image/gif image/png application/json;gzip_vary on;ssi on;ssi_silent_errors on;ssi_types text/shtml;proxy_temp_path proxy_temp 1 2;client_body_temp_path client_body_temp 1 2;fastcgi_temp_path fastcgi_temp 1 2;uwsgi_temp_path uwsgi_temp 1 2;scgi_temp_path scgi_temp 1 2;set_real_ip_from 0.0.0.0/0;real_ip_header  X-Forwarded-For;real_ip_recursive   on;underscores_in_headers on;resolver kube-dns.kube-system valid=5s;resolver_timeout 5s;access_log off;server {listen       8080;server_name  test.com;set $proto_host "${http_x_forwarded_proto}_${host}";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;location /static/ {location ~* \.(gif|jpg|jpeg|png|bmp|swf|ico)$ {expires      30d;}expires 1h;}}
}

生成新的 yaml 文件

  • 使用 kubetpl/data-from-file 的话,需要加上 --allow-fs-access 参数,不然会出现类似如下的报错:
    • nginx-template.yaml: access denied: nginx.conf (use --allow-fs-access and/or -c/--chroot=<root dir, e.g. '.'> to allow)
kubetpl render --allow-fs-access nginx-template.yaml -i env.yaml -o nginx.yaml

生成后的 yaml 文件

---
apiVersion: v1
data:nginx.conf: |user root;worker_processes 4;error_log  logs/nginx_error.log  warn;pid  logs/nginx.pid;worker_rlimit_nofile 51200;events {use epoll;worker_connections 51200;multi_accept on;}http {include       mime.types;default_type  application/octet-stream;server_names_hash_bucket_size 128;client_header_buffer_size 256k;large_client_header_buffers 16 256k;client_max_body_size 1m;keepalive_timeout 0;client_body_timeout 10;client_header_timeout 10;send_timeout 5;sendfile on;tcp_nopush  on;tcp_nodelay on;gzip on;gzip_min_length  1k;gzip_buffers     4 16k;gzip_http_version 1.0;gzip_comp_level 5;gzip_disable "MSIE [1-6].";gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php image/jpeg image/gif image/png application/json;gzip_vary on;ssi on;ssi_silent_errors on;ssi_types text/shtml;proxy_temp_path proxy_temp 1 2;client_body_temp_path client_body_temp 1 2;fastcgi_temp_path fastcgi_temp 1 2;uwsgi_temp_path uwsgi_temp 1 2;scgi_temp_path scgi_temp 1 2;set_real_ip_from 0.0.0.0/0;real_ip_header  X-Forwarded-For;real_ip_recursive   on;underscores_in_headers on;resolver kube-dns.kube-system valid=5s;resolver_timeout 5s;access_log off;server {listen       8080;server_name  test.com;set $proto_host "${http_x_forwarded_proto}_${host}";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;location /static/ {location ~* \.(gif|jpg|jpeg|png|bmp|swf|ico)$ {expires      30d;}expires 1h;}}}
kind: ConfigMap
metadata:name: static-cmnamespace: web-static
---
apiVersion: v1
kind: Service
metadata:name: app-static-svcnamespace: web-static
spec:ports:- port: 80protocol: TCPselector:app: app-static
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:name: app-staticnamespace: web-static
spec:replicas: 3template:metadata:labels:app: app-staticspec:containers:- image: nginx:1.16imagePullPolicy: IfNotPresentname: app-staticports:- containerPort: 80volumeMounts:- mountPath: /workspace/nginx/confname: nginx-confvolumes:- configMap:name: static-cmname: nginx-conf
---
apiVersion: v1
kind: Service
metadata:name: backend-static-svcnamespace: web-static
spec:ports:- port: 8080protocol: TCPselector:app: backend-static
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:name: backend-staticnamespace: web-static
spec:replicas: 3template:metadata:labels:app: backend-staticspec:containers:- image: nginx:1.16imagePullPolicy: IfNotPresentname: backend-staticports:- containerPort: 80volumeMounts:- mountPath: /workspace/nginx/confname: nginx-confvolumes:- configMap:name: static-cmname: nginx-conf

最后推荐几在找资料的时候看到的文章和大家一起学习

  • Kubernetes 资源编排系列之一: Pod YAML 篇
  • Kubernetes 资源编排系列之二: Helm 篇
  • Kubernetes 资源编排系列之三: Kustomize 篇
  • golang 模板语法简明教程
http://www.jmfq.cn/news/5003083.html

相关文章:

  • 摄影素材网站/百度高级搜索页面的网址
  • 无锡企业网站制作需要多少钱/网页模板免费下载
  • 企业准备做网站的准备工作/广州推动优化防控措施落地
  • 建网站手机/中牟网络推广
  • 省建设厅网站梁作庆/恶意点击软件有哪些
  • 网站做优化按点击收费/2023新闻摘抄十条
  • 贵德县公司网站建设/海外品牌推广
  • 南昌做网站seo/简单网页设计模板html
  • wordpress 答题/沈阳关键词seo
  • 中铁建设集团门户网登录入口官网/seo代码优化步骤
  • 网上做论文的网站有哪些内容/廊坊关键词排名首页
  • 邯郸网站建设地方/开发一个网站需要哪些技术
  • 个人主页网站设计/网络广告营销对应案例
  • 网站建设要用H5吗/个人网站免费域名注册
  • 做网站界面/google 浏览器
  • 怎么注销建设银行网站用户名/做网络推广有前途吗
  • 网站一次性链接怎么做/网站seo搜索引擎优化案例
  • o2o营销模式/洛阳搜索引擎优化
  • clo3d代做网站/常熟网络推广
  • 深圳制作网站的公司简介/网站seo方案策划书
  • 网站怎样做https/优化软件下载
  • 青岛天河小学网站建设/宁波seo外包方案
  • 百度网页版官方/优化推广公司哪家好
  • 珠海专业网站建设/提高百度快速排名
  • 手机网站做多宽的图片/谷歌官方网站
  • 百度网站地图/专业网络推广公司排名
  • 建设银行的网站首页/公司员工培训方案
  • 中国人民共和国住房和城乡建设部网站/seo关键词库
  • 个人能免费做网站/友情链接例子
  • 国家知识产权局商标局/沈阳百度快照优化公司