- oss
|
|
上主是我的牧者,我实在一无所缺
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
得到回复:
|
|
|
|
|
|
其他节点执行:
|
|
|
|
|
|
cat tiller.yaml
|
|
cat rbac-runner-config.yaml
|
|
cat values-spm-operation-frontend.yaml
|
|
cat templates/configmap.yaml
|
|
|
|
Java 需要
cat maven-nfs.yaml
|
|
|
|
|
|
GitLab集成k8s 签名错误
|
|
cat gitlab-admin-service-account.yaml
|
|
获取 Service Token
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
没有代理执行步骤5
|
|
|
|
|
|
|
|
|
|
公网会卡在:
|
|
文件路径”/etc/kubernetes/manifests/etcd.yaml”
此处”xxx”为公网ip,要关注的是”–listen-client-urls”和”–listen-peer-urls”。需要把–listen-client-urls 和 –listen-peer-urls 都改成0.0.0.0:xxx
得到回复:
|
|
|
|
|
|
其他节点执行:
|
|
如果安装过程中出任何问题,可以重置后重新安装
|
|
|
|
获取token命令
|
|
如果dashboard的token过期,以下脚本重新生成config文件
|
|
假设我们需要使用Docker运行一个Node.js应用
|
|
构建镜像:
|
|
构建镜像时,Docker需要先准备context ,将所有需要的文件收集到进程中。默认的context包含Dockerfile目录中的所有文件,但是实际上,我们并不需要.git目录,node_modules目录等内容。 .dockerignore 的作用和语法类似于 .gitignore,可以忽略一些不需要的文件,这样可以有效加快镜像构建时间,同时减少Docker镜像的大小。示例如下:
|
|
从技术角度讲,你可以在Docker容器中运行多个进程。你可以将数据库,前端,后端,ssh,supervisor都运行在同一个Docker容器中。但是,这会让你非常痛苦:
因此,我建议大家为每个应用构建单独的Docker镜像,然后使用 Docker Compose 运行多个Docker容器。
现在,我从Dockerfile中删除一些不需要的安装包,另外,SSH可以用docker exec替代。示例如下:
|
|
Docker镜像是分层的,下面这些知识点非常重要:
Docker镜像类似于洋葱。它们都有很多层。为了修改内层,则需要将外面的层都删掉。记住这一点的话,其他内容就很好理解了。
现在,我们将所有的RUN指令合并为一个。同时把apt-get upgrade删除,因为它会使得镜像构建非常不确定(我们只需要依赖基础镜像的更新就好了)
|
|
记住一点,我们只能将变化频率一样的指令合并在一起。将node.js安装与npm模块安装放在一起的话,则每次修改源代码,都需要重新安装node.js,这显然不合适。因此,正确的写法是这样的:
|
|
当镜像没有指定标签时,将默认使用latest 标签。因此, FROM ubuntu 指令等同于FROM ubuntu:latest。当时,当镜像更新时,latest标签会指向不同的镜像,这时构建镜像有可能失败。如果你的确需要使用最新版的基础镜像,可以使用latest标签,否则的话,最好指定确定的镜像标签。
示例Dockerfile应该使用16.04作为标签。
|
|
假设我们更新了apt-get源,下载,解压并安装了一些软件包,它们都保存在/var/lib/apt/lists/目录中。但是,运行应用时Docker镜像中并不需要这些文件。我们最好将它们删除,因为它会使Docker镜像变大。
示例Dockerfile中,我们可以删除/var/lib/apt/lists/目录中的文件(它们是由apt-get update生成的)。
|
|
在示例中,我们选择了ubuntu作为基础镜像。但是我们只需要运行node程序,有必要使用一个通用的基础镜像吗?node镜像应该是更好的选择。
|
|
更好的选择是alpine版本的node镜像。alpine是一个极小化的Linux发行版,只有4MB,这让它非常适合作为基础镜像。
|
|
WORKDIR指令可以设置默认目录,也就是运行RUN / CMD / ENTRYPOINT指令的地方。
CMD指令可以设置容器创建是执行的默认命令。另外,你应该讲命令写在一个数组中,数组中每个元素为命令的每个单词(参考官方文档)。
|
|
ENTRYPOINT指令并不是必须的,因为它会增加复杂度。ENTRYPOINT是一个脚本,它会默认执行,并且将指定的命令错误其参数。它通常用于构建可执行的Docker镜像。entrypoint.sh如下:
|
|
示例Dockerfile:
|
|
可以使用如下命令运行该镜像:
|
|
|
|
我们应该把变化最少的部分放在Dockerfile的前面,这样可以充分利用镜像缓存。
示例中,源代码会经常变化,则每次构建镜像时都需要重新安装NPM模块,这显然不是我们希望看到的。因此我们可以先拷贝package.json,然后安装NPM模块,最后才拷贝其余的源代码。这样的话,即使源代码变化,也不需要重新安装NPM模块。
|
|
|
|
运行容器时,可以指定–restart always选项。这样的话,容器崩溃时,Docker守护进程(docker daemon)会重启容器。对于需要长时间运行的容器,这个选项非常有用。但是,如果容器的确在运行,但是不可(陷入死循环,配置错误)用怎么办?使用HEALTHCHECK指令可以让Docker周期性的检查容器的健康状况。我们只需要指定一个命令,如果一切正常的话返回0,否则返回1。示例如下:
|
|
线上拉取数据,缓存至本地,读取本地版本,对比线上版本号,如有更新,更新本地数据库数据,如没有,则读取本地.
IDbDao.cs
接口定义
|
|
CacheOption.cs
实现
|
|
IRepository.cs
对基本数据操作接口定义,如增删改查
|
|
DbRepository.cs
数据库脚本实现
|
|
RemoteRepository.cs
接口类实现
|
|
Response.cs
|
|
HttpUtility.cs
http操作类
|
|
ISerializer.cs
格式化接口
|
|
SerializerJson.cs
|
|
SQLite.cs
HttpMethod.cs
|
|
TableVersions.cs
|
|
GetStruct.cs
|
|
|
|