docker镜像导入导出有两种方式
- export/import
- load/save
export/import
docker export -o "导出的镜像文件名.tar" CONTATINER
docker import "导出的镜像文件名.tar" "镜像名:版本号"
load/save
docker load --input "导出的镜像文件名.tar"
docker save -o "导出的镜像文件名.tar" "要导出的镜像名"
有时候需要在启动POD前,修改POD内核相关参数,除了使用initContainer
还可以使用sysctl
。
参考链接Using sysctls in a Kubernetes Cluster
apiVersion: v1
kind: Pod
metadata:
name: sysctl-example
spec:
securityContext:
sysctls:
- name: kernel.shm_rmid_forced
value: "0"
- name: net.core.somaxconn
value: "1024"
- name: kernel.msgmax
value: "65536"
...
DevOps 是指对企业文化、业务自动化和平台设计等方面进行全方位变革,从而实现迅捷、优质的服务交付,提升企业响应能力和价值。只有通过快速迭代的 IT 服务交付,这一切才能实现。DevOps
可以将传统应用和最新的云原生应用与基础架构彼此相连。
DevOps 就是开发(Development)、测试(QA)、运维(Operations)这三个领域的合并。
从字面上来看,”DevOps”一词是由英文 Development
(开发)和 Operations
(运维)组合而成,但它所代表的理念和实践要比这广阔的多。DevOps 涵盖了安全、协作方式、数据分析等许多方面。
DevOps 强调通过一系列手段来实现既快又稳的工作流程,使每个想法(比如一个新的软件功能,一个功能增强请求或者一个 bug 修复)在从开发到生产环境部署的整个流程中,都能不断地为用户带来价值。这种方式需要开发团队和运维团队密切交流、高效协作并且彼此体谅。此外,DevOps 还要能够方便扩展,灵活部署。有了 DevOps,需求最迫切的工作就能通过自助服务和自动化得到解决;通常在标准开发环境编写代码的开发人员也可与 IT 运维人员紧密合作,加速软件的构建、测试和发布,同时保障开发成果的稳定可靠。
DevOps 可以加快一个想法从提出到部署的整个过程。DevOps 的核心在于,在应用的整个生命周期中,都要确保日常运维任务自动化和环境的标准化。容器可以提供标准化的环境,你需要一个平台来管理它们,同时提供内置的自动化功能并支持各种基础架构。
选择支持流程的工具对于 DevOps 的成功至关重要。运维团队要跟上快速开发周期,就需要利用高度灵活的平台,并像开发团队对待代码一样,对待平台的基础架构。手动部署不仅速度慢,而且可能出错。因此,您也可通过自动化来简化平台调配和部署。
持续集成和持续部署管道(CI/CD)是实施 DevOps 的一大重要成果。CI/CD 可帮助您频繁地向客户交付应用并检验软件质量,而且只需极少的人工干预。
具体而言,CI/CD 在整个应用生命周期内(从集成和测试阶段,到交付和部署)都引入了持续自动化和持续监控,让您能够快速识别和改正问题与缺陷。这些彼此关联的实践通常被统称为“CI/CD 管道”,需要开发和运维团队以敏捷方式协同支持。
参考链接
流程:
GitLab
上;Jenkins
被触发后,首先从代码仓库拉取源码,进行构建、静态分析和单元测试,然后创建镜像推送到镜像仓库Harbor
,最后调用Kubernetes API
更新应用;在spring boot中,集成Mybatis可以使用完全注解的方式,完全不用新增任何配置文件。多条件判断,可以使用<script>
和<set>
搭配实现。
@Update("<script>update t_user " +
"<set> " +
"<if test='userName != null'> user_name = #{userName},</if>" +
"<if test='userPwd != null'> user_pwd = #{userPwd},</if>" +
"<if test='userRemark != null'> user_remark = #{userRemark},</if>" +
"<if test='userPhone != null'> user_phone = #{userPhone},</if>" +
"<if test='userEmail != null'> user_email = #{userEmail},</if>" +
"</set> " +
"where user_id = #{userId}</script>")
@Select("select id,name,description,enabled,deleted,date_created as dateCreated,last_modified as lastModified from admin_role (#{roleParam})")
//不使用 @Param 时,那么,此时 collection 需要定义为 list,否则会报错
@Select({
"<script>",
"SELECT * ",
"FROM users WHERE id IN",
"<foreach item='id' index='index' collection='ids' open='(' separator=',' close=')'>",
"#{id}",
"</foreach>",
"</script>"
})
List<UserEntity> getUserById(@Param("ids") List<String> ids);
@Insert("insert into t_alert_log (alert_name,severity,message,start_at,end_at) " +
"values(#{alertName},#{severity},#{message},#{startAt},#{endAt})")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Update("update t_alert_log set status=true,remark=#{remark} where token=#{token}")
@ResultType(String.class)
// 一般通过#{xxx}方式传入内容,但是表名和字段名不能通过这个方式.
// 动态传入表名和字段名用到${xxx}
@Delete("delete from ${tableName} where DATE(${columnName}) <= DATE(DATE_SUB(NOW(),INTERVAL #{interval} day));")
void delete(String tableName, String columnName, int interval);
Helm用途
做为Kubernetes的一个包管理工具,Helm具有如下功能:
- 创建新的chart
- chart打包成tgz格式
- 上传chart到chart仓库或从仓库中下载chart
- 在Kubernetes集群中安装或卸载chart
- 管理用Helm安装的chart的发布周期
Helm有三个重要概念:- chart:包含了创建Kubernetes的一个应用实例的必要信息
- config:包含了应用发布配置信息
- release:是一个chart及其配置的一个运行实例
操作类型 | 命令 |
---|---|
添加仓库 | helm repo add loki https://grafana.github.io/loki/charts |
更新仓库 | helm repo update |
查看helm仓库列表 | helm repo list |
查看本地已安装的包 | helm list (ls) |
查看全部release(包括删除的…) | helm list -a |
查看helm版本 | helm version |
删除release | helm delete loki |
设置安装release名称 | –name test |
设置安装的namespace | –namespace test |
设置自定义属性 | –set “loki.serviceName=loki” |
从文件读取自定义属性集合 | -f values.yaml |
查找本地release的版本列表 | helm search testapi -l |
指定charts版本 | –version 8.2.4 |
查看安装历史 | helm history prometheus-operator |
版本回滚 | helm rollback prometheus-operator 1 |
打包chart | helm package mychart |
获取charts | helm fetch stable/mysql –version 0.2.8 –untar |
检查chart是否存在问题 | helm lint mysql |
创建一个本地仓库 | helm serve –address 0.0.0.0:8879 –repo-path ./charts |
创建一个chart | helm create mychart |
查看release状态 | helm status mysql |
更新release | helm upgrade mysql -f mysql/values.yaml –set resources.requests.memory=1024Mi mysql |
查看指定release的历史版本部署时部分配置信息 | helm get –revision 1 mysql |
对chart的模板和配置进行测试 | helm install –dry-run –debug ./ |
查看release默认配置 | helm inspect values stable/prometheus-operator |
本文使用的istio版本:
1.4.2
上章内容只是简单运行了
Bookinfo
示例(Istio使用【Bookinfo示例】),访问页面,Reviews
虽然有三个版本,但是刷新浏览器,三个版本是随机返回。本章内容仍然使用官方样例配置,定义一些自定义路由规则。在这之前最好了解下Istio使用【CRDs】。
DestinationRule
kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
V1
和V2
版本8:2
比重,V3
不返回apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
weight: 80
- destination:
host: reviews
subset: v2
weight: 20
Header
中包含jason
用户返回V2
版本,否则返回V3
版本apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v3
其它可以参考samples/bookinfo/networking/
目录下配置。