Helm是Kubernetes的包管理器,类似于Python的pip centos的yum,主要用来管理 Charts。
Helm Chart是用来封装Kubernetes原生应用程序的一系列YAML文件。可以在你部署应用的时候自定义应用程序的一些Metadata,以便于应用程序的分发。对于应用发布者而言,可以通过Helm打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。
在kubernetes中部署一个可以使用的应用,需要涉及到很多的kubernetes资源的共同协作。
部署一个服务,会一些kubernetes的资源对象,包括deployment用于部署应用,service提供服务发现,secret配置服务的密码,ingress用于集群外部访问,有可能需要pv和pvc来提供持久恶化服务。会涉及到一些依赖,数据库或其他服务启动。这些资源过于分散,不方便管理,直接提供kubectl来管理一个应用,让人头疼。
在部署一个应用,会遇到哪些问题:
如何将应用的一系列资源当做一个软件包管理
对于使用者而言,使用Helm后不用需要编写复杂的应用部署文件,可以以简单的方式在Kubernetes上查找、安装、升级、回滚、卸载应用程序
由于Helm v2 Tiller服务端在社区一直存在已知的安全问题,攻击者可以通过tiller在集群内安装未经授权的应用,因此推荐您升级至Helm v3版本。
helm3是直接与k8s api互通 无需再helm init 创建服务端,比较大的改动是,移除 Tiller(Helm 2 是一种 Client-Server 结构,客户端称为 Helm,服务器称为 Tiller)。Helm 3 只有客户端
# AlpineLinux with a glibc-2.28-r0 and Oracle Java 8
FROM alpine:3.8
MAINTAINER Anastas Dancha <anapsix@random.io>
# thanks to Vladimir Krivosheev <develar@gmail.com> aka @develar for smaller image
# and Victor Palma <palma.victor@gmail.com> aka @devx for pointing it out
# Java Version and other ENV
ENV JAVA_VERSION_MAJOR=8 \
JAVA_VERSION_MINOR=192 \
JAVA_VERSION_BUILD=12 \
JAVA_PACKAGE=jdk \
HOTSWAP_AGENT_VERSION=1.2.0 \
JAVA_JCE=unlimited \
JAVA_HOME=/opt/jdk \
PATH=${PATH}:/opt/jdk/bin \
GLIBC_REPO=https://github.com/sgerrand/alpine-pkg-glibc \
GLIBC_VERSION=2.28-r0 \
LANG=C.UTF-8
# do all in one step
RUN set -ex && \
[[ ${JAVA_VERSION_MAJOR} != 7 ]] || ( echo >&2 'Oracle no longer publishes JAVA7 packages' && e
docker exec -it -u root ContainerID bash
docker image prune -a --filter "until=720h"
reg.xxx.com/test
开头的所有镜像
docker images prune -a --filter=reference='reg.xxx.com/test/*:*'
docker save -o node:18-bullseye-slim.tar node:18-bullseye-slim
docker load -i node:18-bullseye-slim.tar
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 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 版本开始,则进一步演进为使用 runC 和 containerd。
runc 是一个 Linux 命令行工具,用于根据 OCI容器运行时规范 创建和运行容器。
containerd
$ docker pull kong/kong-gateway:3.3.0.0
mediaType in manifest should be 'application/vnd.docker.distribution.manifest.v2+json' not 'application/vnd.oci.image.manifest.v1+json'
在终端输入命令:
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
,命令如下:
# 首先通过rpm -qa| docker 查看已经安装的docker版本,然后卸载掉老的,再安装新的,再启动服务,测试即可
yum -y remove docker-ce-19.03.4-3.el7.x86_64
yum -y remove docker-ce-cli-19.03.4-3.el7.x86_64
yum -y install d
随着光纤入户的入网方式变得普及,很多人家里现在都需要把路由器接到光猫上网。
画一个极简化的拓扑图就是(省略大部分家庭没有的交换机,有线和无线设备统称为网络设备):
虽然装维师傅肯定会把设备调试好,但是未必会使用最好的连接方式:还是有很多装维师傅在用户没有明确要求的情况下默认将光猫设置为主路由,自家路由器设置为二级路由。
这样做虽然可以上网,但是以后网络出问题的几率会高很多。
原因也很好理解:光猫原本只是一个光电信号转换器,不需要多少性能。
现在出于方便(至少是测试方便)等原因,光猫大多附带了路由和WiFi功能。路由和WiFi是非常占用资源的功能,免费租用给用户的光猫显然要求成本尽可能的低,启用路由和无线功能之后,光猫负荷较大。
虽然短时间工作、或者数据吞吐量比较小的时候,光猫还能够应付,一旦长时间连续工作、带机数量比较多、或者进行大数据量下载传输操作的时候,就有可能出现网速不稳定、带宽不达标、网络延迟升高、丢包率高等现象了。
此外光猫的固件功能缺失严重,根本无法有效地管理。
当然对于根本看不懂上面的话,或者觉得自己家要求不高、无所谓的人,我就直接说了,一般路由只需要一个就够了,光猫的路由和路由器功能重复了,是在毫无意义地增加网络复杂度,首先我们得了解一下路由器和光猫有几种接法,在此之前有必要介绍一下路由器和光猫。
(网络图片)光猫一般长这个样子,如果您不知道什么是光纤线,最好先去搞清楚自己家是不是光纤入户。警告:光纤线不要随意弯折,不要随意摆弄。光猫通常有数个网络接口,这些接口可能有区别,请不要随意改动。本文内容中,不涉及到对光猫上面接的线的改动,非必要情况下请勿改动光猫的连线,(除非超过百兆的宽带误用了百兆网口)
路由器就是您自己买的那个设备,接线面板大概长这样。
接口方面,一般有一个WAN口(高端路由器可能有两个或更多),数个LAN口。WAN口和LAN口不一样,务必区分。
区分方式很简单,看说明书就行了。
或者通常WAN口和LAN口是分开布置的,颜色上也有区分,数量一般是LAN口多于WAN口
关键字 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相关的
用的镜像是alpine,报错 standard_init_linux.go:211: exec user process caused "no such file or directory"
这篇文档写的原因有多种,根本的原因是缺少glibc库
用了带glibc库的alpine镜像后,可以了
也可以用dockerhub上的centos7和debian11,都没问题,只是比alpine镜像要大很多。
参考:https://www.cnblogs.com/gaohongyu/p/16908263.html
原始镜像:https://hub.docker.com/r/frolvlad/alpine-glibc
$ docker history --format {{.CreatedBy}} --no-trunc=true sanger/alp
因为资源有限,只能先玩玩1主1从。
sealos节点最少要2核CPU,vmware中要设置1个处理器 2个内核。
apt install vim net-tools iptables iputils-ping -y
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 安装包:
$ sealos pull labring/kubernetes:v1.25.0
$ sealos save -o kubernetes.tar labring/kubernetes:v1.25.0
拷贝 kubernetes.tar 到离线环境, 使用 load 命令导入镜像即可:
$ sealos load -i kubernetes.tar
剩下的安装方式与在线安装一致。
$ sealos images
$ git clone https://gogs.xxx.com/hahahei/test.git
fatal: unable to access 'https://gogs.xxx.com/hahahei/test.git/': Peer's Certificate issuer is not recognized.
具体原因未知
中心思想是打不过就绕过去,绕过https
修改参数
# Set SSL Verify to false only for specific repo:
git config http.sslVerify false
# Set SSL Verify to false Globally:
git config --global http.sslVerify false
有一个项目达到了80多M,拉取非常man
实际影响的文件如下
$ du -sh ./*
1.0K ./HEAD
1.0K ./config
1.0K ./description
49K ./hooks
12K ./index
1.0K ./info
3.0K ./logs
80M ./objects
4.0K ./packed-refs
2.0K ./refs
$ du -sh ./objects/*
116K ./objects/pack/pack-2be7641a760fcd46b8fe118cf2ffdcd91d60c3c9.idx
80M ./objects/pack/pack-2be7641a760fcd46b8fe118cf2ffdcd91d60c3c9.pack
$ ls
HEAD // 指向当前分支
branches/ // 目录
config // 项目特有的配置选项
description // 仅供 GitWeb 程序使用
hooks/ // 保存了客户端或服务端钩子脚本
index // 保存了暂存区域信息
info/ // 保存了一份不希望在 .gitignore 文件中管理的忽略模式 (ignored patterns) 的全局可执行文件
objects/ // 存储所有数据内容
refs/ // 存储指向数据 (分支) 的提交对象的指针