伟的小站 http://www.itfsw.com/blog 因为简单所以纯粹 Thu, 07 Apr 2022 07:15:57 +0000 zh-CN hourly 1 https://wordpress.org/?v=5.9.3 @ConditionalOnXXXEnabled,自定义状态注解的意义 http://www.itfsw.com/blog/post/2022/04/07/conditionalonxxxenabled-meaning-of-user-defined-status-annotation/ http://www.itfsw.com/blog/post/2022/04/07/conditionalonxxxenabled-meaning-of-user-defined-status-annotation/#respond Thu, 07 Apr 2022 07:15:49 +0000 http://www.itfsw.com/blog/?p=1115 最近在读spring-cloud-starter-alibaba-nacos-discovery源码时发现项目 […]

The post @ConditionalOnXXXEnabled,自定义状态注解的意义 appeared first on 伟的小站.

]]>
最近在读spring-cloud-starter-alibaba-nacos-discovery源码时发现项目定义了多个ConditionalOnNacosDiscoveryEnabled,ConditionalOnLoadBalancerNacos注解,开始没有理解和我们平时使用@Configuration加上@ConditionalOnXXX注解有什么区别,直到自己在根据Nacos定义灰度负载均衡器时才发现这样做的好处。

因为我们负载均衡器启用的前置条件是启用了Nacos发现服务,如果没有ConditionalOnNacosDiscoveryEnabled注解我们就需要采用@ConditionalOnProperty(value = "spring.cloud.nacos.discovery.enabled", matchIfMissing = true) 来确定是否开启,这里就体现了这个注解的用处,方便复用。

The post @ConditionalOnXXXEnabled,自定义状态注解的意义 appeared first on 伟的小站.

]]>
http://www.itfsw.com/blog/post/2022/04/07/conditionalonxxxenabled-meaning-of-user-defined-status-annotation/feed/ 0
Kibana基于Nginx反向代理增加Basic Auth认证生成Docker镜像 http://www.itfsw.com/blog/post/2021/11/18/kibana-adds-basic-auth-authentication-based-on-nginx-reverse-proxy-to-generate-docker-image/ http://www.itfsw.com/blog/post/2021/11/18/kibana-adds-basic-auth-authentication-based-on-nginx-reverse-proxy-to-generate-docker-image/#respond Thu, 18 Nov 2021 06:32:00 +0000 http://www.itfsw.com/blog/?p=1057 Kibana官方镜像默认是没有认证的,如果暴露在外网很容易被恶意访问入侵,所以基于Nginx反向代理为其增加了 […]

The post Kibana基于Nginx反向代理增加Basic Auth认证生成Docker镜像 appeared first on 伟的小站.

]]>
Kibana官方镜像默认是没有认证的,如果暴露在外网很容易被恶意访问入侵,所以基于Nginx反向代理为其增加了Basic Auth认证。需要注意的是官方镜像Kibana 5.x 版本和6.x,7.x 版本所基于的Linux发行版和启动脚本区别很大,下面的构建过程也进行了相应区分。

一、 5.x版本,官方镜像基于Debian,启动脚本位于/目录;

Dockerfile

FROM kibana:5.3

# 防止有人错误映射了5601端口
RUN sed -i "s/server.host: '0.0.0.0'/server.host: '127.0.0.1'/g" /etc/kibana/kibana.yml

# 安装Nginx
RUN apt-get update && apt-get install --no-install-recommends --no-install-suggests -y nginx
EXPOSE 80

# 环境变量,认证文件内容
ENV AUTH_HTPASSWD admin:\$apr1\$iyh1Sj5.\$kVFjc2Nw9xrbz5rVdzPEC.

# Nginx配置文件
COPY kibana.conf /etc/nginx/conf.d/
RUN rm -f /etc/nginx/sites-enabled/default

# 启动脚本,把认证环境变量写入文件,启动Nginx和kibana
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh

# 执行清理
RUN	rm -rf /var/lib/apt/lists/*;

ENTRYPOINT ["/entrypoint.sh"]

构建时需要的启动脚本shell和Nginx代理配置文件

#!/bin/sh

# 读取环境变量写入htpasswd文件
echo "$AUTH_HTPASSWD" > /etc/nginx/conf.d/htpasswd

# 启动kibana和Nginx
service nginx start && /docker-entrypoint.sh kibana
upstream kibana_server {
    server 127.0.0.1:5601 weight=1 max_fails=3 fail_timeout=60;
}

server {
    listen       80;
    listen  [::]:80;
    server_name  www.kibana.com;

    # basic auth
    auth_basic "Basic Auth";
    auth_basic_user_file /etc/nginx/conf.d/htpasswd;

    location / {
        proxy_pass http://kibana_server;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

二、 6.x++版本,官方镜像基于CentOS,启动脚本位于/usr/local/bin/kibana-docker;

Dockerfile

FROM kibana:7.9.3

# 切换到root用户
USER root

# 防止有人错误映射了5601端口
RUN sed -i 's/server.host: "0"/server.host: "127.0.0.1"/g' /usr/share/kibana/config/kibana.yml

# 安装Nginx
RUN yum install -y epel-release && yum install -y nginx \
    && yum clean all && rm -rf /var/cache/yum/*;
EXPOSE 80

# 环境变量,认证文件内容
ENV AUTH_HTPASSWD admin:\$apr1\$iyh1Sj5.\$kVFjc2Nw9xrbz5rVdzPEC.

# Nginx配置文件
COPY kibana.conf /etc/nginx/conf.d/
RUN rm -f /etc/nginx/sites-enabled/default

# 启动脚本,把认证环境变量写入文件,启动Nginx和kibana
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]

构建时需要的启动脚本shell和Nginx代理配置文件

#!/bin/sh

# 读取环境变量写入htpasswd文件
echo "$AUTH_HTPASSWD" > /etc/nginx/conf.d/htpasswd

# 启动kibana和Nginx
# kibana 官方镜像采用的启动用户是kibana,所以启动kibana换为用户kibana
/usr/sbin/nginx && runuser -l kibana -c /usr/local/bin/kibana-docker
upstream kibana_server {
    server 127.0.0.1:5601 weight=1 max_fails=3 fail_timeout=60;
}

server {
    listen       80;
    listen  [::]:80;
    server_name  www.kibana.com;

    # basic auth
    auth_basic "Basic Auth";
    auth_basic_user_file /etc/nginx/conf.d/htpasswd;

    location / {
        proxy_pass http://kibana_server;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

三、 使用

生成htpasswd文件,拷贝内容作为容器的AUTH_HTPASSWD环境变量内容,并映射80端口启动容器,下方是一个参考docker-compose.yml文件,需要注意htpasswd文件中的$需要进行转义:

version: '3.5'
services:
  kibana:
    image: itfsw/kibana:7.9.3
    container_name: kibana
    ports:
      - 1000:80
    environment:
      AUTH_HTPASSWD: 'admin:$$apr1$$VRGn3W3e$$y31sVsSdv1HWbsUhkl5EH1'
      ELASTICSEARCH_HOSTS: 'http://elasticsearch:9200'

The post Kibana基于Nginx反向代理增加Basic Auth认证生成Docker镜像 appeared first on 伟的小站.

]]>
http://www.itfsw.com/blog/post/2021/11/18/kibana-adds-basic-auth-authentication-based-on-nginx-reverse-proxy-to-generate-docker-image/feed/ 0
SuperMap iObjects Java在64位Linux上安装许可驱动报The 32bit support is missing. Please install the x86 compatibility http://www.itfsw.com/blog/post/2021/11/02/supermap-iobjects-java-installs-the-32bit-support-is-missing-please-install-the-x86-compatibility/ http://www.itfsw.com/blog/post/2021/11/02/supermap-iobjects-java-installs-the-32bit-support-is-missing-please-install-the-x86-compatibility/#respond Tue, 02 Nov 2021 07:01:49 +0000 http://www.itfsw.com/blog/?p=1047 最近项目整合部署时需要做一个包含超图、GDAL、LAS等动态库的基础镜像,镜像是基于GDAL做的,由于是Ubu […]

The post SuperMap iObjects Java在64位Linux上安装许可驱动报The 32bit support is missing. Please install the x86 compatibility appeared first on 伟的小站.

]]>
最近项目整合部署时需要做一个包含超图、GDAL、LAS等动态库的基础镜像,镜像是基于GDAL做的,由于是Ubuntu64位,所以安装超图许可驱动时报了如下错误:

dpkg-query: no packages found matching aksusbd
The 32bit support is missing. Please install the x86 compatibility
packages required by your distribution and retry the installation.
See the installation guide for more details.
Aborting...

网上找了半天也不知道他究竟是缺了哪些32位依赖包,看了几篇解决方案发现都是在安装libc6的32位版本,所以尝试安装lib32z1 果然再次安装就正常了。

apt-get install lib32z1

The post SuperMap iObjects Java在64位Linux上安装许可驱动报The 32bit support is missing. Please install the x86 compatibility appeared first on 伟的小站.

]]>
http://www.itfsw.com/blog/post/2021/11/02/supermap-iobjects-java-installs-the-32bit-support-is-missing-please-install-the-x86-compatibility/feed/ 0
Axios的POST请求按需采用Form或者JSON传输请求数据 http://www.itfsw.com/blog/post/2021/08/27/the-post-request-of-axios-uses-form-or-json-to-transfer-the-requested-data-on-demand/ http://www.itfsw.com/blog/post/2021/08/27/the-post-request-of-axios-uses-form-or-json-to-transfer-the-requested-data-on-demand/#respond Fri, 27 Aug 2021 03:27:22 +0000 http://www.itfsw.com/blog/?p=1011 公司更新了后台接口规范,POST请求参数数量3个及以上必须采用@RequestBody接收,3个以下可灵活使用 […]

The post Axios的POST请求按需采用Form或者JSON传输请求数据 appeared first on 伟的小站.

]]>
公司更新了后台接口规范,POST请求参数数量3个及以上必须采用@RequestBody接收,3个以下可灵活使用json或者formdata传参,所以造成前端post请求某些采用json某些使用的是formdata。所以前端Axios需做适应性改造。

还好我们知道Axios是有一个前置请求拦截器的,所以封装的Axios工具类中我们可以根据接口配置采用不同的数据传输方式,具体我们根据传入的dataType类型来拦截,如果配置了类型为“form”,则拦截器中转换请求方式到form传输,拦截器代码:

import axios from 'axios'
import qs from 'qs'

// 创建axios实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // api 的 base_url
  timeout: 15000 // 请求超时时间
})

// 请求 拦截器
service.interceptors.request.use(config => {
  // POST 请求采用 form表单还是 json 上传,默认json, 有特殊配置则改为form
  if (config.method.toUpperCase() === 'POST' && config.dataType && config.dataType.toUpperCase() === 'FORM') {
    config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
    config.transformRequest = [data => qs.stringify(data)]
  }
  return config
})

The post Axios的POST请求按需采用Form或者JSON传输请求数据 appeared first on 伟的小站.

]]>
http://www.itfsw.com/blog/post/2021/08/27/the-post-request-of-axios-uses-form-or-json-to-transfer-the-requested-data-on-demand/feed/ 0
构建Docker镜像时,如项目需使用GNI或者动态库,基础镜像慎用Alpine Linux http://www.itfsw.com/blog/post/2021/08/24/when-building-docker-image-if-the-project-needs-to-use-gni-or-dynamic-library-the-basic-image/ http://www.itfsw.com/blog/post/2021/08/24/when-building-docker-image-if-the-project-needs-to-use-gni-or-dynamic-library-the-basic-image/#respond Tue, 24 Aug 2021 03:07:31 +0000 http://www.itfsw.com/blog/?p=1001 在构建Docker镜像时,为了保持最终镜像的大小一般习惯选用Alpine Linux作为基础镜像,但是如果你的 […]

The post 构建Docker镜像时,如项目需使用GNI或者动态库,基础镜像慎用Alpine Linux appeared first on 伟的小站.

]]>
在构建Docker镜像时,为了保持最终镜像的大小一般习惯选用Alpine Linux作为基础镜像,但是如果你的项目使用了动态链接库的情况下一定要谨慎选择。我们一个项目中动态库基于C++6构建,结果发现动态库依赖报错,使用ldd命令检查依赖,发现其中报了Error loading shared library libgcc_s.so.1: No such file or directory 和Error loading shared library ld-linux-x86-64.so.2: No such file or directory

其中的libgcc依赖好解决,直接安装apk add libstdc++ 就可以,但是ld-linux-x86-64.so.2 他是属于glibc里的,在Alpine里无法找到,网上差了原因是因为Alpine linux使用的是musl,与常见的glibc不同,Musl是一个轻量级的C标准库,基本上只能通过手动编译安装十分麻烦。

果断替换基础镜像到Buster:buster是基于Debian Linux发行的一个版本,这个版本比较新,支持比较全面,受广大Debian爱好者的好评!所以像PHP、Python之类的语言、应用都会使用这个版本的Debian搭建Docker基础镜像。

The post 构建Docker镜像时,如项目需使用GNI或者动态库,基础镜像慎用Alpine Linux appeared first on 伟的小站.

]]>
http://www.itfsw.com/blog/post/2021/08/24/when-building-docker-image-if-the-project-needs-to-use-gni-or-dynamic-library-the-basic-image/feed/ 0
解决Docker项目报javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)异常的问题 http://www.itfsw.com/blog/post/2021/08/23/jiejue-docker-javax-net-ssl-sslhandshakeexception-no-appropriate-protocol/ http://www.itfsw.com/blog/post/2021/08/23/jiejue-docker-javax-net-ssl-sslhandshakeexception-no-appropriate-protocol/#respond Mon, 23 Aug 2021 07:11:01 +0000 http://www.itfsw.com/blog/?p=999 最近使用Docker部署Springboot项目遇到连接数据库报javax.net.ssl.SSLHandsh […]

The post 解决Docker项目报javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)异常的问题 appeared first on 伟的小站.

]]>
最近使用Docker部署Springboot项目遇到连接数据库报javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) 异常的问题,网上找的原因是由于java通过安全更新已经在8或者8+的小版本中禁用了不安全的TLSv1&TLSv1.1,而我们的项目由于使用很老版本的Mysql数据库,所以导致报错。

网上提供的解决方案是通过修改jre下java.security文件中的jdk.tls.disabledAlgorithms配置,删除掉TLSv1&TLSv1.1来解决,但项目使用Docker容器来部署不可能每次修改该文件,下面提供结局方案。

方案一:使用linux发行版中的openjdk,目前Linux发行版中的配置不知为什么还没有去掉该配置,我们可以通过白的Linux镜像来安装openjdk。

FROM alpine:3.12

# 替换阿里源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk update

# env
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
ENV JAVA_VERSION 11
ENV JAVA_TOOL_OPTIONS="-XX:+IgnoreUnrecognizedVMOptions -XX:+UseContainerSupport -XX:+IdleTuningCompactOnIdle -XX:+IdleTuningGcOnIdle"
ENV JAVA_HOME="/usr/lib/jvm/java-11-openjdk"

# 一些openjdk官方docker安装了的包
RUN apk add bzip2 unzip p11-kit
# openjdk
RUN apk add openjdk11

# 清理apk缓存
RUN rm -rf /var/cache/apk/*

# ADD
ADD target/demo.jar /app.jar

EXPOSE 8080
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Xms256m", "-Xmx512m", "-jar", "/app.jar"]

方案二:构建时替换java.security配置,这种方式试用性更广,基于openjdk镜像的如tomcat等镜像也能用。

FROM openjdk:11-jdk

# ADD
ADD target/demo.jar /app.jar

# 解决不支持TLSv1 & TLSv1.1 问题
# 根据基础镜像不同,配置文件位置也不同
RUN sed -i 's/jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1/jdk.tls.disabledAlgorithms=SSLv3/g' /usr/local/openjdk-11/conf/security/java.security

EXPOSE 8080
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Xms256m", "-Xmx512m", "-jar", "/app.jar"]

The post 解决Docker项目报javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)异常的问题 appeared first on 伟的小站.

]]>
http://www.itfsw.com/blog/post/2021/08/23/jiejue-docker-javax-net-ssl-sslhandshakeexception-no-appropriate-protocol/feed/ 0
如何在构建Docker镜像时加入动态库(.so) http://www.itfsw.com/blog/post/2021/08/20/how-to-add-a-dynamic-library-so-when-building-a-docker-image/ http://www.itfsw.com/blog/post/2021/08/20/how-to-add-a-dynamic-library-so-when-building-a-docker-image/#respond Fri, 20 Aug 2021 09:27:48 +0000 http://www.itfsw.com/blog/?p=994 平时在Linux上需要添加项目的动态库文件只需要把.so文件放入/lib64/下并执行ldconfig命令就可 […]

The post 如何在构建Docker镜像时加入动态库(.so) appeared first on 伟的小站.

]]>
平时在Linux上需要添加项目的动态库文件只需要把.so文件放入/lib64/下并执行ldconfig命令就可以让程序识别到动态库文件,但我们通过Dockerfile执行相同操作时却无法正常加载动态库文件:

FROM openjdk:8u302-jdk

# 安装动态库文件
ADD resources/lib64/ /lib64/
RUN ldconfig

虽然镜像能构建但是代码加载时却出错,进入容器通过ldconfig -v 也无法找到对应的动态库,还好我们可以通过容器LD_LIBRARY_PATH 环境变量解决该问题:

FROM openjdk:8u302-jdk

# 安装动态库文件
ADD resources/lib64/ /usr/local/myso/
ENV LD_LIBRARY_PATH=/usr/local/myso/:$LD_LIBRARY_PATH

The post 如何在构建Docker镜像时加入动态库(.so) appeared first on 伟的小站.

]]>
http://www.itfsw.com/blog/post/2021/08/20/how-to-add-a-dynamic-library-so-when-building-a-docker-image/feed/ 0
Vue整合新版本Cesium(1.63+) http://www.itfsw.com/blog/post/2021/08/12/vue-zhenghe-xin-banben-cesium-1-63/ http://www.itfsw.com/blog/post/2021/08/12/vue-zhenghe-xin-banben-cesium-1-63/#respond Thu, 12 Aug 2021 03:00:27 +0000 http://192.168.31.110:88/blog/?p=940 Cesium在1.63进行了一次重大重构,项目从AMD模块转向原生JS ES6模块,具体可以查看官方博客Ces […]

The post Vue整合新版本Cesium(1.63+) appeared first on 伟的小站.

]]>
Cesium在1.63进行了一次重大重构,项目从AMD模块转向原生JS ES6模块,具体可以查看官方博客CesiumJS Migrates to ES6 Modules ,所以以前老的Vue整合Cesium的方式都没法用了,这里是新版本整合方式。

一、首先还是安装必要依赖,和普通vue项目一样添加上Cesium最新版本。注意devDependencies中和老版本一样要增加一个copy-webpack-plugin用于拷贝Cesium的一些静态资源。

{
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "cesium": "^1.84.0",
    "core-js": "^3.6.5",
    "vue": "^2.6.11",
    "vue-router": "^3.2.0",
    "vuex": "^3.4.0"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-plugin-router": "~4.5.0",
    "@vue/cli-plugin-vuex": "~4.5.0",
    "@vue/cli-service": "~4.5.0",
    "@vue/eslint-config-standard": "^5.1.2",
    "babel-eslint": "^10.1.0",
    "copy-webpack-plugin": "^6.0.3",
    "eslint": "^6.7.2",
    "eslint-plugin-import": "^2.20.2",
    "eslint-plugin-node": "^11.1.0",
    "eslint-plugin-promise": "^4.2.1",
    "eslint-plugin-standard": "^4.0.0",
    "eslint-plugin-vue": "^6.2.2",
    "sass": "^1.26.5",
    "sass-loader": "^8.0.2",
    "vue-template-compiler": "^2.6.11"
  }
}

二、配置vue.config.js,增加Cesium打包的一些配置,如拷贝静态资源、定义CESIUM_BASE_URL打包常量等。

const webpack = require('webpack')
const CopyWebpackPlugin = require('copy-webpack-plugin')

module.exports = {
  publicPath: '/demo',
  productionSourceMap: false,
  configureWebpack: {
    plugins: [
      // Copy Cesium Assets, Widgets, and Workers to a static directory
      new CopyWebpackPlugin({
        patterns: [
          { from: 'node_modules/cesium/Build/Cesium/Workers', to: 'Workers' },
          { from: 'node_modules/cesium/Build/Cesium/ThirdParty', to: 'ThirdParty' },
          { from: 'node_modules/cesium/Build/Cesium/Assets', to: 'Assets' },
          { from: 'node_modules/cesium/Build/Cesium/Widgets', to: 'Widgets' }
        ]
      }),
      new webpack.DefinePlugin({
        // Define relative base path in cesium for loading assets
        CESIUM_BASE_URL: JSON.stringify('')
      })
    ],
    module: {
      // 解决Cesium 构建warning Critical dependency: require function is used in a way in which dependencies cannot be statically extracted
      unknownContextCritical: false,
      unknownContextRegExp: /\/node_modules\/cesium\/Source\/Core\/buildModuleUrl\.js/
    }
  }
}

三、main.js全局引入Cesium Widgets 样式。

import 'cesium/Build/Cesium/Widgets/widgets.css'

四、修改以前Cesium引入方式。

// 修改以前Cesium引入方式:import Cesium from 'cesium/Cesium' 为
import * as Cesium from 'cesium'
// 现在你也可以单独引入Cesium的某个类
import { Billboard } from 'cesium'

伍、Demo。

<template>
  <div id="map"></div>
</template>
<script>
import * as Cesium from 'cesium'

export default {
  name: 'About',
  data () {
    return {
      $_viewer: null
    }
  },
  mounted () {
    this.$_viewer = new Cesium.Viewer('map')
  }
}
</script>
<style lang="scss" scoped>
#map{
  width: 100%;
  height: 100%;
}
</style>

The post Vue整合新版本Cesium(1.63+) appeared first on 伟的小站.

]]>
http://www.itfsw.com/blog/post/2021/08/12/vue-zhenghe-xin-banben-cesium-1-63/feed/ 0
Jenkins部署项目到Kubernetes(使用kubectl) http://www.itfsw.com/blog/post/2021/08/06/jenkins-bushu-xiangmu-dao-kubernetes-shiyong-kubectl/ http://www.itfsw.com/blog/post/2021/08/06/jenkins-bushu-xiangmu-dao-kubernetes-shiyong-kubectl/#respond Fri, 06 Aug 2021 09:52:25 +0000 http://192.168.31.110:88/blog/?p=936 最近需要通过Jenkins实现自动化部署项目到Kubernetes,由于k8s集群使用的是Rancher,已经 […]

The post Jenkins部署项目到Kubernetes(使用kubectl) appeared first on 伟的小站.

]]>
最近需要通过Jenkins实现自动化部署项目到Kubernetes,由于k8s集群使用的是Rancher,已经获取到kubecofig文件(从Rancher中获取Kubeconfig文件),可是使用Jenkins上的Kubernetes插件死活连不上集群。没办法临时在Jenkins服务器上安装kubectl工具来部署项目。

一、由于Jenkins是采用Docker部署的,首先进入容器安装kubectl工具,为了防止Rancher又扯拐,直接用Rancher自己的kubectl下载地址下载:

# 安装kubectl
curl -o /usr/local/bin/kubectl http://rancher-mirror.cnrancher.com/kubectl/v1.16.15/linux-amd64-v1.16.15-kubectl
chmod +x /usr/local/bin/kubectl
ln -s /usr/local/bin/kubectl /usr/bin/kubectl

二、把从Rancher下载的kubeconfig文件保存到~/.kube/config

三、通过Jenkins项目执行shell kubectl get all 判断是否连接成功,成功后具体项目就可以通过kubectl进行项目发布部署了;

遗留的问题:对于有多个k8s集群的环境,虽然可以通过kubectl config use-context xxxxx 切换集群环境,但是由于对于Jenkins可以多个任务同时执行,此时环境是不可控的。

The post Jenkins部署项目到Kubernetes(使用kubectl) appeared first on 伟的小站.

]]>
http://www.itfsw.com/blog/post/2021/08/06/jenkins-bushu-xiangmu-dao-kubernetes-shiyong-kubectl/feed/ 0
从Rancher中获取Kubeconfig文件 http://www.itfsw.com/blog/post/2021/08/05/cong-rancher-zhong-huoqu-kubeconfig-wenjian/ http://www.itfsw.com/blog/post/2021/08/05/cong-rancher-zhong-huoqu-kubeconfig-wenjian/#respond Thu, 05 Aug 2021 11:46:30 +0000 http://192.168.31.110:88/blog/?p=933 由于公司的Kubernetes集群是基于Rancher搭建的,而实际使用时还是习惯用kubectl密令来发布部 […]

The post 从Rancher中获取Kubeconfig文件 appeared first on 伟的小站.

]]>
由于公司的Kubernetes集群是基于Rancher搭建的,而实际使用时还是习惯用kubectl密令来发布部署。所以需要从Rancher中取得Kubeconfig文件来连接服务器。Rancher可以管理多个Kubernetes集群,所以需要主页面切换到具体某个集群,然后点击头部集群菜单就能在右上角找到配置文件:

The post 从Rancher中获取Kubeconfig文件 appeared first on 伟的小站.

]]>
http://www.itfsw.com/blog/post/2021/08/05/cong-rancher-zhong-huoqu-kubeconfig-wenjian/feed/ 0