helm    2023-06-15 15:03:31    15    0    0

helm是什么

  Helm是Kubernetes的包管理器,类似于Python的pip centos的yum,主要用来管理 Charts。

  Helm Chart是用来封装Kubernetes原生应用程序的一系列YAML文件。可以在你部署应用的时候自定义应用程序的一些Metadata,以便于应用程序的分发。对于应用发布者而言,可以通过Helm打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。

helm解决了什么

 在kubernetes中部署一个可以使用的应用,需要涉及到很多的kubernetes资源的共同协作。

  部署一个服务,会一些kubernetes的资源对象,包括deployment用于部署应用,service提供服务发现,secret配置服务的密码,ingress用于集群外部访问,有可能需要pv和pvc来提供持久恶化服务。会涉及到一些依赖,数据库或其他服务启动。这些资源过于分散,不方便管理,直接提供kubectl来管理一个应用,让人头疼。

  在部署一个应用,会遇到哪些问题:

  • 如何统一管理、配置和更新这些分散的k8s的应用资源文件
  • 如何分发和复用应用模板
  • 如何将应用的一系列资源当做一个软件包管理

      对于使用者而言,使用Helm后不用需要编写复杂的应用部署文件,可以以简单的方式在Kubernetes上查找、安装、升级、回滚、卸载应用程序

helm2与helm3的区别

  由于Helm v2 Tiller服务端在社区一直存在已知的安全问题,攻击者可以通过tiller在集群内安装未经授权的应用,因此推荐您升级至Helm v3版本。

  helm3是直接与k8s api互通 无需再helm init 创建服务端,比较大的改动是,移除 Tiller(Helm 2 是一种 Client-Server 结构,客户端称为 Helm,服务器称为 Tiller)。Helm 3 只有客户端

docker    2023-06-15 15:02:31    17    0    0

anapsix_alpine-java_jdk8

  1. # AlpineLinux with a glibc-2.28-r0 and Oracle Java 8
  2. FROM alpine:3.8
  3. MAINTAINER Anastas Dancha <anapsix@random.io>
  4. # thanks to Vladimir Krivosheev <develar@gmail.com> aka @develar for smaller image
  5. # and Victor Palma <palma.victor@gmail.com> aka @devx for pointing it out
  6. # Java Version and other ENV
  7. ENV JAVA_VERSION_MAJOR=8 \
  8. JAVA_VERSION_MINOR=192 \
  9. JAVA_VERSION_BUILD=12 \
  10. JAVA_PACKAGE=jdk \
  11. HOTSWAP_AGENT_VERSION=1.2.0 \
  12. JAVA_JCE=unlimited \
  13. JAVA_HOME=/opt/jdk \
  14. PATH=${PATH}:/opt/jdk/bin \
  15. GLIBC_REPO=https://github.com/sgerrand/alpine-pkg-glibc \
  16. GLIBC_VERSION=2.28-r0 \
  17. LANG=C.UTF-8
  18. # do all in one step
  19. RUN set -ex && \
  20. [[ ${JAVA_VERSION_MAJOR} != 7 ]] || ( echo >&2 'Oracle no longer publishes JAVA7 packages' && e
docker    2023-06-15 15:01:14    11    0    0

获取docker容器root权限

  1. docker exec -it -u root ContainerID bash

删除30天外的所有镜像

  1. docker image prune -a --filter "until=720h"

删除以reg.xxx.com/test开头的所有镜像

  1. docker images prune -a --filter=reference='reg.xxx.com/test/*:*'

导入导出镜像文件

  1. docker save -o node:18-bullseye-slim.tar node:18-bullseye-slim
  2. docker load -i node:18-bullseye-slim.tar
docker    2023-06-15 15:01:09    31    0    0

什么是Docker

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。

Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目 已经超过 5 万 7 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。

Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroupnamespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 版本开始,则进一步演进为使用 runCcontainerd
title

runc 是一个 Linux 命令行工具,用于根据 OCI容器运行时规范 创建和运行容器。


containerd

docker    2023-06-15 15:01:07    3400    0    0

说明

  • 系统:centos7.x
  • docker版本:19.03.4
  1. $ docker pull kong/kong-gateway:3.3.0.0
  2. mediaType in manifest should be 'application/vnd.docker.distribution.manifest.v2+json' not 'application/vnd.oci.image.manifest.v1+json'

yum查看docker可用版本怎么操作?

在终端输入命令:

  1. yum list docker-ce --showduplicates | sort -r

原因

这是因为Docker和OCI在容器镜像格式上有所不同。Docker使用的是manifest v2格式,而OCI使用的是manifest v1格式。虽然两种格式都可以使用JSON表示,但在mediaType上有所不同。因此,在使用Docker Registry时,必须使用'application/vnd.docker.distribution.manifest.v2+json'作为mediaType。

Docker Registry要求所有manifest文件都符合Docker分配的MIME类型。如果您使用不同的MIME类型,可能会导致不兼容或意外的行为。因此,建议使用'application/vnd.docker.distribution.manifest.v2+json'来确保最佳兼容性和可靠性。

解决

经测试升级docker版本可以解决此问题,本次是小版本升级从19.03.4升级到19.03.13,命令如下:

  1. # 首先通过rpm -qa| docker 查看已经安装的docker版本,然后卸载掉老的,再安装新的,再启动服务,测试即可
  2. yum -y remove docker-ce-19.03.4-3.el7.x86_64
  3. yum -y remove docker-ce-cli-19.03.4-3.el7.x86_64
  4. yum -y install d
无    2023-06-07 15:36:01    25    0    0

随着光纤入户的入网方式变得普及,很多人家里现在都需要把路由器接到光猫上网。

画一个极简化的拓扑图就是(省略大部分家庭没有的交换机,有线和无线设备统称为网络设备):

title

虽然装维师傅肯定会把设备调试好,但是未必会使用最好的连接方式:还是有很多装维师傅在用户没有明确要求的情况下默认将光猫设置为主路由,自家路由器设置为二级路由。

这样做虽然可以上网,但是以后网络出问题的几率会高很多。

原因也很好理解:光猫原本只是一个光电信号转换器,不需要多少性能。

现在出于方便(至少是测试方便)等原因,光猫大多附带了路由和WiFi功能。路由和WiFi是非常占用资源的功能,免费租用给用户的光猫显然要求成本尽可能的低,启用路由和无线功能之后,光猫负荷较大。

虽然短时间工作、或者数据吞吐量比较小的时候,光猫还能够应付,一旦长时间连续工作、带机数量比较多、或者进行大数据量下载传输操作的时候,就有可能出现网速不稳定、带宽不达标、网络延迟升高、丢包率高等现象了。

此外光猫的固件功能缺失严重,根本无法有效地管理。

当然对于根本看不懂上面的话,或者觉得自己家要求不高、无所谓的人,我就直接说了,一般路由只需要一个就够了,光猫的路由和路由器功能重复了,是在毫无意义地增加网络复杂度,首先我们得了解一下路由器和光猫有几种接法,在此之前有必要介绍一下路由器和光猫。

设备介绍

光猫

title

(网络图片)光猫一般长这个样子,如果您不知道什么是光纤线,最好先去搞清楚自己家是不是光纤入户。警告:光纤线不要随意弯折,不要随意摆弄。光猫通常有数个网络接口,这些接口可能有区别,请不要随意改动。本文内容中,不涉及到对光猫上面接的线的改动,非必要情况下请勿改动光猫的连线,(除非超过百兆的宽带误用了百兆网口)

路由器

title
路由器就是您自己买的那个设备,接线面板大概长这样。

接口方面,一般有一个WAN口(高端路由器可能有两个或更多),数个LAN口。WAN口和LAN口不一样,务必区分。

区分方式很简单,看说明书就行了。

或者通常WAN口和LAN口是分开布置的,颜色上也有区分,数量一般是LAN口多于WAN口

无    2023-05-31 11:22:37    17    0    0

问题简介

后端项目在编译阶段报错

title

关键字 build constraints exclude all Go files in

编译阶段报错原因

参考:https://stackoverflow.com/questions/55348458/build-constraints-exclude-all-go-files-in

发现是 CGO-ENABLED没开,默认CGO_ENABLED=0,当设置为1时,即为打开,打开后编译打包成功
这个项目有用到C相关的

镜像打好了,pod报错 no such file or directory

用的镜像是alpine,报错 standard_init_linux.go:211: exec user process caused "no such file or directory"

pod报错原因

参考:https://stackoverflow.com/questions/51508150/standard-init-linux-go190-exec-user-process-caused-no-such-file-or-directory

这篇文档写的原因有多种,根本的原因是缺少glibc库

用了带glibc库的alpine镜像后,可以了
也可以用dockerhub上的centos7和debian11,都没问题,只是比alpine镜像要大很多。

  1. $ docker history --format {{.CreatedBy}} --no-trunc=true sanger/alp
无    2023-05-23 19:54:52    14    0    0

基本情况

因为资源有限,只能先玩玩1主1从。

  • Ubuntu 22.10
    • master: 192.168.1.230
    • node: 192.168.1.231
  • sealos 4.2
    • labring/kubernetes:v1.25.0
    • labring/helm:v3.8.2
    • labring/calico:v3.24.1

准备

sealos节点最少要2核CPU,vmware中要设置1个处理器 2个内核。
title

  1. apt install vim net-tools iptables iputils-ping -y

在线安装

  1. sealos run labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 --masters 192.168.1.230 --nodes 192.168.1.231 -p yourpassword

离线安装

参考:https://docs.sealos.io/zh-Hans/docs/getting-started/offline-install

离线环境只需要提前导入镜像,其它步骤与在线安装一致。

首先在有网络的环境中 save 安装包:

  1. $ sealos pull labring/kubernetes:v1.25.0
  2. $ sealos save -o kubernetes.tar labring/kubernetes:v1.25.0

拷贝 kubernetes.tar 到离线环境, 使用 load 命令导入镜像即可:

  1. $ sealos load -i kubernetes.tar

剩下的安装方式与在线安装一致。

  1. $ sealos images
无    2023-05-18 11:53:34    26    0    0

背景

  1. $ git clone https://gogs.xxx.com/hahahei/test.git
  2. fatal: unable to access 'https://gogs.xxx.com/hahahei/test.git/': Peer's Certificate issuer is not recognized.

原因

具体原因未知

解决方案

中心思想是打不过就绕过去,绕过https

  1. 直接从http拉取
  2. 修改参数

    1. # Set SSL Verify to false only for specific repo:
    2. git config http.sslVerify false
    3. # Set SSL Verify to false Globally:
    4. git config --global http.sslVerify false
gogs    2023-05-18 11:26:03    14    0    0

背景

有一个项目达到了80多M,拉取非常man
实际影响的文件如下

  1. $ du -sh ./*
  2. 1.0K ./HEAD
  3. 1.0K ./config
  4. 1.0K ./description
  5. 49K ./hooks
  6. 12K ./index
  7. 1.0K ./info
  8. 3.0K ./logs
  9. 80M ./objects
  10. 4.0K ./packed-refs
  11. 2.0K ./refs
  12. $ du -sh ./objects/*
  13. 116K ./objects/pack/pack-2be7641a760fcd46b8fe118cf2ffdcd91d60c3c9.idx
  14. 80M ./objects/pack/pack-2be7641a760fcd46b8fe118cf2ffdcd91d60c3c9.pack

git文件解释

  1. $ ls
  2. HEAD // 指向当前分支
  3. branches/ // 目录
  4. config // 项目特有的配置选项
  5. description // 仅供 GitWeb 程序使用
  6. hooks/ // 保存了客户端或服务端钩子脚本
  7. index // 保存了暂存区域信息
  8. info/ // 保存了一份不希望在 .gitignore 文件中管理的忽略模式 (ignored patterns) 的全局可执行文件
  9. objects/ // 存储所有数据内容
  10. refs/ // 存储指向数据 (分支) 的提交对象的指针
7/14