-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
227 lines (194 loc) · 38.5 KB
/
Copy pathindex.html
File metadata and controls
227 lines (194 loc) · 38.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>HuckOps</title><meta name="author" content="Huck"><meta name="copyright" content="Huck"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta property="og:type" content="website">
<meta property="og:title" content="HuckOps">
<meta property="og:url" content="http://www.huckops.xyz/index.html">
<meta property="og:site_name" content="HuckOps">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="http://www.huckops.xyz/img/avatar.jpg">
<meta property="article:author" content="Huck">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="http://www.huckops.xyz/img/avatar.jpg"><link rel="shortcut icon" href="/img/favicon.png"><link rel="canonical" href="http://www.huckops.xyz/"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: undefined,
translate: {"defaultEncoding":2,"translateDelay":0,"msgToTraditionalChinese":"繁","msgToSimplifiedChinese":"簡"},
noticeOutdate: undefined,
highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
copy: {
success: '复制成功',
error: '复制错误',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: false,
post: false
},
runtime: '天',
date_suffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: {"limitCount":50,"languages":{"author":"作者: Huck","link":"链接: ","source":"来源: HuckOps","info":"著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。"}},
lightbox: 'fancybox',
Snackbar: undefined,
source: {
jQuery: 'https://cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js',
justifiedGallery: {
js: 'https://cdn.jsdelivr.net/npm/justifiedGallery/dist/js/jquery.justifiedGallery.min.js',
css: 'https://cdn.jsdelivr.net/npm/justifiedGallery/dist/css/justifiedGallery.min.css'
},
fancybox: {
js: 'https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.js',
css: 'https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.css'
}
},
isPhotoFigcaption: false,
islazyload: false,
isanchor: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: 'HuckOps',
isPost: false,
isHome: true,
isHighlightShrink: false,
isToc: false,
postUpdate: '2023-04-13 01:43:37'
}</script><noscript><style type="text/css">
#nav {
opacity: 1
}
.justified-gallery img {
opacity: 1
}
#recent-posts time,
#post-meta time {
display: inline !important
}
</style></noscript><script>(win=>{
win.saveToLocal = {
set: function setWithExpiry(key, value, ttl) {
if (ttl === 0) return
const now = new Date()
const expiryDay = ttl * 86400000
const item = {
value: value,
expiry: now.getTime() + expiryDay,
}
localStorage.setItem(key, JSON.stringify(item))
},
get: function getWithExpiry(key) {
const itemStr = localStorage.getItem(key)
if (!itemStr) {
return undefined
}
const item = JSON.parse(itemStr)
const now = new Date()
if (now.getTime() > item.expiry) {
localStorage.removeItem(key)
return undefined
}
return item.value
}
}
win.getScript = url => new Promise((resolve, reject) => {
const script = document.createElement('script')
script.src = url
script.async = true
script.onerror = reject
script.onload = script.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
script.onload = script.onreadystatechange = null
resolve()
}
document.head.appendChild(script)
})
win.activateDarkMode = function () {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
}
}
win.activateLightMode = function () {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
}
}
const t = saveToLocal.get('theme')
if (t === 'dark') activateDarkMode()
else if (t === 'light') activateLightMode()
const asideStatus = saveToLocal.get('aside-status')
if (asideStatus !== undefined) {
if (asideStatus === 'hide') {
document.documentElement.classList.add('hide-aside')
} else {
document.documentElement.classList.remove('hide-aside')
}
}
const detectApple = () => {
if (GLOBAL_CONFIG_SITE.isHome && /iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
document.documentElement.classList.add('apple')
}
}
detectApple()
})(window)</script><meta name="generator" content="Hexo 5.4.2"><link rel="alternate" href="/atom.xml" title="HuckOps" type="application/atom+xml">
</head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/img/avatar.jpg" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="site-data"><div class="data-item is-center"><div class="data-item-link"><a href="/archives/"><div class="headline">文章</div><div class="length-num">9</div></a></div></div><div class="data-item is-center"><div class="data-item-link"><a href="/tags/"><div class="headline">标签</div><div class="length-num">3</div></a></div></div><div class="data-item is-center"><div class="data-item-link"><a href="/categories/"><div class="headline">分类</div><div class="length-num">3</div></a></div></div></div><hr/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> Home</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> Archives</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> Tags</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> Categories</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> Link</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> About</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url('/img/banner.jpg')"><nav id="nav"><span id="blog_name"><a id="site-name" href="/">HuckOps</a></span><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> Home</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> Archives</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> Tags</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> Categories</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> Link</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> About</span></a></div></div><div id="toggle-menu"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">HuckOps</h1><div id="site_social_icons"><a class="social-icon" href="https://github.com/HuckOps" target="_blank" title="Github"><i class="fab fa-github"></i></a><a class="social-icon" href="mailto:sujiahao@hotmail.com" target="_blank" title="Email"><i class="fas fa-envelope"></i></a></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="post_cover left_radius"><a href="/2022/03/28/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E5%8F%91%E5%B8%83%E5%B7%A5%E7%A8%8B/" title="发布工程"> <img class="post_bg" src="/img/banner.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="发布工程"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/03/28/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E5%8F%91%E5%B8%83%E5%B7%A5%E7%A8%8B/" title="发布工程">发布工程</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-03-28T14:17:34.000Z" title="发表于 2022-03-28 22:17:34">2022-03-28</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/">架构</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/SRE/">SRE</a></span></div><div class="content">发布对于大型生产环境和复杂的业务系统来说,发布应用或者变更并不是简单的在服务器上运行二进制包或者脚本就可以了,这样很不便于服务的管理,且服务的稳定性也无法保障,所以就会有发布工程这一说法。
发布工程要素自给自足的发布对于每个研发团队来说,都需要有一个相对应的发布工程师,发布工程师指定发布策略,编写发布工具,指定发布流程。
追求速度当发布频繁时,每个版本之间的变更将减少。这样能减小新版本上线侯的测试和调试成本。对于项目可以高频次构建,然后在多次构建中选择一个构建版本进行发布(条件:需要是所有测试都通过的版本)。
密闭性每一次构建的产物,都不能因为构建环境差异导致构建差异。所有依赖在构建过程要自包含。
当构建在生产环境中出现bug时,按照之前的源码版本,加入新的改动之后生成新的构建(即向repo推送fix的commit)。构建的编译环境会被包含到repo中(显然有些不可能,所以最佳做法应该时在repo中保存编译器版本等环境信息),这样能保证每次构建环境都是相同的。
发布流程对于变更发布,一般需要遵循一下流程:
提交代码到repo,提mr,进行review
指定流程中的动作
创建新发布版
...</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/2022/03/27/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4/" title="自动化运维"> <img class="post_bg" src="/img/banner.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="自动化运维"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/03/27/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4/" title="自动化运维">自动化运维</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-03-27T14:02:34.000Z" title="发表于 2022-03-27 22:02:34">2022-03-27</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/">架构</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/SRE/">SRE</a></span></div><div class="content">自动化运维的价值对于大型的计算集群或者线上(测试)环境,有成千上万台服务器在运行,单凭SRE进行手动变更或者运维是远不能支持平时工作的,所以这里就要讲到自动化运维的价值:
一致性大型集群在硬件层面很难做到完全统一,但是在系统层面、软件层面和服务层面是可以通过认为影响达到一致的。生产环境的一直能很大程度上标准化生产环境,以降低环境差异化带来的人力成本或者其他附加成本。比如在生产环境中,机器可以通过群组的方式进行批量管理,每个群组内的机器试用相同的环境配置,对于配置试用repo进行统一管理,由此可以把机器的管理粒度从单机提升到群组(但是同时带来一个隐患,如果对群组进行配置变更,如果配置失败影响面就会从单机上升到大批量)
硬件层面比较难做到一致化或者统一化(主要问题来源于设备供应商不同,不同设备的管理方式也不大一样),所以在设计自动化的时候尽量兼容更多的硬件平台或者指定CFI(以上两个选择一个就好,后者可能更贴合当前实际),同样在设计时也尽量使用通用管理方式,比如ipmi协议。
平台化对于变更或者运维操作具象成平台上操作的一个对象,对象可以是单机,也可以是集群,也可以是自定的群组。平台化是自 ...</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/2021/11/20/cmdb/%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86%E4%B8%AD%E5%BF%83(%E6%9C%8D%E5%8A%A1%E7%AB%AF)/" title="密码管理中心"> <img class="post_bg" src="/img/banner.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="密码管理中心"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/11/20/cmdb/%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86%E4%B8%AD%E5%BF%83(%E6%9C%8D%E5%8A%A1%E7%AB%AF)/" title="密码管理中心">密码管理中心</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2021-11-20T12:57:34.000Z" title="发表于 2021-11-20 20:57:34">2021-11-20</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E8%BF%90%E7%BB%B4%E5%B9%B3%E5%8F%B0/">运维平台</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/CMDB%E5%B9%B3%E5%8F%B0/">CMDB平台</a></span></div><div class="content">对于生产传环境服务器,密码一定不是固定的。对于安全起见,密码需要设计成动态的,主要防止服务器而已登录和服务器权限管理。
密码管理中心的主要功能就是对于服务器的密码进行动态修改,并对生成的密码进行存储,密码展现给指定的业务线和系统管理员。
JWT认证/Tag认证JWT认证JWT是登录鉴权认证。用户登录系统时向API发送自己的账号和密码,服务端做账号和密码校验,如果校验成功,向前端返回一个加密JWT Token,作为用户的认证标志。
12345678{ "code": 100, "tag": [ "owt.sa", "owt.mi_img" ], "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNjM3NDIzNjU2LCJpc3MiOiJwYXNzd29yZCJ9.2jEUJyowdtzdz13zkgS6q_iS54ES0wk37uEKj0NN3-Y ...</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/2021/10/05/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E9%A3%8E%E9%99%A9%E7%AE%A1%E7%90%86/" title="生产风险管理"> <img class="post_bg" src="/img/banner.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="生产风险管理"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/10/05/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E9%A3%8E%E9%99%A9%E7%AE%A1%E7%90%86/" title="生产风险管理">生产风险管理</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2021-10-05T08:26:34.000Z" title="发表于 2021-10-05 16:26:34">2021-10-05</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/">架构</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/SRE/">SRE</a></span></div><div class="content">$e^x$效应在生产环境下,所有服务的可用性都不可能是100%,大多数企业都会尽量的向100%靠近,但是在极度接近100%的过程中,成本也会成指数上涨。可以理解为可靠性每提升一个等级,就会指出更多的成本,类似于$e^x$函数。
风险管理规避风险的成本主要可以分为两部分:
计算资源成本:包括服务器成本和运维成本
机会成本:由某组织承担,构建资源分配和减少风险系统、监控。
风险度量风险度量的指标主要是服务的可用性,但是可用性通常被分为两种:
基于时间基于时间的服务可用性主要是衡量服务在整个服务时间内的可用时间,其计算公式为$\frac {T_e} {T_a}$。
基于请求基于请求的服务可用性主要是衡量正确请求在所有请求中的比例,其计算公式为$\frac {R_e} {R_a}$。
服务风险容忍可用性目标及可用性容忍可用性目标和可用性容忍通常是一个服务的最低可用性,如果低于这个可用性就可能导致用户对该服务产生负面的评价,同时也会影响服务的收入和上游甲方的评价下降。所以该部分应该更加专注于消费者。
故障类型常见的故障主要是宕机故障,但是其他种类的故障也不容忽视。比如用户信息返回错乱,A ...</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/2021/10/04/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E7%94%9F%E4%BA%A7%E5%8A%A8%E5%8A%9B%E7%8E%AF%E5%A2%83/" title="生产动力环境"> <img class="post_bg" src="/img/banner.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="生产动力环境"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/10/04/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E7%94%9F%E4%BA%A7%E5%8A%A8%E5%8A%9B%E7%8E%AF%E5%A2%83/" title="生产动力环境">生产动力环境</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2021-10-04T15:58:34.000Z" title="发表于 2021-10-04 23:58:34">2021-10-04</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/">架构</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/SRE/">SRE</a></span></div><div class="content">硬件层通常来说,目前服务器大多都使用的是本地硬件服务器或者云服务器。本地服务器常见是使用X86架构,目前华为鲲鹏在发展ARM架构服务器。云服务器通常是虚拟服务器,大部分都是基于KVM(QEMU)的。
目前企业很少会使用单种云,大部分都是使用混合云,对于涉密业务或者大量运算的业务则放在本地机房的物理服务器中,对于公网服务就放在公有云服务器。
混合云和多地多中心的机房优势在于:
多地容灾,单计算中心故障有其余中心冗余
服务隔离,涉密服务本地运行,保证数据安全
软件层管理计算资源管理构建CMDB,集中化管理线上和测试计算资源,将服务器信息和网络资源信息进行精细化管理,落实到计算实例上,有效提高资源管理效率。
对于批量运维任务,可以使用Ansible等自动化运维工具做自动化管理。
计算任务管理将计算任务批量化,使用批量部署工具进行任务提交,多机部署多计算实例,提高计算任务管理效率。
本处可以使用Google提供的Borg或者Kubernetes做计算任务管理。批量提交计算任务后,每个计算实体都是以一个(类)hostname代替。该种方式在Borg中被叫做BNS,即Borg Name S ...</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/2021/10/03/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/SRE%E6%9E%B6%E6%9E%84/" title="SRE架构"> <img class="post_bg" src="/img/banner.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="SRE架构"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/10/03/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/SRE%E6%9E%B6%E6%9E%84/" title="SRE架构">SRE架构</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2021-10-03T04:36:34.000Z" title="发表于 2021-10-03 12:36:34">2021-10-03</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/">架构</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/SRE/">SRE</a></span></div><div class="content">SA和Dev/Ops的挑战通常企业会招聘很多的SA工程师(系统管理员),该部分工程师负责企业生产环境组件的运维,对于需要人工干预的操作进行人工干预。
目前在国内,各公司通常做法是SRE和SA分离,SRE负责业务侧管理和维护,SA工程师负责企业基础架构的维护,包括服务器、基础环境维护。同时Dev和Ops部门分离,所以带来两种成本。
直接成本:业务线扩展,Dev和Ops同步增加,人数共同增长。
间接成本: 消息拉通、同步问题,可能会导致各部门信息不同步,间接导致团队目标不统一。
Dev和Ops部门最大的工作分歧通常出现在新版本发布、变更期间,也可能是发布速度原因。
版本发布: Dev希望随时发布,但是Ops部门希望生产环境一成不变,避免非必要情况下的变更和发版(新版本发布、变更和动力环境割接都有可能导致系统崩溃)
发布速度: Dev部门希望发布是0秒,质量部门希望服务是没有抖动的,但通常来说是不可能的(即使使用平稳变更),可能在变更或者发布的时候会出现服务短暂不可用的情况,所以就可能出现发版或者变更速度跟不上Dev和质量部门的要求。
大型互联网企业SRE解决方案大型互联网企 ...</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/2021/09/12/container/K8S%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90%E5%99%A8/" title="K8S代码生成器"> <img class="post_bg" src="/img/banner.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="K8S代码生成器"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/09/12/container/K8S%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90%E5%99%A8/" title="K8S代码生成器">K8S代码生成器</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2021-09-12T02:42:01.000Z" title="发表于 2021-09-12 10:42:01">2021-09-12</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E4%BA%91%E8%AE%A1%E7%AE%97/">云计算</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/%E5%AE%B9%E5%99%A8%E6%8A%80%E6%9C%AF/">容器技术</a></span></div><div class="content">12.PHONY: generated_filesgenerated_files: gen_prerelease_lifecycle gen_deepcopy gen_defaulter gen_conversion gen_openapi
generated_files文件定义了代码生成器,以上为k8s默认的几种代码生成器。
Tags代码生成器通过Tags识别要生成的代码和代码生成的方式。
全局tags全局tags定义在doc.go中,对整个包中类型自动生成代码。
占坑,后期填
</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/2021/09/12/container/K8S%E6%BA%90%E7%A0%81%E6%9E%84%E5%BB%BA/" title="K8S源码构建"> <img class="post_bg" src="/img/banner.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="K8S源码构建"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/09/12/container/K8S%E6%BA%90%E7%A0%81%E6%9E%84%E5%BB%BA/" title="K8S源码构建">K8S源码构建</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2021-09-12T01:36:34.000Z" title="发表于 2021-09-12 09:36:34">2021-09-12</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E4%BA%91%E8%AE%A1%E7%AE%97/">云计算</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/%E5%AE%B9%E5%99%A8%E6%8A%80%E6%9C%AF/">容器技术</a></span></div><div class="content">K8S是使用golang进行编写的,所以在运行的时候需要将golang代码转换成二进制,K8S代码的构建方式有三种,本地构建、容器环境构建和Bazel环境构建。
本地构建和C++项目类似的,大型项目不可能使用命令行逐个进行go build,所以可以使用makefile的方法构建项目。
在k8s所有项目中,存在两个MakeFile文件:
Makefile:描述项目的编译顺序、编译规则和输出。
Makefile.generated_files: 描述代码生成逻辑。
Makefile文件解析12345678.PHONY: allifeq ($(PRINT_HELP),y)all: @echo "$$ALL_HELP_INFO"elseall: generated_files hack/make-rules/build.sh $(WHAT)endif
这是执行make all的第一步,判断了是否为帮助输出,非帮助输出时,执行generated_files,用于代码生成,然后调用hack/make-rules/build.sh进行构建,参数$(WHAT)为欲构建的组 ...</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/2021/09/04/container/%E5%9F%BA%E4%BA%8EK8S%E7%9A%84LNMP%E6%9E%B6%E6%9E%84%EF%BC%88HPA%EF%BC%89/" title="基于K8s的LNMP架构(HPA)"> <img class="post_bg" src="/img/banner.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="基于K8s的LNMP架构(HPA)"></a></div><div class="recent-post-info"><a class="article-title" href="/2021/09/04/container/%E5%9F%BA%E4%BA%8EK8S%E7%9A%84LNMP%E6%9E%B6%E6%9E%84%EF%BC%88HPA%EF%BC%89/" title="基于K8s的LNMP架构(HPA)">基于K8s的LNMP架构(HPA)</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2021-09-04T15:58:34.000Z" title="发表于 2021-09-04 23:58:34">2021-09-04</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E4%BA%91%E8%AE%A1%E7%AE%97/">云计算</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/%E5%AE%B9%E5%99%A8%E6%8A%80%E6%9C%AF/">容器技术</a></span></div><div class="content">LNMPLNMP架构是常见的Web全栈架构,目前许多网站都使用了该种方法进行开发。对于常见的传统架构,服务器可靠性不是很高,Nginx、PHP或者MySQL任意一个中间件发生故障都可能导致生产环境Web页面崩溃。或者PHP网站在发生高并发时,如果使用传统架构的单节点可能会服务器性能不足,不足以支持过高的并发量,所以将LNMP迁移到k8s架构上会解决以上问题。
架构设计MySQLMySQL是一种有状态服务,MySQL在某些情况下如果发生故障性退出可能会出现服务无法再次启动的情况,所以数据库一般都不会被创建到容器中,通常都是将数据库使用一个物理节点进行运行的。
本实例是使用k8s对LNMP进行全架构迁移,所以将数据库生成到k8s容器中。数据库中存放的是重要的业务数据,无论在任何时候都要保证数据不丢失。对于k8s的pod,其文件具有易失性,如果在pod发生故障的时候会重新生成pod,原pod中的文件将不会被保存。理论上来说,可以使用pod的hostPath进行本地存储,但是通常k8s集群都是多台主机运行的,数据库副本也通常是飘移的,当数据库副本被调度到其他节点的时候原数据将不会被保留。所以这 ...</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/img/avatar.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">Huck</div><div class="author-info__description"></div></div><div class="card-info-data"><div class="card-info-data-item is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">9</div></a></div><div class="card-info-data-item is-center"><a href="/tags/"><div class="headline">标签</div><div class="length-num">3</div></a></div><div class="card-info-data-item is-center"><a href="/categories/"><div class="headline">分类</div><div class="length-num">3</div></a></div></div><a class="button--animated" id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/HuckOps"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/HuckOps" target="_blank" title="Github"><i class="fab fa-github"></i></a><a class="social-icon" href="mailto:sujiahao@hotmail.com" target="_blank" title="Email"><i class="fas fa-envelope"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn card-announcement-animation"></i><span>公告</span></div><div class="announcement_content">This is my Blog</div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/2022/03/28/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E5%8F%91%E5%B8%83%E5%B7%A5%E7%A8%8B/" title="发布工程"><img src="/img/banner.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="发布工程"/></a><div class="content"><a class="title" href="/2022/03/28/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E5%8F%91%E5%B8%83%E5%B7%A5%E7%A8%8B/" title="发布工程">发布工程</a><time datetime="2022-03-28T14:17:34.000Z" title="发表于 2022-03-28 22:17:34">2022-03-28</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2022/03/27/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4/" title="自动化运维"><img src="/img/banner.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="自动化运维"/></a><div class="content"><a class="title" href="/2022/03/27/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4/" title="自动化运维">自动化运维</a><time datetime="2022-03-27T14:02:34.000Z" title="发表于 2022-03-27 22:02:34">2022-03-27</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2021/11/20/cmdb/%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86%E4%B8%AD%E5%BF%83(%E6%9C%8D%E5%8A%A1%E7%AB%AF)/" title="密码管理中心"><img src="/img/banner.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="密码管理中心"/></a><div class="content"><a class="title" href="/2021/11/20/cmdb/%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86%E4%B8%AD%E5%BF%83(%E6%9C%8D%E5%8A%A1%E7%AB%AF)/" title="密码管理中心">密码管理中心</a><time datetime="2021-11-20T12:57:34.000Z" title="发表于 2021-11-20 20:57:34">2021-11-20</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2021/10/05/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E9%A3%8E%E9%99%A9%E7%AE%A1%E7%90%86/" title="生产风险管理"><img src="/img/banner.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="生产风险管理"/></a><div class="content"><a class="title" href="/2021/10/05/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E9%A3%8E%E9%99%A9%E7%AE%A1%E7%90%86/" title="生产风险管理">生产风险管理</a><time datetime="2021-10-05T08:26:34.000Z" title="发表于 2021-10-05 16:26:34">2021-10-05</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2021/10/04/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E7%94%9F%E4%BA%A7%E5%8A%A8%E5%8A%9B%E7%8E%AF%E5%A2%83/" title="生产动力环境"><img src="/img/banner.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="生产动力环境"/></a><div class="content"><a class="title" href="/2021/10/04/SRE%E6%96%B9%E6%B3%95%E8%AE%BA/%E7%94%9F%E4%BA%A7%E5%8A%A8%E5%8A%9B%E7%8E%AF%E5%A2%83/" title="生产动力环境">生产动力环境</a><time datetime="2021-10-04T15:58:34.000Z" title="发表于 2021-10-04 23:58:34">2021-10-04</time></div></div></div></div><div class="card-widget card-categories"><div class="item-headline">
<i class="fas fa-folder-open"></i>
<span>分类</span>
</div>
<ul class="card-category-list" id="aside-cat-list">
<li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E4%BA%91%E8%AE%A1%E7%AE%97/"><span class="card-category-list-name">云计算</span><span class="card-category-list-count">3</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E6%9E%B6%E6%9E%84/"><span class="card-category-list-name">架构</span><span class="card-category-list-count">5</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E8%BF%90%E7%BB%B4%E5%B9%B3%E5%8F%B0/"><span class="card-category-list-name">运维平台</span><span class="card-category-list-count">1</span></a></li>
</ul></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div><div class="card-tag-cloud"><a href="/tags/CMDB%E5%B9%B3%E5%8F%B0/" style="font-size: 1.1em; color: #999">CMDB平台</a> <a href="/tags/SRE/" style="font-size: 1.5em; color: #99a9bf">SRE</a> <a href="/tags/%E5%AE%B9%E5%99%A8%E6%8A%80%E6%9C%AF/" style="font-size: 1.3em; color: #99a1ac">容器技术</a></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/03/"><span class="card-archive-list-date">三月 2022</span><span class="card-archive-list-count">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2021/11/"><span class="card-archive-list-date">十一月 2021</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2021/10/"><span class="card-archive-list-date">十月 2021</span><span class="card-archive-list-count">3</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2021/09/"><span class="card-archive-list-date">九月 2021</span><span class="card-archive-list-count">3</span></a></li></ul></div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站资讯</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">文章数目 :</div><div class="item-count">9</div></div><div class="webinfo-item"><div class="item-name">已运行时间 :</div><div class="item-count" id="runtimeshow" data-publishDate="2021-09-10T16:00:00.000Z"></div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"></div></div><div class="webinfo-item"><div class="item-name">本站总访问量 :</div><div class="item-count" id="busuanzi_value_site_pv"></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2023-04-12T17:43:37.755Z"></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">©2021 - 2023 By Huck</div><div class="framework-info"><span>框架 </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题 </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div><div class="footer_custom_text">厚德修身 精术济世<br/>本站运行在Github Pages</div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="translateLink" type="button" title="简繁转换">简</button><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="/js/tw_cn.js"></script><div class="js-pjax"></div><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>