diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..7d6dee2 Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..af2b05b --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Build and Release Folders +bin-debug/ +bin-release/ +[Oo]bj/ +[Bb]in/ + +# Other files and folders +.settings/ + +.obsidian/ +node_modules/ +public/ + +# Executables +*.swf +*.air +*.ipa +*.apk + +# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties` +# should NOT be excluded as they contain compiler settings and other important +# information for Eclipse / Flash Builder. + +*.mov diff --git a/.vimrc b/.vimrc new file mode 100644 index 0000000..6a6a351 --- /dev/null +++ b/.vimrc @@ -0,0 +1,279 @@ +"============================================================================= +" FileName: _vimrc +" Desc: _vimrc/_gvimrc for windows +" Author: Chen Gan +" Email: gavin.chan.hz@gmail.com +" HomePage: xxxx.xxx.net/gavin +" Version: 0.0.1 +" LastChange: 2014-01-17 09:07:16 +" History: +" add VAM (vim addon management) - 2014/1/11 " +"============================================================================= + +" +" echo "loading _vimrc ... " +" + +source $VIMRUNTIME/vimrc_example.vim +source $VIMRUNTIME/mswin.vim +behave mswin +"colorscheme zellner +colorscheme desert + +" +" 中文编码 +" 同时支持GBK和UTF-8编码 +" +set fileencodings=ucs-bom,utf-8,cp936 +set fileencoding=utf-8 +"set encoding=cp936 +set encoding=utf-8 + +" +" font of display +" +set guifont=Lucida_Console:h15:cANSI + +" +" +" 启动最大化 +" +winsize 1024 768 +"au GUIEnter * simalt ~x +"colorscheme desert + +" +"自动缩进 +" +set autoindent + +" +"行间距 +" +set linespace=2 + +" +"设置tab制表符为4个空格 +" +set ts=2 +set expandtab +set shiftwidth=2 +set cinoptions=>4,e0,n0,f0,{0,}0,^0,:s,=s,l0,gs,hs,ps,ts,+s,c3,C0,(2s,us,U0,w0,m0,j0,)20,*30 + +" +"set cindent +" +if has("autocmd") + autocmd FileType html,jsp,js,xml set ts=2 + autocmd FileType html,jsp,js,xml set et + autocmd FileType html,jsp,js,xml set shiftwidth=2 + autocmd FileType html,jsp,js,xml set cinoptions=>2,e0,n0,f0,{0,}0,^0,:s,=s,l0,gs,hs,ps,ts,+s,c3,C0,(2s,us,U0,w0,m0,j0,)20,*30 +endif + +" show filetypes in menu +"let do_syntax_sel_menu = 1 | runtime! synmenu.vim | aunmenu &Syntax.&Show\ filetypes\ in\ menu + +" +" set syntax type +" +syntax on +"if &filetype != 'javacc' +" setlocal filetype=javacc +"endif +"set syntax=javacc +"cal SetSyn("cpp") +"cal SetSyn("vb") +"cal SetSyn("perl") +"cal SetSyn("awk") + +" +" write backup file (*~) to c:\tmp +" +"set nobackup +set undodir=~/tmp +set backupdir=~/tmp +set backup +setlocal noswapfile +" +" no beeps & no visible bell +" +set vb t_vb= + +" +" show line number +" +set number + +" +"hide toolbar +"see :help 'guioptions' +" +set guioptions-=T +"set guioptions-=m + +set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L] +set laststatus=2 " always show the status line + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"除了选项 textwidth 外,选项 formatoptions 确定了跟文本格式化有关的基本选项,常用的数值有: +" * t:根据 textwidth 自动折行; +" * c:在(程序源代码中的)注释中自动折行,插入合适的注释起始字符; +" * r:插入模式下在注释中键入回车时,插入合适的注释起始字符; +" * q:允许使用“gq”命令对注释进行格式化; +" * n:识别编号列表,编号行的下一行的缩进由数字后的空白决定(与“2”冲突,需要“autoindent”); +" * 2:使用一段的第二行的缩进来格式化文本; +" * l:在当前行长度超过 textwidth 时,不自动重新格式化; +" * m:在多字节字符处可以折行,对中文特别有效(否则只在空白字符处折行); +" * M:在拼接两行时(重新格式化,或者是手工使用“J”命令),如果前一行的结尾或后一行的开头是多字节字符,则不插入空格,非常适合中文 +"Vim 中 formatoptions 的缺省值是“tcq”,一般我会在 .vimrc 文件中加入一行“set formatoptions+=mM” +"来确保 Vim 能在中文字符之间折行而不要求空格的存在,并且在大部分情况下可以正确地处理中文重新格式化。 +" +" +"回车自动添加注释符问题 +" vimhome/ftpplugin/java.vim & javascript.vim +" "Set 'formatoptions' to break comment lines but not other lines, +" "and insert the comment leader when hitting or using "o". +" 修改以下这句 +" "setlocal formatoptions-=t formatoptions+=croql +"set formatoptions=tq +" +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +map gt +map gT +map gt + +"perl settings +" for perl debugging +map :w:!perl -wd "%" +" for perl syntax checking (autosave first) +map :w:!perl -wc "%" +" to run by perl (autosave first) "",'' are both ok +map :w:!perl "%" + +set complete-=i + +" 禁用自动注释 +autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o + +"开始使用Vundle的必须配置 +"""""""""""""""""""""""""""""""""""""""""""""""""""""" +"""""""""""""""""""""""""""""""""""""""""""""""""""""" +"""""""""""""""""""""""""""""""""""""""""""""""""""""" +set nocompatible +filetype off +set rtp+=~/.vim/bundle/vundle/ +call vundle#rc() + +"使用Vundle来管理Vundle +"dos install command : vi +BundleInstall +qall +"""""""""""""""""""""""""""""""""""""""""""""""""""""" +Bundle 'gmarik/vundle' +"PowerLine插件 状态栏增强展示 +Bundle 'L9' +"Bundle 'Lokaltog/vim-powerline' +"Bundle 'mattn/emmet-vim' +"Bundle 'vim-scripts/AuthorInfo' +"Bundle 'Shougo/neocomplcache' +"Bundle 'FuzzyFinder' +"Bundle 'edsono/vim-matchit' +"Bundle 'The-NERD-tree' +"Bundle 'The-NERD-Commenter' +"Ag searcher +"Bundle 'rking/ag.vim' +"Bundle 'scrooloose/syntastic' +"Bundle 'TeTrIs.vim' +"Bundle 'vim-scripts/calendar.vim--Matsumoto' +"Bundle 'mbriggs/mark.vim' +"Bundle 'skammer/vim-css-color' +"Bundle 'vim-scripts/css3-mod' +Bundle 'ybian/smartim' + +"Vundle配置必须 开启插件 +filetype plugin indent on + +"""""""""""""""""""""""""""""""""""""""""""""""""""""" +"""""""""""""""""""""""""""""""""""""""""""""""""""""" +"""""""""""""""""""""""""""""""""""""""""""""""""""""" +let g:smartim_default = 'com.apple.keylayout.US' +let g:smartim_disable = 1 + +"""""""""""""""""""""""""""""""""""""""""""""""""""""" +"Bundle config +"""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Vim-powerline config +"""""""""""""""""""""""""""""""""""""""""""""""""""""" +"vim有一个状态栏 加上powline则有两个状态栏 +set laststatus=2 +set t_Co=256 +let g:Powline_symbols='fancy' + +"emmet-vim config +"""""""""""""""""""""""""""""""""""""""""""""""""""""" +let g:user_emmet_expandabbr_key='' +"let g:user_emmet_expandabbr_key='e' +let g:user_emmet_complete_tag=1 +let g:user_emmet_next_key='' +let g:user_emmet_prev_key='' + +"authorinfo +let g:vimrc_author='Chen Gan' +let g:vimrc_email='gavin.chan.hz@gmail.com' +let g:vimrc_homepage='xxxx.xxx.net/gavin' +"??? error - E492 +"通过bundle安装好后,修改C:\Users\gavin\.vim\bundle\AuthorInfo文件名ftpplugin 为plugin,solved +nmap :AuthorInfoDetect + +"neocomplcache config +let g:neocomplcache_enable_at_startup = 1 +let g:neocomplcache_force_overwrite_completefunc = 1 +let g:neocomplcache_enable_ignore_case=1 +" set the max list in the popup menu. increase the speed +let g:neocomplcache_max_list=20 +inoremap pumvisible() ? "\" : "\" + +"NERDTree +let NERDChristmasTree=1 +let NERDTreeAutoCenter=1 +let NERDTreeMouseMode=2 +let NERDTreeShowBookmarks=1 +let NERDTreeShowFiles=1 +let NERDTreeShowHidden=0 +let NERDTreeShowLineNumbers=1 +let NERDTreeWinPos='left' +let NERDTreeWinSize=40 +let NERDTreeIgnore=['\.vim$', '\~$', '\.o$', '\.d$', '\.a$'] +let mapleader="," +"输入,n或者按F9时打开/关闭NERDTree +nnoremap n :NERDTreeToggle +nmap :NERDTreeToggle + +"calendar-vim +"hotkey cal,水平方向:caL +let g:calendar_diary = "E:/gavin/note" "设置日记的存储路径 +let g:calendar_monday = 1 "以星期一为开始 +let g:calendar_focus_today = 1 "光标在当天的日期上 +"let g:calendar_mark = 'left-fit' "可以让*和数字可靠近 +let g:calendar_mark = 'right' "上面设置后在昨天写日志,修改成right正常 +"let g:calendar_mruler = '一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月' " 中文,可自行修改 +"let g:calendar_wruler = '日 一 二 三 四 五 六' +"let g:calendar_navi_label = '往前,今日,往后' +let g:calendar_datetime = 'statusline' " can set 'title', 'statusline', '' for this option. + +"mark +"hotkey m -- mark +" mc -- clear mark +nmap mc MarkClear + +"syntastic +let g:syntastic_check_on_open=1 +"let g:syntastic_phpcs_conf='--tab-width=4 --standard=CodeIgniter' +"let makeprg='php -l -d error_reporting=E_ALL -d display_errors=1' + +" css3_mod +let g:css_default_sync=1 + +"""""""""""""""""""""""""""""""""""""""""""""""""""""" +"""""""""""""""""""""""""""""""""""""""""""""""""""""" +"""""""""""""""""""""""""""""""""""""""""""""""""""""" + diff --git a/20200811浼氳绾.md b/20200811浼氳绾.md new file mode 100644 index 0000000..81cec48 --- /dev/null +++ b/20200811浼氳绾.md @@ -0,0 +1,33 @@ + +鍏充簬澶╃考鐪嬪杩愮淮宸ヤ綔浼樺寲鐨勪細璁 + +涓鸿繘涓姝ョ悊椤哄ぉ缈肩湅瀹剁淮鎶ゆ祦绋嬶紝钀藉疄瑙e喅涓氬姟寮灞曡繃绋嬩腑纰板埌鐨勯棶棰橈紝2020骞8鏈11鏃ヤ笂鍗堬紝鐪佸叕鍙稿彫寮澶╃考鐪嬪杩愮淮宸ヤ綔鍗忚皟浼氾紝鐜嬫窇鏄ュ壇鎬荤粡鐞嗗嚭甯細璁苟鎻愬嚭鎸囩ず锛岀鍒涢儴鎬荤粡鐞嗘矆姣呯翰涓绘寔浼氳锛屼細璁富瑕佸氨璧勬簮鐢宠鍙婄綉淇″畨銆佹敮鎾戠淮鎶ゆ祦绋嬨丆T浜戣祫婧愪笁鏂归潰瀛樺湪鐨勯棶棰樺強浼樺寲鏂规鍋氫簡姹囨姤锛屼笌浼氶儴闂ㄨ璁轰簡瑙e喅鏂规鍜屽悗缁帹杩涜姹傘傜幇灏嗕細璁叧閿簨椤圭邯瑕佸涓嬶細 +涓銆侀拡瀵逛簯璧勬簮鐢宠涓瓨鍦ㄧ殑鎿嶄綔绯荤粺閮ㄧ讲杈冩參闂锛岃缃戝彂閮ㄧ壍澶存帹杩涢泦鎴愬叕鍙镐紭鍖栭儴缃叉晥鐜囷紝骞跺湪鍚庣画鎺㈢储閲囩敤鑷姩鍖栦粠杞欢浠撳簱鎷夊彇鎿嶄綔绯荤粺鐨勯儴缃叉墜娈点 +浜屻佷负鎻愬崌瀹夋壂闃舵涓殑浜哄伐娓楅忔晥鐜囷紝瀹夊叏绠$悊閮ㄦ彁鍑鸿惤瀹炶鍗曞紡浜哄伐娓楅忛渶姹傦紝SOC纭繚鍦24灏忔椂鍐呭畬鎴愪汉宸ユ笚閫忓伐浣溿 +涓夈佷細璁槑纭紝涓洪伩鍏嶉噸澶嶆壂鎻忓伐浣滐紝11涓竟缂樿妭鐐瑰钩鍙拌蒋浠跺悓涓鐗堟湰鍙仛涓娆℃壂鎻忥紝閫氳繃瀹夊叏鎵弿鍚庯紝鍏朵粬鑺傜偣鍚屼竴鐗堟湰瑙嗗悓閫氳繃锛岋紝鐮斿彂鍒嗗叕鍙告壙璇哄悓姝ヤ慨澶嶆墍鏈夎妭鐐逛腑鎵弿鍑虹幇鐨勯棶棰樸傚彟鐮斿彂鍒嗗叕鍙镐笌SOC鏄庣‘鎺ュ彛浜猴紝浠ラ偖浠舵柟寮忓悓姝ヨ蒋浠剁増鏈俊鎭 +鍥涖佷负缁熶竴缁存姢鍏ュ彛锛屼究浜庨棴鍏崇鐞嗭紝浼氳鏄庣‘锛屾妸澶╃考鐪嬪涓氬姟绾冲叆10000鍙峰彈鐞嗐傚湪褰撳墠骞冲彴鍜岃祫婧愰棶棰樺崰姣旇緝楂樺強璁惧閲忎笉澶х殑鎯呭喌涓嬶紝10000鍙烽澶勭悊鍚庯紝鐪佽繍缁村洟闃燂紙锛燂級绗竴鐣岄潰鎺ュ簲鎶ラ殰锛孮Q缇ょ瓑鍗虫椂閫氳宸ュ叿杈呭姪鎵嬫鏆傛椂淇濈暀銆傚钩绋宠繍琛屽苟涓婇噺鍚庯紝鍐嶈冭檻浼樺寲娴佺▼锛岀涓鎺ュ崟鍗曚綅涓嬫矇鍒板垎鍏徃銆傝10000鍙蜂笌浼佷俊閮ㄥ崗鍚岃惤鍦帮紝骞舵祴璇曠┛瓒婃祦绋嬨 +浜斻佷細璁璁轰簡CT浜戣祫婧愬瓨鍦ㄧ殑鐩戞帶銆佺鐞嗐佽祫婧愰殧绂诲強璧勬簮鍙戞斁鎵嬫涓嶈冻绛夐棶棰樸備細璁槑纭紝璇风綉鍙戦儴缁勭粐闆嗘垚鍏徃鐩稿叧棰嗗鍔犲己闆嗘垚鍏徃鍦ㄦ禉姹熺殑浜哄憳鎶曞叆锛屽苟鍗忓晢瀵圭瓥锛岄拡瀵规绫诲敖蹇彁鍑鸿В鍐虫柟妗堛傚悓鏃讹紝鐮斿彂鍒嗗叕鍙镐笌NOC寮灞曞弻鍚戠洃鎺э紝鐮斿彂鍒嗗叕鍙稿彲浠ユ妸楂樼瓑绾ф湇鍔$洃鎺у憡璀﹀鎺ユ櫤鑳界綉鍏虫淳鍗曘 + +鍑哄腑锛 +璁板綍锛 + + +涓烘帹杩 2018 骞寸綉缁滃畨鍏ㄩ噸鐐瑰伐浣滐紝2018 骞 3 鏈 19 鏃ュ湪鍏 +鍗 5020 浼氳瀹わ紝缃戠粶杩愯惀浜嬩笟閮ㄧ壍澶寸粍缁囦簡 2018 骞寸綉缁滃畨鍏 +閲嶇偣宸ヤ綔鍗忚皟浼氾紝鍙傚姞浼氳鐨勬湁甯傚満閮ㄣ佹斂浼佸鎴蜂簨涓氶儴銆佷紒 +涓氫俊鎭寲浜嬩笟閮ㄣ佸悇杩愯惀涓績銆佺渷浼犺緭灞銆佹禉姹熺渷鍏紬淇℃伅浜 +涓氭湁闄愬叕鍙搞佹禉姹熷叕浼楁暟鎹氫俊鏈夐檺鍏徃鐨勭綉缁滃畨鍏ㄨ矗浠讳汉銆 +浼氫笂缃戠粶杩愯惀浜嬩笟閮ㄥ璐簡 2018 骞村伐淇¢儴鍜岄泦鍥㈢殑鑰冩牳瑕佹眰銆 +涓庝細浠h〃灏 18 骞寸綉缁滃畨鍏ㄩ噸鐐瑰伐浣滆繘琛屼簡璁ㄨ锛屾槑纭簡鍚勭浉鍏 +鍗曚綅缃戠粶瀹夊叏鑱旂粶鍛樺悕鍗曪紝鍚屾椂瀵圭綉缁滃畨鍏ㄤ簨浠跺揩閫熷鑷垫祦绋 +浼樺寲杈炬垚涓鑷存剰瑙併傜幇灏嗕細璁唴瀹圭邯瑕佸涓嬶細 + +涓鸿繘涓姝ユ帹杩涘拰钀藉疄鍏徃鍚堣绠$悊瑕佹眰锛岄拡瀵圭洰鍓嶅瓨鍦ㄦ湭 +瀹屾垚鍚堝悓绛捐浣嗗疄闄呭凡鍙戠敓鐨勭粡娴庝笟鍔°佷笖涓氬姟閮ㄩ棬闇瑕佸彂璧 +鏀粯鎶ヨ处鐨勬儏鍐碉紝浼佷笟鍙戝睍锛堟硶寰嬶級閮ㄣ佸璁¢儴銆佽储鍔¢儴鍙婅储 +鍔″叡浜湇鍔′腑蹇冭繘琛屼簡涓撻璁ㄨ锛屽浠ヤ笅浜嬮」杩涜浜嗘槑纭細 + + + + + diff --git a/20210903work.md b/20210903work.md new file mode 100644 index 0000000..1ee722a --- /dev/null +++ b/20210903work.md @@ -0,0 +1,35 @@ + +# 淇濋殰閮 + +## 鏀拺&閲嶄繚 + +### 鏀拺 +- 浜戝鐩戞帶绾冲叆锛岀洃鎺ч」鍏ㄩ潰瑕嗙洊 +- 鏀拺鏂囨。锛屽挨鍏舵槸浜戝椤圭洰鏀拺鏂囨。闇涓板瘜锛孎AQ +- 浜戝10000鍙峰鎺ュ伐浣滄儏鍐佃窡杩 +- 浜哄憳鑳藉姏鎻愬崌鎸佺画鎺ㄨ繘 + +### 閲嶄繚 +- 缁熶竴鍏ュ彛 +- 閲嶄繚瀹夋帓 + - 鏄庣‘淇濋殰绛夌骇锛屼繚闅滆寖鐣 + - 涓绾э紝鍙敤鎬т繚闅滐紝灏忓瀷銆佸叧娉ㄥ害涓嶉珮銆佸奖鍝嶉潰涓嶅ぇ锛屽鏀眬钀ラ攢 + - 浜岀骇锛岃涓氫細璁瓑锛屾晠闅滃彲鑳介犳垚鏅氬鎴疯礋闈㈣瘎浠凤紝濡傛煇闃块噷閫犵墿鑺 + - 涓夌骇锛屾湁閲嶅ぇ褰卞搷鐨勫ぇ鍨嬩繚闅滐紝鏁呴殰鍙兘閫犳垚鏀垮簻閮ㄩ棬鐨勮礋闈㈣瘎浠凤紝鎴栬緝澶ц垎鎯呭帇鍔涳紝濡侴20锛屼簰鑱旂綉澶т細锛岄噾鐮 + - 淇濋殰鏂规锛屼簩绾у強浠ヤ笂闇鎻愪緵淇濋殰鏂规 + - 鍊肩彮瀹夋帓 + - 淇濋殰鍥㈤槦锛氱洃鎺с佺幇鍦恒佽繙绋嬨佽繍缁淬佺爺鍙 + - 鎶鏈柟妗堬紙濡傞渶锛屾瘮濡傜壒閫氱瓑鐗规畩闇姹傦級 + - 鐩戞帶 + - 杩愮淮&搴旀 + - 瀹夊叏 + - 淇濋殰鍒跺害 + - 鍊肩彮鍒跺害 + - 灏佺綉瑕佹眰 + - 澶栭儴瀵规帴锛堝浜戣祫婧愶級 + - 搴旀 + - 搴旀ラ妗 + - 搴旀ユ紨缁 + +### 涓婄嚎 + diff --git a/20240418.md b/20240418.md new file mode 100644 index 0000000..aeec2b6 --- /dev/null +++ b/20240418.md @@ -0,0 +1,6 @@ + +## 20240418 + +鎵鏈夊寘闇瑕佽В澶达紵涓嶅悓鎽勫儚澶达紵 + + diff --git a/5g.md b/5g.md new file mode 100644 index 0000000..04c0563 --- /dev/null +++ b/5g.md @@ -0,0 +1,27 @@ +# 5G + + +### questions +- CU/DU閮ㄧ讲鏂规锛 + + +### 鍔熻兘瀹炰綋 +鍦5G缃戠粶涓紝鎺ュ叆缃戜笉鍐嶆槸鐢盉BU銆丷RU銆佸ぉ绾胯繖浜涗笢瑗跨粍鎴愪簡銆傝屾槸琚噸鏋勪负浠ヤ笅3涓姛鑳藉疄浣擄細 +- CU锛圕entralized Unit锛岄泦涓崟鍏冿級 + CU锛氬師BBU鐨勯潪瀹炴椂閮ㄥ垎灏嗗垎鍓插嚭鏉ワ紝閲嶆柊瀹氫箟涓篊U锛岃礋璐e鐞嗛潪瀹炴椂鍗忚鍜屾湇鍔° +- DU锛圖istribute Unit锛屽垎甯冨崟鍏冿級 + DU锛欱BU鐨勫墿浣欏姛鑳介噸鏂板畾涔変负DU锛岃礋璐e鐞嗙墿鐞嗗眰鍗忚鍜屽疄鏃舵湇鍔° +- AAU锛圓ctive Antenna Unit锛屾湁婧愬ぉ绾垮崟鍏冿級 + AAU锛欱BU鐨勯儴鍒嗙墿鐞嗗眰澶勭悊鍔熻兘涓庡師RRU鍙婃棤婧愬ぉ绾垮悎骞朵负AAU銆 + +
![img](imgs/5g/5g1.jpg) +
![img](imgs/5g/5g2.jpg) +EPC锛堝氨鏄4G鏍稿績缃戯級琚垎涓篘ew Core锛5GC锛5G鏍稿績缃戯級鍜孧EC锛堢Щ鍔ㄧ綉缁滆竟鐣岃绠楀钩鍙帮級涓ら儴鍒嗐侻EC绉诲姩鍒板拰CU涓璧凤紝灏辨槸鎵璋撶殑鈥滀笅娌夆濓紙绂诲熀绔欐洿杩戯級銆 + + +### references +1. [5G鏍稿績缃慮(https://app.yinxiang.com/fx/a7afa44c-dfc6-4140-8a41-deefe2c6cb66) +1. [NFV鐨勪簲澶х煕鐩綸(https://app.yinxiang.com/fx/0b3167c1-d976-4c5b-a54f-b30a2fb6a3fe) +1. [E2E Network Slicing](https://app.yinxiang.com/fx/5b4b59cd-6b79-4b80-b6d3-26904270f58b) +1. []() + diff --git a/AOP.md b/AOP.md new file mode 100644 index 0000000..5b57c9d --- /dev/null +++ b/AOP.md @@ -0,0 +1,35 @@ + +# AOP & IOC +--- + +## :red_circle: AOP + +## :red_circle: IOC +IoC(Inversion of Control) +![4236553-c415d1c39ed74772.png](https://i.loli.net/2020/05/13/uDnFJUXYAlSogh4.png) +- DL 宸茬粡琚姏寮冿紝鍥犱负浠栭渶瑕佺敤鎴疯嚜宸卞幓鏄娇鐢 API 杩涜鏌ユ壘璧勬簮鍜岀粍瑁呭璞°傚嵆鏈変镜鍏ユс +- DI 鏄 Spring 浣跨敤鐨勬柟寮忥紝瀹瑰櫒璐熻矗缁勪欢鐨勮閰嶃 + +![u_4258379052,1368074021_fm_26_gp_0.png](https://i.loli.net/2020/05/13/kSFnAjGUgK2YeMZ.png) +![timg.jpg](https://i.loli.net/2020/05/13/SOxPgI3up25tbv8.jpg) + +**鐤戦棶锛** +- 閫氳繃xml閰嶇疆鎴栧鍣ㄦ柟寮忕敓鎴愬疄渚嬫浛浠h皟鐢ㄥ叧绯荤敓鎴愬疄渚嬶紝瑙h︽病閿欙紝鎬庝箞鍙弽杞紵A瑕佺敤鍒癇绫伙紝闇瑕佸疄渚嬪寲B锛孖OC鍒欐槸鎶婂疄渚嬪寲杩囩▼浜ょ粰瀹瑰櫒锛孉鍙浣跨敤锛屼笉绠″疄渚嬪寲杩囩▼銆 + +## :red_circle: 涓浜涙蹇 +### java 娉ㄨВ(Annotation) & python 瑁呴グ鍣(decorator) +python杩欓噷鐨勮楗板櫒鏄竴涓湁閫昏緫鐨勶紝鍙互鎵ц鐨勫嚱鏁帮紝鍙笉杩囧叾鍐欐硶鏈変簺鐗规畩瑕佹眰锛 +Java閲岄潰鐨凙nnotation鍙槸涓爣璁帮紝闇瑕佸叾浠栦唬鐮佹潵鈥滄牴鎹爣璁版墽琛屸溿 + +### POJO (Plain Ordinary Java Object) & java bean +POJO鏄竴涓畝鍗曠殑鏅氱殑Java瀵硅薄锛屽畠涓嶅寘鍚笟鍔¢昏緫鎴栨寔涔呴昏緫绛夛紝浣嗕笉鏄疛avaBean銆丒ntityBean绛夛紝涓嶅叿鏈変换浣曠壒娈婅鑹插拰涓嶇户鎵挎垨涓嶅疄鐜颁换浣曞叾瀹僇ava妗嗘灦鐨勭被鎴栨帴鍙c傚叿鏈変竴閮ㄥ垎getter/setter鏂规硶鐨勯偅绉嶇被灏卞彲浠ョО浣淧OJO銆 + + +## :red_circle: references +- [IOC姒傚康璇﹁В](https://www.jianshu.com/p/745a17f519a6) +- [IOC Spring鎻闃呰鎬荤粨](https://www.jianshu.com/p/39f15ced9a74) +- [浠涔堟槸闈㈠悜鍒囬潰缂栫▼AOP锛焆(https://www.zhihu.com/question/24863332) + + +-- 20200514 澶嶄範 + diff --git a/CorporateCulture.md b/CorporateCulture.md new file mode 100644 index 0000000..2dce828 --- /dev/null +++ b/CorporateCulture.md @@ -0,0 +1,9 @@ +# Corporate Culture Tesla + +1. Move fast +2. Do the impossbile +3. Constantly innovate +4. Reason from the "First principles" - 绗竴鎬у師鍒欙紝姝f湰娓呮簮 +5. think like owners +6. We are ALL IN + diff --git a/HW.md b/HW.md new file mode 100644 index 0000000..13790d5 --- /dev/null +++ b/HW.md @@ -0,0 +1,50 @@ + +# HW + +# 20210323 渚寒 +## 绯荤粺璇勪及闃舵 +- 浜掕仈缃 +- 鍐呯綉 + 涓嶈姹傛紡娲炲叏閮ㄤ慨澶 + 蹇熷彂鐜版敾鍑伙紝蹇熷缃紝鍗佷簲鍒嗛挓锛岄粍閲戞椂闂 +- 绀句細宸ョ▼璇勪及 + 鐗规畩鏃舵湡锛屽憳宸ョ綉缁滃畨鍏ㄦ剰璇 + 鐗规畩鎵嬫 + +## 鍒嗘瀽纭闃舵 +鍒嗘瀽鎶ュ憡锛屽瓧鍙峰瓧浣 + +绾㈤槦锛 +- 鏍稿績鏁版嵁锛屾湇鍔″櫒鏉冮檺锛岃繘鍏ュ唴缃 +- OA绯荤粺锛岄噸鐐归槻鑼 +- VPN **鎶ょ綉涓撶増VPN** +- 铚滅綈绯荤粺锛屾満鍣ㄥ鎶楁満鍣ㄤ腑杩愮敤锛屽浜虹殑鏀诲嚮鐨勬剰涔夐愭鍑忓皬锛岋紙鍘诲勾铚滅綈鑷韩琚敾鐮磋繘鍏ュ唴缃戯紝鏈哄櫒姣旇緝闅惧彂鐜拌湝缃愶級 +- 浜哄憳瀹夊叏鎰忚瘑 + +### 绾㈤槦璇勪及 +- day婕忔礊 +- 寮卞彛浠 +- SQL娉ㄥ叆 +- xss + +### 鍐呯綉锛屽畨鍏ㄨ澶囦骇鐢熷畨鍏ㄤ簨鏁 +- 搴旂敤鏈嶅姟 OA锛岄偖浠躲乂PN + +### 绀惧伐 + +### 閭欢绯荤粺 +- 鏈鏂扮増鏈 + +## 妗堜緥 +- 鍓嶆湡渚︽煡锛欴NS銆佸煙鍚嶃佽祫浜ф敹闆嗐佹晱鎰熶俊鎭 + 闃插畧锛 +- 鍐呴儴渚︽煡锛 + + +# 20210323 +regeorg +arp -a + +cobalStrike 妞嶅叆鍚庨棬 + + diff --git a/Kubenetes.assets/image-20200404094800622.png b/Kubenetes.assets/image-20200404094800622.png new file mode 100644 index 0000000..3685f26 Binary files /dev/null and b/Kubenetes.assets/image-20200404094800622.png differ diff --git a/Kubenetes.assets/image-20200406184656917-1626782168787.png b/Kubenetes.assets/image-20200406184656917-1626782168787.png new file mode 100644 index 0000000..6e43c8f Binary files /dev/null and b/Kubenetes.assets/image-20200406184656917-1626782168787.png differ diff --git a/Kubenetes.assets/image-20200406184656917.png b/Kubenetes.assets/image-20200406184656917.png new file mode 100644 index 0000000..6e43c8f Binary files /dev/null and b/Kubenetes.assets/image-20200406184656917.png differ diff --git a/Kubenetes.assets/image-20200406225334627.png b/Kubenetes.assets/image-20200406225334627.png new file mode 100644 index 0000000..f5054e9 Binary files /dev/null and b/Kubenetes.assets/image-20200406225334627.png differ diff --git a/Kubenetes.assets/image-20200406232838722.png b/Kubenetes.assets/image-20200406232838722.png new file mode 100644 index 0000000..e881210 Binary files /dev/null and b/Kubenetes.assets/image-20200406232838722.png differ diff --git a/Kubenetes.assets/image-20200407100850484.png b/Kubenetes.assets/image-20200407100850484.png new file mode 100644 index 0000000..e9bbfa5 Binary files /dev/null and b/Kubenetes.assets/image-20200407100850484.png differ diff --git a/Kubenetes.assets/image-20200407121501907-1626781151898.png b/Kubenetes.assets/image-20200407121501907-1626781151898.png new file mode 100644 index 0000000..ad774b7 Binary files /dev/null and b/Kubenetes.assets/image-20200407121501907-1626781151898.png differ diff --git a/Kubenetes.assets/image-20200407121501907.png b/Kubenetes.assets/image-20200407121501907.png new file mode 100644 index 0000000..ad774b7 Binary files /dev/null and b/Kubenetes.assets/image-20200407121501907.png differ diff --git a/Kubenetes.assets/image-20200408193950807.png b/Kubenetes.assets/image-20200408193950807.png new file mode 100644 index 0000000..ae4eed0 Binary files /dev/null and b/Kubenetes.assets/image-20200408193950807.png differ diff --git a/Kubenetes.assets/image-20200408194716912-1626783758946.png b/Kubenetes.assets/image-20200408194716912-1626783758946.png new file mode 100644 index 0000000..7462697 Binary files /dev/null and b/Kubenetes.assets/image-20200408194716912-1626783758946.png differ diff --git a/Kubenetes.assets/image-20200408194716912.png b/Kubenetes.assets/image-20200408194716912.png new file mode 100644 index 0000000..7462697 Binary files /dev/null and b/Kubenetes.assets/image-20200408194716912.png differ diff --git a/Kubenetes.assets/image-20200412111402706-1626782188724.png b/Kubenetes.assets/image-20200412111402706-1626782188724.png new file mode 100644 index 0000000..8e48fcd Binary files /dev/null and b/Kubenetes.assets/image-20200412111402706-1626782188724.png differ diff --git a/Kubenetes.assets/image-20200412111402706.png b/Kubenetes.assets/image-20200412111402706.png new file mode 100644 index 0000000..8e48fcd Binary files /dev/null and b/Kubenetes.assets/image-20200412111402706.png differ diff --git a/Kubenetes.assets/image-20200413174713773.png b/Kubenetes.assets/image-20200413174713773.png new file mode 100644 index 0000000..b1ee458 Binary files /dev/null and b/Kubenetes.assets/image-20200413174713773.png differ diff --git a/Kubenetes.assets/image-20200413214031331.png b/Kubenetes.assets/image-20200413214031331.png new file mode 100644 index 0000000..5b686af Binary files /dev/null and b/Kubenetes.assets/image-20200413214031331.png differ diff --git a/Kubenetes.assets/image-20200413215133559.png b/Kubenetes.assets/image-20200413215133559.png new file mode 100644 index 0000000..068c419 Binary files /dev/null and b/Kubenetes.assets/image-20200413215133559.png differ diff --git a/Kubenetes.assets/image-20200416140251491.png b/Kubenetes.assets/image-20200416140251491.png new file mode 100644 index 0000000..e091847 Binary files /dev/null and b/Kubenetes.assets/image-20200416140251491.png differ diff --git a/Kubenetes.assets/image-20200505183738289.png b/Kubenetes.assets/image-20200505183738289.png new file mode 100644 index 0000000..82a25e2 Binary files /dev/null and b/Kubenetes.assets/image-20200505183738289.png differ diff --git a/Kubenetes.assets/image-20200509121254425.png b/Kubenetes.assets/image-20200509121254425.png new file mode 100644 index 0000000..c035a2d Binary files /dev/null and b/Kubenetes.assets/image-20200509121254425.png differ diff --git a/Kubenetes.assets/image-20200509151424280.png b/Kubenetes.assets/image-20200509151424280.png new file mode 100644 index 0000000..2cd4f13 Binary files /dev/null and b/Kubenetes.assets/image-20200509151424280.png differ diff --git a/Kubenetes.assets/image-20200509152947714.png b/Kubenetes.assets/image-20200509152947714.png new file mode 100644 index 0000000..eed194c Binary files /dev/null and b/Kubenetes.assets/image-20200509152947714.png differ diff --git a/Kubenetes.assets/image-20200509153731363.png b/Kubenetes.assets/image-20200509153731363.png new file mode 100644 index 0000000..ab74566 Binary files /dev/null and b/Kubenetes.assets/image-20200509153731363.png differ diff --git a/Kubenetes.assets/image-20200509191917069.png b/Kubenetes.assets/image-20200509191917069.png new file mode 100644 index 0000000..13d0297 Binary files /dev/null and b/Kubenetes.assets/image-20200509191917069.png differ diff --git a/Kubenetes.assets/image-20200510103945494.png b/Kubenetes.assets/image-20200510103945494.png new file mode 100644 index 0000000..2f20dcf Binary files /dev/null and b/Kubenetes.assets/image-20200510103945494.png differ diff --git a/Kubenetes.assets/image-20200510113311209.png b/Kubenetes.assets/image-20200510113311209.png new file mode 100644 index 0000000..5d3f522 Binary files /dev/null and b/Kubenetes.assets/image-20200510113311209.png differ diff --git a/Kubenetes.assets/image-20200514095913741.png b/Kubenetes.assets/image-20200514095913741.png new file mode 100644 index 0000000..0dfc295 Binary files /dev/null and b/Kubenetes.assets/image-20200514095913741.png differ diff --git a/Kubenetes.assets/image-20200514194111567.png b/Kubenetes.assets/image-20200514194111567.png new file mode 100644 index 0000000..42ee2cb Binary files /dev/null and b/Kubenetes.assets/image-20200514194111567.png differ diff --git a/Kubenetes.assets/image-20200515002806726.png b/Kubenetes.assets/image-20200515002806726.png new file mode 100644 index 0000000..8e895ef Binary files /dev/null and b/Kubenetes.assets/image-20200515002806726.png differ diff --git a/Kubenetes.assets/image-20200516102419998.png b/Kubenetes.assets/image-20200516102419998.png new file mode 100644 index 0000000..64f24bd Binary files /dev/null and b/Kubenetes.assets/image-20200516102419998.png differ diff --git a/Kubenetes.assets/image-20200516112704764.png b/Kubenetes.assets/image-20200516112704764.png new file mode 100644 index 0000000..629b3bf Binary files /dev/null and b/Kubenetes.assets/image-20200516112704764.png differ diff --git a/Kubenetes.assets/image-20200518211037434.png b/Kubenetes.assets/image-20200518211037434.png new file mode 100644 index 0000000..f3634c0 Binary files /dev/null and b/Kubenetes.assets/image-20200518211037434.png differ diff --git a/Kubenetes.assets/image-20200519181209566.png b/Kubenetes.assets/image-20200519181209566.png new file mode 100644 index 0000000..1e8bd13 Binary files /dev/null and b/Kubenetes.assets/image-20200519181209566.png differ diff --git a/Kubenetes.assets/image-20200520102949189.png b/Kubenetes.assets/image-20200520102949189.png new file mode 100644 index 0000000..ed961a5 Binary files /dev/null and b/Kubenetes.assets/image-20200520102949189.png differ diff --git a/Kubenetes.assets/image-20200520103942580.png b/Kubenetes.assets/image-20200520103942580.png new file mode 100644 index 0000000..359168e Binary files /dev/null and b/Kubenetes.assets/image-20200520103942580.png differ diff --git a/Kubenetes.assets/image-20200520144548997.png b/Kubenetes.assets/image-20200520144548997.png new file mode 100644 index 0000000..30e97b7 Binary files /dev/null and b/Kubenetes.assets/image-20200520144548997.png differ diff --git a/Kubenetes.assets/image-20200520144959353.png b/Kubenetes.assets/image-20200520144959353.png new file mode 100644 index 0000000..15abb0b Binary files /dev/null and b/Kubenetes.assets/image-20200520144959353.png differ diff --git a/Kubenetes.assets/image-20200520154628679.png b/Kubenetes.assets/image-20200520154628679.png new file mode 100644 index 0000000..4ad2165 Binary files /dev/null and b/Kubenetes.assets/image-20200520154628679.png differ diff --git a/Kubenetes.assets/image-20200520162605102.png b/Kubenetes.assets/image-20200520162605102.png new file mode 100644 index 0000000..306ae7e Binary files /dev/null and b/Kubenetes.assets/image-20200520162605102.png differ diff --git a/Kubenetes.assets/image-20200520163253644.png b/Kubenetes.assets/image-20200520163253644.png new file mode 100644 index 0000000..cabcf1b Binary files /dev/null and b/Kubenetes.assets/image-20200520163253644.png differ diff --git a/Kubenetes.assets/image-20200520163552110.png b/Kubenetes.assets/image-20200520163552110.png new file mode 100644 index 0000000..c4a3dbb Binary files /dev/null and b/Kubenetes.assets/image-20200520163552110.png differ diff --git a/Kubenetes.assets/image-20200520163832827.png b/Kubenetes.assets/image-20200520163832827.png new file mode 100644 index 0000000..6650e48 Binary files /dev/null and b/Kubenetes.assets/image-20200520163832827.png differ diff --git a/Kubenetes.assets/image-20200524150339551.png b/Kubenetes.assets/image-20200524150339551.png new file mode 100644 index 0000000..d61e4f4 Binary files /dev/null and b/Kubenetes.assets/image-20200524150339551.png differ diff --git a/Kubenetes.assets/image-20200605021831545.png b/Kubenetes.assets/image-20200605021831545.png new file mode 100644 index 0000000..ff8a368 Binary files /dev/null and b/Kubenetes.assets/image-20200605021831545.png differ diff --git a/Kubenetes.assets/image-20200608155858271.png b/Kubenetes.assets/image-20200608155858271.png new file mode 100644 index 0000000..6587019 Binary files /dev/null and b/Kubenetes.assets/image-20200608155858271.png differ diff --git a/Kubenetes.assets/image-20200608163326496.png b/Kubenetes.assets/image-20200608163326496.png new file mode 100644 index 0000000..c51fd42 Binary files /dev/null and b/Kubenetes.assets/image-20200608163326496.png differ diff --git a/Kubenetes.assets/image-20200612005334159.png b/Kubenetes.assets/image-20200612005334159.png new file mode 100644 index 0000000..0958dac Binary files /dev/null and b/Kubenetes.assets/image-20200612005334159.png differ diff --git a/Kubenetes.assets/image-20200612005524778.png b/Kubenetes.assets/image-20200612005524778.png new file mode 100644 index 0000000..70c4658 Binary files /dev/null and b/Kubenetes.assets/image-20200612005524778.png differ diff --git a/Kubenetes.assets/image-20200612010223537.png b/Kubenetes.assets/image-20200612010223537.png new file mode 100644 index 0000000..9a8caf7 Binary files /dev/null and b/Kubenetes.assets/image-20200612010223537.png differ diff --git a/Kubenetes.assets/image-20200618213054113.png b/Kubenetes.assets/image-20200618213054113.png new file mode 100644 index 0000000..62126c7 Binary files /dev/null and b/Kubenetes.assets/image-20200618213054113.png differ diff --git a/Kubenetes.assets/image-20200618213149531.png b/Kubenetes.assets/image-20200618213149531.png new file mode 100644 index 0000000..1812587 Binary files /dev/null and b/Kubenetes.assets/image-20200618213149531.png differ diff --git a/Kubenetes.assets/image-20200620175731338.png b/Kubenetes.assets/image-20200620175731338.png new file mode 100644 index 0000000..4fa4d60 Binary files /dev/null and b/Kubenetes.assets/image-20200620175731338.png differ diff --git a/Kubenetes.assets/image-20200623092808049.png b/Kubenetes.assets/image-20200623092808049.png new file mode 100644 index 0000000..d46a873 Binary files /dev/null and b/Kubenetes.assets/image-20200623092808049.png differ diff --git a/Kubenetes.assets/image-20210609000002940.png b/Kubenetes.assets/image-20210609000002940.png new file mode 100644 index 0000000..cf86f3b Binary files /dev/null and b/Kubenetes.assets/image-20210609000002940.png differ diff --git a/Kubenetes.assets/image-20210617223823675-1626781695411.png b/Kubenetes.assets/image-20210617223823675-1626781695411.png new file mode 100644 index 0000000..aa43dd7 Binary files /dev/null and b/Kubenetes.assets/image-20210617223823675-1626781695411.png differ diff --git a/Kubenetes.assets/image-20210617223823675.png b/Kubenetes.assets/image-20210617223823675.png new file mode 100644 index 0000000..aa43dd7 Binary files /dev/null and b/Kubenetes.assets/image-20210617223823675.png differ diff --git a/Kubenetes.assets/image-20210617223923659.png b/Kubenetes.assets/image-20210617223923659.png new file mode 100644 index 0000000..cbc95ec Binary files /dev/null and b/Kubenetes.assets/image-20210617223923659.png differ diff --git a/Kubenetes.assets/image-20210617224457945.png b/Kubenetes.assets/image-20210617224457945.png new file mode 100644 index 0000000..4330a10 Binary files /dev/null and b/Kubenetes.assets/image-20210617224457945.png differ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..818433e --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Pasted image 20240416150433.png b/Pasted image 20240416150433.png new file mode 100644 index 0000000..d596d86 Binary files /dev/null and b/Pasted image 20240416150433.png differ diff --git a/Pasted image 20240416155739.png b/Pasted image 20240416155739.png new file mode 100644 index 0000000..78b3be0 Binary files /dev/null and b/Pasted image 20240416155739.png differ diff --git a/Pasted image 20240416163516.png b/Pasted image 20240416163516.png new file mode 100644 index 0000000..6624ffb Binary files /dev/null and b/Pasted image 20240416163516.png differ diff --git a/SLA/鑷姩鍖栬繍缁存湇鍔″唴瀹.docx b/SLA/鑷姩鍖栬繍缁存湇鍔″唴瀹.docx new file mode 100755 index 0000000..ee7d1c1 Binary files /dev/null and b/SLA/鑷姩鍖栬繍缁存湇鍔″唴瀹.docx differ diff --git a/SLA/鑷姩鍖栬繍缁存湇鍔$瓑绾у強鐩爣.docx b/SLA/鑷姩鍖栬繍缁存湇鍔$瓑绾у強鐩爣.docx new file mode 100755 index 0000000..76b2f95 Binary files /dev/null and b/SLA/鑷姩鍖栬繍缁存湇鍔$瓑绾у強鐩爣.docx differ diff --git a/aiops.md b/aiops.md new file mode 100644 index 0000000..cdd7271 --- /dev/null +++ b/aiops.md @@ -0,0 +1,8 @@ + +# 鑷姩鍖栬繍缁 & AIOps + + + +### reference +- [AIOps鏄浣曞湪鑵捐IEG浣撶郴鍖栨帹杩涘拰鏅強鐨勶紵](https://zhuanlan.zhihu.com/p/435229129) + diff --git a/backup.md b/backup.md new file mode 100644 index 0000000..331905d --- /dev/null +++ b/backup.md @@ -0,0 +1,6 @@ + +# backup + +mysql backup +- xtrabackup +- mysqldump diff --git a/branch_mode.md b/branch_mode.md new file mode 100644 index 0000000..59e97ce --- /dev/null +++ b/branch_mode.md @@ -0,0 +1,36 @@ + +# 寮鍙戞ā寮 + +甯歌鐨凣it鍒嗘敮妯″紡: +- TBD锛堜富骞插紑鍙戞ā寮忥級 +- Git-Flow妯″紡 +- Github-Flow妯″紡 +- Gitlab-Flow妯″紡 + +## TBD +涓轰簡淇濊瘉涓诲共浠g爜鐨勮川閲忥紝閬垮厤鍑虹幇宸ョ▼甯堝悎鍏ュ埌涓诲共鐨勪唬鐮乥reak鎺変富骞茬殑鎯呭喌锛孏oogle 閲囧彇浜嗕互涓嬪疄璺碉細 +- 浠g爜鍚堝叆浜嬩欢瑙﹀彂閫氳繃鎸佺画闆嗘垚锛岀‘淇濆悎鍏ュ埌涓诲共鐨勪唬鐮佺粡杩囧厖鍒嗕笖蹇呰娴嬭瘯锛 +- 閫氳繃 Bazel 瀹炵幇鐩稿叧浠g爜锛堟寚渚濊禆鍙樻洿浠g爜鐨勪唬鐮侊級鐨勭簿鍑嗘祴璇曪紱 +- **鑷冲皯 2 涓悎璧勬牸鐨 reviewer 锛堜唬鐮佽瘎瀹′汉锛夌殑 LGTM锛圠ook Good To Me锛夛紝鎵嶅厑璁镐唬鐮佸悎鍏ヤ富骞诧紱** + +鑵捐鏌 BG 鍦 2018 骞村紑濮嬬殑鈥930 鍙橀潻鈥濆悗锛屽湪鍚勮瘯鐐瑰洟闃熸帹鍔ㄤ富骞插紑鍙戯紙娉細骞舵湭鍏ㄥ叕鍙告櫘閬嶉噰鐢級锛屽叿浣撶殑涓炬帾鍖呮嫭锛 +- 浠ュ害閲忕壍寮曪細閫氳繃瀵圭壒鎬у垎鏀級鐨勭敓鍛芥湡鐩戞帶鍜岄璀︼紝瀹炵幇闈炰富骞插垎鏀殑鐢熷懡鏈熺缉鐭紝鍊掗煎紑鍙戝洟闃熼噰鐢ㄤ富骞插紑鍙戯紱 +- 鎶曞ぇ鍔涙皵缁熶竴 BG 鍐呯殑鎸佺画闆嗘垚宸ュ叿銆佸紑鍙戣嚜鍔ㄥ寲娴嬭瘯骞冲彴锛 +- 鍒跺畾浜 7 澶х紪绋嬭瑷鐨勭紪鐮佽鑼冿紝骞惰嚜鐮斾唬鐮侀潤鎬佹壂鎻忓伐鍏凤紱 +- 骞跺弬鑰 Google 鎺ㄨ浠g爜鍙鎬э紙Readability锛夈佸彲娴嬭瘯鎬э紙Testability锛夎璇佸埗搴︼紱 +- 寮哄姏鎺ㄨ CR 锛堜唬鐮佽瘎瀹★級鍒跺害锛岀‘淇濅唬鐮佺殑鍙鎬э紙鍛藉悕銆佷唬鐮侀鏍笺佽璁°佸鏉傚害锛夈 + +鏁堟灉锛 +- 璐ㄩ噺鎻愬崌锛氫唬鐮佽川閲忎粠鍙祴閲忕殑缁村害寰楀埌鏄庢樉鎻愬崌锛堜唬鐮佽鑼冪巼銆佸崟鍏冩祴璇曡鐩栫巼锛夛紱 +- 杩唬閫熷害鎻愬崌锛氳瘯鐐瑰洟闃熺殑杩唬鍛ㄦ湡浠 4 鍛ㄦ垨 2 鍛ㄦ彁鍗囪嚦 1 鍛紱 +- 浠g爜浠庘滅鏈夆濆彉鈥滃叕鏈夆濓細閫氳繃浠g爜璇勫鍒跺害锛屾彁楂樹簡浠g爜鍙鎬э紝浣夸唬鐮佷粠涓汉鎷ユ湁锛堝彧鏈夊啓浠g爜鐨勪汉鑳界湅鎳傦級锛屽彉鎴愬洟闃熸嫢鏈夛紙鏁翠釜鍥㈤槦閮借兘鐪嬫噦锛夛紱杩欎竴鐐瑰浜庝紒涓氶潪甯搁噸瑕侊紝鎺ユ墜杩囧埆浜轰唬鐮佺殑绋嬪簭浠兘鏈夋劅鍙楋紱 +- 浠g爜鐨勮嚜鍔ㄥ寲娴嬭瘯瑕嗙洊鐜囨彁鍗囨槑鏄撅紝涓烘湭鏉ョ殑閲嶆瀯鏋勭瓚浜嗕竴寮犲畨鍏ㄧ綉锛 + +鏈変簺涓皬浼佷笟鐨勬妧鏈喅绛栬呴潪甯歌鍙寔缁泦鎴 / 鎸佺画浜や粯鐨勭悊蹇碉紝浠庤屾洿甯屾湜閲囩敤涓诲共寮鍙戯紝浣嗗浜庝富骞插紑鍙戠殑缂虹偣锛堟垨璇村讥琛ョ己鐐圭殑鎴愭湰锛夊瓨鍦ㄩ【铏戙傚姝わ紝鎴戞湁濡備笅寤鸿锛 +- 鍩虹鏋舵瀯瑕佹眰锛氬彲浠ヨ冭檻閲囩敤寮婧愯蒋浠讹紝濡傛寔缁泦鎴愰噰鐢 Jenkins銆乀ravis CI銆丟itlab CI 绛夛紝閫氳繃绠鍗曢儴缃插彲浠ユ姇鍏ヤ娇鐢紱鍚屾椂閰嶅悎浠g爜闈欐佸垎鏋愬伐鍏凤紙濡 SonarQube銆丆heckStyle锛夛紝纭繚浠g爜鍩烘湰璐ㄩ噺杩囧叧锛 +- 鑷姩鍖栨祴璇曡姹傦細宸ュ叿涓婁笉瀛樺湪闅滅锛岀幇浠g紪绋嬭瑷锛堝 java銆乬o銆乧++锛夐兘鏈夊唴寤烘垨绗笁鏂圭殑鍗曞厓娴嬭瘯妗嗘灦锛涢毦鐐瑰彧鍦ㄤ簬鎴愬憳鐨勫紑鍙戜範鎯紝鍙互閫氳繃娴嬭瘯瑕嗙洊鐜囧伐鍏凤紝浠ュ閲忚鐩栫巼鎸囨爣淇濊瘉鏂板浠g爜閮芥湁瀹屽鐨勮嚜鍔ㄥ寲娴嬭瘯锛屼粠鑰岄愭鏀瑰彉鍥㈤槦鐨勭爺鍙戞枃鍖栵紱 +- 浠g爜璇勫瑕佹眰锛氬紑婧愮殑 Git 鏈嶅姟鍣紙濡 Gitlab锛夊熀鏈兘鏀寔 push hook锛岄厤鍚堝紑婧愮殑 Gerrit 绛 CR 宸ュ叿锛屽彲浠ュ疄鐜板湪浠g爜鎺ㄩ侊紙push锛夋垨 pull request锛堝悎鍏ヨ姹傦級鏃惰Е鍙 1 涓唬鐮佽瘎瀹¤姹傦紝瀹炵幇璇勫閫氳繃鍚庯紝浠g爜鎵嶆寮忓悎鍏ョ殑鍔熻兘锛涘墿涓嬬殑灏辨槸鐮斿彂鏂囧寲闂浜嗭紝闇瑕佸湪鍥㈤槦鍐呴儴鎺ㄨ浠g爜瑙勮寖銆佷唬鐮佸彲璇绘х瓑瀹e鍜屾暀鑲插伐浣滐紱 +- 鍙戝竷鏃剁殑鐗规у紑鍏筹細濡傛灉瑕佹眰涓嶉珮锛屽彲浠ラ氳繃浠g爜 hard code 涓涓父閲忎綔涓虹壒鎬у紑鍏筹紱濡傛灉瑕佹眰楂橈紝涔熸湁寮婧愮殑鐗规у紑鍏筹紙姣斿锛歶nleash銆乸iranha銆乫lipper锛夊伐鍏峰彲渚涢夋嫨銆傚弬鑰冧笂杩板缓璁紝骞跺厖鍒嗚璇嗗埌涓诲共寮鍙戠殑鎴愭湰鍜屽洶闅剧殑鎯呭喌涓嬶紝涓皬浼佷笟寮鍙戝洟闃熶篃骞堕潪涓嶅彲浠ヨ冭檻涓诲共寮鍙戠殑瀹炶返銆 + +## reference +- [Google 鍜岃吘璁负浠涔堥兘閲囩敤涓诲共寮鍙戞ā寮忥紵](https://36kr.com/p/1218375440667012) diff --git a/certificates.md b/certificates.md new file mode 100644 index 0000000..36d3f79 --- /dev/null +++ b/certificates.md @@ -0,0 +1,35 @@ +# 璁よ瘉鍩硅 + +璇佷功|鎻忚堪 +--|-- +TOGAF|TOGAF鏀寔寮鏀俱佹爣鍑嗙殑SOA鍙傝冩灦鏋勶紝鍚屾椂鏀寔鍏朵粬涓嶅悓鐨勬灦鏋勯鏍硷紝濡備紶缁熺殑闈㈠悜瀵硅薄銆丆S銆佹垨BS涓夊眰鏋舵瀯椋庢牸銆俆OGAF鐨勫厓妯″瀷宸茬粡鏀寔闈㈠悜鏈嶅姟鐨勫師鍒欙紝鍦ㄥ缓绔嬩笟鍔℃灦鏋勬椂锛屽彲浠庣洰鏍囬愭鍒嗚В涓哄姛鑳姐佹祦绋嬨佸強涓氬姟鏈嶅姟锛屼笟鍔℃湇鍔″皢閫氳繃淇℃伅绯荤粺鏈嶅姟鍙婂簲鐢ㄦ瀯浠舵潵瀹炵幇銆 +CISA|CISA(Certified Information Systems Auditor锛屼腑鏂囦负鍥介檯淇℃伅绯荤粺瀹¤甯)璁よ瘉鏄敱淇℃伅绯荤粺瀹¤涓庢帶鍒跺崗浼欼SACA(Information Systems Audit and Control Association)鍙戣捣鐨勶紝鏄俊鎭郴缁熷璁°佹帶鍒朵笌瀹夊叏绛変笓涓氶鍩熶腑鍙栧緱鎴愮哗鐨勮薄寰併 +CISSP| +CISP| +CGEIT| +COBIT5| +ITIL| +RHCA| + +--- + +鑻ユ鍙栧緱绾㈠附RHCA璁よ瘉锛屾偍蹇呴』閫氳繃浠ヤ笅鑰冭瘯涓殑浠绘剰5闂ㄨ冭瘯锛 + +鑰冭瘯浠g爜|璁よ瘉鍚嶇О +--|-- +EX210|绾㈠附 OpenStack 璁よ瘉绯荤粺绠$悊鍛樿冭瘯 +EX220|绾㈠附娣峰悎浜戠鐞嗕笓涓氭妧鑳借瘉涔﹁冭瘯 +EX236|绾㈠附娣峰悎浜戝瓨鍌ㄤ笓涓氭妧鑳借瘉涔﹁冭瘯 +EX248|绾㈠附璁よ瘉 JBoss 绠$悊鍛樿冭瘯 +EX280|绾㈠附骞冲彴鍗虫湇鍔′笓涓氭妧鑳借瘉涔﹁冭瘯 +EX318|绾㈠附璁よ瘉铏氭嫙鍖栫鐞嗗憳鑰冭瘯 +EX401|绾㈠附閮ㄧ讲鍜岀郴缁熺鐞嗕笓涓氭妧鑳借瘉涔﹁冭瘯 +EX413|绾㈠附鏈嶅姟鍣ㄥ浐鍖栦笓涓氭妧鑳借瘉涔﹁冭瘯 +EX436|绾㈠附闆嗙兢鍜屽瓨鍌ㄧ鐞嗕笓涓氭妧鑳借瘉涔﹁冭瘯 +EX442|绾㈠附鎬ц兘璋冧紭涓撲笟鎶鑳借瘉涔﹁冭瘯 + +--- + +璇佷功鍚嶇О|鍙栧緱鏃堕棿|鑰冭瘯鍦扮偣|鍩硅鏈烘瀯|璐圭敤 +--|--|--|--|-- +2019/12/25 | devops master | 涓婃捣 | 鑹惧▉鍩硅 | 12000 diff --git a/chrome_bookmarks_200318.tar.gz b/chrome_bookmarks_200318.tar.gz new file mode 100644 index 0000000..0d49818 Binary files /dev/null and b/chrome_bookmarks_200318.tar.gz differ diff --git a/chuangxin.md b/chuangxin.md new file mode 100644 index 0000000..85fdc03 --- /dev/null +++ b/chuangxin.md @@ -0,0 +1,83 @@ + +# 鍒涙柊鎴愭灉 +--- + +## 瀹炰範鍛樺伐璇鹃 + +### 浜戝師鐢燂紙瀹瑰櫒锛夊畨鍏ㄩ槻鎶 - 鐜嬪厓鏄 +- 鐜扮姸&鎰忎箟&鐩爣 + - 浜戝師鐢熺殑涓昏瀹夊叏闂 + - 浜嗚В鐩墠鐨勫仛娉曘佸伐鍏枫佷笉瓒 + - 鐩爣锛氭彁鍗囧鍣ㄥ畨鍏紝濡備綍鎶婂鍣ㄥ畨鍏ㄨ惤瀹炲埌瀹夊叏鍩虹嚎涓 +- 鏂瑰悜&鍐呭 + +- 鎬濊矾&鏂规硶&鍒涙柊鐐 + - 鑷姩鍖栬繍缁翠腑鎻愪緵瀹瑰櫒/浜戝師鐢熷畨鍏ㄦ鏌ユā鍧楋紝鑳藉鍒楀嚭瀹夊叏闅愭偅鍙婃暣鏀瑰缓璁 + - 鑷姩鍖栬繍缁翠腑鍙互鍕鹃変竴閿慨澶嶏紙闇瀹℃牳锛 + +- 浜у嚭&搴旂敤 + - 浜戝師鐢/瀹瑰櫒瀹夊叏鏍囧噯瑙勮寖锛屼互鍙婂湪杩愮淮瀹炶返涓殑鎵ц鎯呭喌锛堝弬鑰冭祫鏂欓渶鍒楀叆鏂囩尞锛 + - 宸ュ叿锛氬鍣ㄥ畨鍏ㄧ殑鑷姩妫鏌ワ紝瀹瑰櫒瀹夊叏鍩虹嚎鑷姩鎵ц锛堣繍缁村紑鍙戞彁渚涙祴璇曟ā鍧楋紝骞跺仛寮鍙戞寚瀵硷級 + +### AIOPS鏁呴殰鑷剤 - 闂帀濠 +- 鐜扮姸&鎰忎箟&鐩爣 + - devops鐜扮姸锛屽埌AIOps婕旇繘璺緞锛岃揪鍒癆IOps鐨勫伐浣 + - 鐩爣锛欰IOps杩欎釜璇鹃姣旇緝澶э紝缁撳悎devops涓繍缁磋鑹诧紝浠庣幇瀹炲伐浣滃叆鎵嬶紝鍩轰簬鍒ゆ柇鍜岀畻娉曞仛鑷剤銆 + +- 鏂瑰悜&鍐呭 + +- 鎬濊矾&鏂规硶&鍒涙柊鐐 + - 鐢熶骇涓ぇ閲忕殑鍛婅鐨勫叡鎬ф彁鐐 + - 闃堝艰瀹 - 绛栫暐 - 鎵ц + - *鍩轰簬瀛︿範绠楁硶 - 鐢熸垚绛栫暐 - 鎵ц锛岃繖涓姹傛瘮杈冮珮锛屼笖涓嶄竴瀹氬彲闈狅紝鍙互灏濊瘯* + +- 浜у嚭&搴旂敤 + - AIOps浠峰艰銆佹爣鍑嗚鑼冿紝甯姪鎻愬崌杩愮淮姘村钩 + - 鑷姩鍖栬繍缁翠腑鑷剤娴佺▼鍥哄寲锛屾柟渚挎墿灞曪紝鏍囧噯鍖栵紱鍦ㄥ姞鐩戞帶涓兘澶熷叧鑱旇嚜鎰堝姩浣 + - 瑙﹀彂 - 绛栫暐 - 鍔ㄤ綔鐨勫垎绂 + +--- + +### 鎬讳綋瑕佹眰 +#### 鎻愮翰 +- 鐜扮姸 +- 鎰忎箟&鐩爣 +- 鏂瑰悜&鍐呭 +- 鎬濊矾&鏂规硶&鍒涙柊鐐 +- 浜у嚭&搴旂敤 + +#### 瑕佹眰 +- 鍖哄埆浜庡鏍$爺绌 + - 缁撳悎閮ㄩ棬宸ヤ綔 + - 鏈変竴瀹氬垱鏂版 + - 闈笉蹇呭お骞 + - 鑳藉瑙e喅瀹為檯闂锛屾湁瀹炶返锛屾湁娣卞害 + +--- +## 灏忓井鍒涙柊 +娴佺▼鏀硅繘锛屽伐浣滄柟娉曟敼杩涖 +蹇熼儴缃诧紵鏁堢巼鎻愬崌銆 +SDN缃戠粶鎶鏈浉鍏炽 +鏃ュ織绯荤粺锛 +缃戠粶鍙戠幇鍜屾嫇鎵戠鐞嗭紵璋冪敤閾惧彂鐜帮紵 + +鏀拺锛 +- 閫氳繃娴佺▼鏀归狅紝宸ヤ綔娉曪紝鎻愬崌鏁堢巼銆 +- 閫氳繃灏忓伐鍏/寰垱鏂扮殑搴旂敤锛岃揪鍒版晥鐜囨敼鍠 + + +鎴愭灉鍚嶇О|鎵灞為鍩焲瀹屾垚鏃堕棿|鐮斿彂鍗曚綅 +--|--|--|-- +瀹夊叏鍩虹嚎涓閿嚜鍔ㄥ寲淇宸ュ叿|缃戜俊瀹夊叏||杩愮淮鏀拺涓績 +portal椤甸潰闃茬鏀瑰伐鍏穦缃戜俊瀹夊叏||杩愮淮鏀拺涓績 +WiFi骞冲彴鍙孌C涓氬姟涓閿縼绉诲鐏緗杩愯惀缁存姢(O鍩)||杩愮淮鏀拺涓績 +瑙嗚仈缃戣竟缂樿妭鐐瑰鍣ㄥ寲鑷姩鍖栭儴缃插伐鍏穦杩愯惀缁存姢(O鍩)||杩愮淮鏀拺涓績 +杩愮淮浠诲姟鎵归噺鑷姩鍖栦笅鍙戞墽琛屽伐鍏穦杩愯惀缁存姢(O鍩)||杩愮淮鏀拺涓績 +璧勬簮閲囬泦鐩戞帶绯荤粺|杩愯惀缁存姢(O鍩)||杩愮淮鏀拺涓績 +杞‖浠惰嚜鍔ㄥ寲宸℃宸ュ叿|杩愯惀缁存姢(O鍩)||杩愮淮鏀拺涓績 +浜戝師鐢燂紙瀹瑰櫒锛夊畨鍏ㄩ槻鎶缃戜俊瀹夊叏||杩愮淮鏀拺涓績 +AIOPS鏁呴殰鑷剤|杩愮淮||杩愮淮鏀拺涓績 +*鍩轰簬浜戝師鐢熺殑涓诲姩闃叉姢鑳藉姏鎻愬崌瀹炶返*|杩愮淮||杩愮淮鏀拺涓績 +*鍩轰簬娣锋矊鎶鏈殑楂樻晥搴旀ユ紨缁冧綋绯诲缓璁*|杩愮淮||杩愮淮鏀拺涓績 + + diff --git a/cloudbroadband.md b/cloudbroadband.md new file mode 100644 index 0000000..6ab3a40 --- /dev/null +++ b/cloudbroadband.md @@ -0,0 +1,16 @@ + +# 浜戝甯﹀垎浜 + +## + +p2 - 浜戝甯︽晠闅滀覆鍏 + +浜旇绱: + +cvlan锛宲vlan锛宲ort => 闅ч亾 +40GB + +澶у睆锛岀洃鎺х郴缁 + + + diff --git a/cloudnative.md b/cloudnative.md new file mode 100644 index 0000000..83316cf --- /dev/null +++ b/cloudnative.md @@ -0,0 +1,62 @@ + +# 浜戝師鐢 + +鐩墠褰㈡垚浜戝師鐢熺悊瑙d笂鐨勬渶澶у叡璇嗘鎷负**4涓牳蹇冭鐐**锛欴evOps+鎸佺画浜や粯+寰湇鍔+瀹瑰櫒锛屽嵆鍩轰簬杩欌4浠跺鈥濇瀯寤虹殑搴旂敤鎴戜滑鏆備笖璁や负灏辨槸浜戝師鐢熷簲鐢ㄤ簡銆傚悓鏃跺彲浠ヤ韩鍙楀埌浜戠鏋佷负涓板瘜鐨凱aaS缁勪欢锛屽涓氬姟鍚庣画浣跨敤鍒扮殑鏁版嵁搴撱佺紦瀛樸佷腑闂翠欢銆佸瓨鍌ㄣ丆DN绛夌瓑锛屽苟涓斿叿澶囨棤缂濆湪涓嶅悓浜戝巶鍟嗛棿閫忔槑杩佺Щ鐨勮兘鍔涖 + +寰湇鍔℃灦鏋勪负鍩虹锛屾瀯寤虹殑闆嗕唬鐮佺鐞嗐佹湇鍔″紑鍙戙佽繍缁村彂甯冦佹湇鍔¤繍钀ヤ负涓浣撶殑涓绔欏紡寮鍙戣繍钀ュ钩鍙,瀹炵幇浜嗙湡姝f剰涔変笂鐨凞evOps鏈嶅姟闂幆锛岃疮绌夸簡鏈嶅姟浜や粯鐨凜I銆丆D銆丆O鐜妭锛屽緱鐩婁簬鍏徃鍐呭閮ㄦ洿澶氫紭绉缁勪欢鐨勯泦鎴愶紝鍖呮嫭TKE銆佽摑鐩俱丵CI銆丒nvoy绛夈 + +## **浜戝師鐢熻繍缁磋浆鍨嬫濈淮** +杩欏嚑骞磋繍缁寸晫鍚埌鏈澶氱殑鍑犲彞璇濓細鈥滀簯璁$畻浼氭窐姹版帀杩愮淮锛佹暣涓繍缁磋涓氬彲鑳借骞叉帀锛佸啀涓嶈浆鎹㈣繍缁村氨瑕佷涪楗鈥濓紝璇稿姝ょ被銆傞偅鐪熺浉鍒板簳鏄粈涔堬紵琛屼笟鏈変竴涓叡璇嗭紝鍗宠繍缁村伐浣滄湰韬氦浠樼殑鏄竴绉嶆湇鍔★紝涓嬮潰涓句竴涓彲鑳戒笉澶伆褰撶殑渚嬪瓙锛屾垨鑰呭彲浠ュ府鍔╁ぇ瀹舵壘鍒扮瓟妗堛 +浜戣绠楁椂浠eソ姣旂粍瑁呬竴杈嗘苯杞︼紝鏍规嵁瀹㈡埛鐨勯渶瑕侊紝閫氳繃PaaS鑳藉姏閫夋嫨鍖归厤鐨勫紩鎿庛佽溅杞佺鍚堝櫒銆 鎮灦銆佽溅鎺у埗绯荤粺绛夎繘琛屾嫾瑁呫傚鎴蜂笉鐢ㄥ叧蹇冩苯杞﹀悇鍏冮儴浠剁殑瀹炵幇鍘熺悊锛屾渶缁堣幏寰楁槸涓杈嗘弧瓒宠嚜韬姹傜殑姹借溅銆傚厜鏈変簡姹借溅鏄帺涓嶈浆鐨勩傝繕闇瑕佹湁淇矾銆佸姞娌圭珯銆佷氦閫氭帶鍒剁瓑鏈嶅姟浣撶郴锛岃繍缁村氨鏄壙鎷呰繖涓鑹层 +鐩告瘮浼犵粺杩愮淮锛岀‘瀹炴槸灏戜簡鑷繁閲囪喘鍏冪粍涓庣粍瑁呯殑宸ヤ綔銆傚埌浜嗗悗浜戣绠楁椂浠o紙浜戝師鐢燂級锛屽嚭鐜颁簡涓涓狣evOps鍏徃锛屽紩鍏ユ柊鎶鏈笌鐞嗗康锛屽0绉板凡缁忓皢淇矾銆佸姞娌圭珯銆佷氦閫氭帶鍒剁瓑鐜妭閮芥墦閫氫簡锛屽舰鎴愪簡涓浣撳寲鏈嶅姟鑳藉姏锛屽苟閭璇疯繍缁村摜涓璧峰姞鍏ュ垱涓氥傚湪杩欎釜闃舵锛岃繍缁村摜鍑哄幓鍗曞共锛屽ぇ姒傜巼浼氱炕杞︺ +浣嗗姞鍏 DevOps 鍏徃锛岃繍缁寸殑浠峰煎埌搴曡繕鏈変粈涔堝憿锛熷洜姝わ紝鍗囩骇涓庤浆鍨嬫槸蹇呯劧鐨勶紝渚嬪灏嗘櫘閫氬浗閬撳崌绾ф垚楂橀熷叕璺紱瀹炵幇瀹㈡埛鍦ㄩ珮閫熻矾涓婁笉鍋滆溅鎹㈣疆鑳庯紱璐磋繎骞剁悊瑙e鎴凤紝瑙勫垝琛岀▼涓墍闇鐨勬湇鍔℃潵鎻愬崌瀹㈡埛浣撻獙锛涢氳繃鎻愬崌鏅鸿兘鍖栨按骞筹紝杩炴帴浜ら氱鍒讹紝缂╃煭鑸▼锛岄伩寮鎹熷潖璺绛夌瓑銆傜浉淇″ぇ瀹跺績涓凡缁忔湁鑷繁绛旀浜嗐傚洖鍒板師鐐圭殑鐏甸瓊鎷烽棶锛氣滀簯鍘熺敓鑳屾櫙涓嬶紝杩愮淮涓嶅仛杞瀷浼氫笉浼氭锛熲濓紝鈥滆繍缁磋濡備綍蹇熻嚜鏁戝拰鍗囩骇锛熲濄 + +## **鏂囧寲灞傞潰** +浠ヤ笅鍑犵偣鏄垜浠腑蹇冨唴閮ㄥ疄琛岀殑鍑犱釜鏈哄埗锛屼緵浣滃弬鑰冿紝鍥犱笉鍚屽洟闃熼棿瀛樺湪涓瀹氬樊寮傦紝姝ゅ涓嶅睍寮璇存槑銆 +寮鍙戜笌杩愮淮鎴愮珛FT铏氭嫙鍥㈤槦锛屽疄鐜**缁勭粐铻嶅悎**锛 +寮鍙戞垨杩愮淮渚х殑渚嬩細銆佹妧鏈垎浜佷簨浠跺鐩橈紝FT鎴愬憳鍏ㄧ▼鍙備笌锛 +椤圭洰绔嬮」鏃讹紝杩愮淮鎺ュ彛浜洪渶瑕佸仛鈥**宸︾Щ**鈥濓紝鍗虫彁鍓嶅弬涓庢妧鏈灦鏋勮璁猴紝鏈夊姪浜庤繍缁寸殑闂鎻愬墠鍦ㄦ柟妗堣璁烘垨寮鍙戦樁娈垫彁鍓嶆毚闇诧紝鏈夋晥鍋氬ソ闃茶寖涓庤閬匡紱 +寤虹珛鏀堕泦鍚勬柟鍙嶉闂涓庡缓璁殑鏈哄埗涓庢笭閬擄紝鏈夋晥灏嗗ソ鐨勬兂娉曞奖鍝嶈嚦骞冲彴涓嬩釜鐗堟湰鐨勮凯浠d腑锛屽疄鐜版寔缁敼杩涗笌浼樺寲銆 + +## **浜戝師鐢熻繍缁寸洰鏍** +鍦ㄤ簯鍘熺敓鑳屾櫙涓嬶紝鎴戜滑瀵硅繍缁翠綋绯昏繘琛屼簡鍗囩骇锛屽湪鍘熸湁鍩虹杩愮淮鑳藉姏涔嬩笂纭畾浜嗕互涓嬪嚑涓洰鏍囷細 +鍏峰鏈嶅姟鍏ㄩ摼璺川閲忕洃鎺ц鐩栵紝娑电洊鏁版嵁鍩熶笌涓氬姟鍩 +鍏峰涓瀹氭櫤鑳藉寲鐨勮祫婧愬姩鎬佽皟搴︺佷几缂╂満鍒 +鍏峰涓瀹氱殑鏁呴殰棰勮銆佹牴鍥犲垎鏋愩侀棶棰樺畾浣嶈兘鍔 +鏈嶅姟鍏峰鍦ㄤ氦浠樹笉鍚岄樁娈碉紙娴嬭瘯銆侀鍙戝竷銆佽繍钀ワ級鎶靛尽寮傚父鐨勮兘鍔 +鍏峰璧勬簮楂樻晥浜や粯鐨勬祦绋嬫満鍒朵笌蹇熶笂绾跨殑鑳藉姏 +鍏峰澶氫簯鐨勮祫婧愮紪鎺掍笌绠$悊鐨勮兘鍔 +鍏峰涓氬姟蹇熶笂浜戠殑鏈哄埗锛岀‘淇濆垏鎹㈣繃绋嬬殑楂樺彲鐢ㄦ + +纭畾浜嗚繍缁磋兘鍔涘崌绾ф寚瀵兼濇兂锛**鍩轰簬杩愮淮缂栨帓鐨勪簯鍘熺敓瀹炰緥鍖**銆傚箍涔夎岃█锛岃繍缁寸殑鏈川灏辨槸澶氫釜杩愯惀浜嬩欢鐨勬湁鏈轰覆鑱旓紝鏉ヨ揪鍒拌川閲忋佹晥鐜囥佹垚鏈佸畨鍏ㄥ缁存敹鐩婏紝鑰岀紪鎺掓槸瀹炵幇鏈夋満涓茶仈鐨勬湁鏁堟墜娈碉紝闄や簡鍙互娌夋穩杩愮淮缁忛獙澶栵紝杩樺彲浠ユ湁鏁堝疄鐜板叡浜 + +CG: 涓瀹氳鐗㈣**鍙矇娣銆佸彲绉疮銆佸彲鍏变韩**锛屽舰鎴愯凯浠d笂鍗囥 + +## **CI/CD** + +## **骞冲彴鑳藉姏** + +**浜戠涓鍒囩殕鏈夋搷浣** +- 浜戣祫婧愮紪鎺掞紝缂栨帓瀵硅薄鏄悇绫讳簯璧勬簮锛屽寘鎷叕鏈変簯銆佺鏈変簯绛夛紝閲囩敤terraform鏉ュ疄鐜板浜戝熀纭璁炬柦鐨勭紪鎺掞紝鍙互瑕嗙洊鑵捐浜戙侀樋閲屼簯銆丄WS銆佺鏈変簯绛夌瓑銆 +- kubernetes缂栨帓锛岀紪鎺掑璞℃槸k8s闆嗙兢璧勬簮锛岄噰鐢℉elm/YAML杩涜缂栨帓銆 +- 浣滀笟缂栨帓锛岀紪鎺掑璞′富瑕佹槸涓绘満鑺傜偣锛屽搴旂殑鎿嶄綔浠诲姟缂栨帓锛岃皟鐢ㄧ幇鏈夌殑钃濋哺job浣滀笟骞冲彴銆 +馃悑[钃濋哺浣滀笟骞冲彴](https://bk.tencent.com/docs/document/5.1/7/3787) + +杩愮淮缂栨帓涓夊眰涔嬮棿濡備綍涓茶仈锛熸垜浠噰鐢ㄤ簡寮婧愮殑钃濋哺鏍囧噯杩愮淮浣滀负缂栨帓寮曟搸锛屽皢涓嶅悓鐨勪笁灞傜紪鎺掍覆鑱旓紝鎵撶牬浠庡墠璺ㄤ簯銆佽法骞冲彴鍚勭鍓茶鐨勬搷浣滅晫闄愶紝鎻愬崌杩愮淮鏁堢巼锛屼竴鍒囩殕缂栨帓锛屽苟鑳藉皢缂栨帓浠诲姟娌夋穩涓鸿兘鍔涙ā鏉夸紶鎵夸氦鎺ャ + +渚嬪涓婂浘鐨勫満鏅紝鎴戜滑闇瑕佹墿瀹逛竴涓幇缃戠殑TKE涓氬姟闆嗙兢锛屼粠鍩虹璁炬柦灞傜殑璧勬簮閲囦拱锛屽埌瀹瑰櫒鏈嶅姟鍒濆鍖栭儴缃诧紝鍜屼竴浜涢泦缇ょ壒鎬т綔涓氭搷浣滅瓑鍧囦竴绔欏紡杩愮淮缂栨帓瀹屾垚锛屾搷浣滄椂闀夸粠4灏忔椂浼樺寲鍒30鍒嗛挓鍐咃紝鑰屼笖闆嗙兢鍐嶆鎵╁鍙渶绠鍗曚慨鏀瑰嚑涓紪鎺掑弬鏁版墽琛岋紝閬垮厤浜嗙箒鐞愰噸澶嶇殑鎿嶄綔銆傚湪鐜勫浘骞冲彴鑳藉姏涓皢閫氳繃鑷姪寮鍙戝彲缂栨帓鐨勫師瀛愶紙鍖呮嫭鎿嶄綔銆佹帴鍙c佺畻娉曠瓑锛夛紝涓鍒囨搷浣滅殕缂栨帓銆 + + +## **浜戝師鐢熺洃鎺** + +## **浜戝師鐢熶笟鍔″叏閾捐矾璺熻釜锛堣缂樺叧绯婚摼锛** + +## **娣锋矊宸ョ▼** +Adrian Cockcroft缁欏嚭浜嗗彟涓涓畾涔夊垯鏄細娣锋矊宸ョ▼鏄竴绉嶇‘淇濆け璐ユ墍甯︽潵鐨勫奖鍝嶈兘澶熻鍑忓皯鐨勫疄楠屻 + +杩欓噷鎴戜滑TKE闆嗙兢涓殑鏈嶅姟璁捐浜咰PU璐熻浇娉ㄥ叆婕斾範锛屽惎鍔ㄥ疄楠屽悗锛孋PU鎸夐鏈熸彁鍗囷紝褰揅PU鎸佺画楂樿礋杞芥椂锛屾湇鍔℃甯镐笖瑙﹀彂鑷姩鎵╁锛屾棤璇锋眰瓒呮椂鐢ㄦ埛鏃犳劅鐭ワ紝绗﹀悎棰勬湡锛屽姞娣变簡鍥㈤槦瀵圭郴缁熷彲闈犳х殑鐞嗚В鍜岃鐭ャ + +## **浼樺娍** + +## reference +- [浜戝師鐢熻儗鏅笅鐨勮繍缁翠环鍊兼濊冧笌瀹炶返](https://cloud.tencent.com/developer/article/1753976) diff --git a/cmder.md b/cmder.md new file mode 100644 index 0000000..937aa4d --- /dev/null +++ b/cmder.md @@ -0,0 +1,21 @@ + +# cmder + +### 淇敼鎻愮ず绗 +C:\cmder\vendor\clink.lua + +``` +-- CG +local cmder_prompt = "\x1b[1;32;40m{cwd}{git}{hg}{svn}>" +clink.prompt.value = string.gsub(cmder_prompt, "{cwd}", cwd) +``` +### 淇敼aliases +C:\cmder\config\user_aliases.cmd + +``` +e.=explorer . + +history=tail -n 200 "%CMDER_ROOT%\config\.history" +ll=ls -al --show-control-chars --color $* +enw=d: && cd d:\wisim\wisim.qt4 +``` diff --git a/compile.md b/compile.md new file mode 100644 index 0000000..d683e2a --- /dev/null +++ b/compile.md @@ -0,0 +1,13 @@ + +# c + +Makefile.am +autoscan + mv configure.scan configure.ac + +autoreconf + +---- +qmake project +qmake +make diff --git a/config_k8s.md b/config_k8s.md new file mode 100644 index 0000000..e2a0861 --- /dev/null +++ b/config_k8s.md @@ -0,0 +1,221 @@ + +# K8S yaml鏂囦欢璇﹁В + +## K8S 鍒涘缓璧勬簮鐨勬柟寮 + +K8S鏈変袱绉嶅垱寤鸿祫婧愮殑鏂瑰紡锛歬ubectl 鍛戒护鍜 yaml 閰嶇疆鏂囦欢銆 + +kubectl鍛戒护琛岋細鏈涓虹畝鍗曪紝涓鏉″懡浠ゅ氨OK. + +yaml閰嶇疆鏂囦欢锛氭彁渚涗簡涓绉嶈浣犵煡鍏剁劧鏇寸煡鍏舵墍浠ョ劧鐨勬柟寮忋備紭鍔垮涓嬶細 + +- 瀹屾暣鎬э細閰嶇疆鏂囦欢鎻忚堪浜嗕竴涓祫婧愮殑瀹屾暣鐘舵侊紝鍙互寰堟竻妤氬湴鐭ラ亾涓涓祫婧愮殑鍒涘缓鑳屽悗绌剁珶鍋氫簡鍝簺浜嬶紱 +- 鐏垫椿鎬э細閰嶇疆鏂囦欢鍙互鍒涘缓姣斿懡浠よ鏇村鏉傜殑缁撴瀯锛 +- 鍙淮鎶ゆэ細閰嶇疆鏂囦欢鎻愪緵浜嗗垱寤鸿祫婧愬璞$殑妯℃澘锛岃兘澶熼噸澶嶄娇鐢紱 +- 鍙墿灞曟э細閫傚悎璺ㄧ幆澧冦佽妯″寲鐨勯儴缃层 + +## yaml 鏄粈涔堬紵 + +yaml 鏄竴绉嶇敤鏉ュ啓閰嶇疆鏂囦欢鐨勮瑷锛屾病閿欙紝瀹冩槸涓闂ㄨ瑷銆傚鏋滀綘鐢ㄨ繃 json锛岄偅涔堝瀹冨氨涓嶄細闄岀敓锛寉aml 鍙堣绉颁负鏄 json 鐨勮秴闆嗭紝浣跨敤璧锋潵姣 json 鏇存柟渚裤 +缁撴瀯涓婂畠鏈変袱绉嶅彲閫夌殑绫诲瀷锛歀ists 鍜 Maps銆侺ist 鐢 -锛堢牬鎶樺彿锛 鏉ュ畾涔夋瘡涓椤癸紝Map 鍒欐槸涓涓 key:value 鐨勯敭鍊煎鏉ヨ〃绀恒 +YAML璇硶瑙勫垯锛 + +澶у皬鍐欐晱鎰 +浣跨敤缂╄繘琛ㄧず灞傜骇鍏崇郴 +缂╄繘鏃朵笉鍏佽浣跨敤Tal閿紝鍙厑璁镐娇鐢ㄧ┖鏍 +缂╄繘鐨勭┖鏍兼暟鐩笉閲嶈锛屽彧瑕佺浉鍚屽眰绾х殑鍏冪礌宸︿晶瀵归綈鍗冲彲 +"#"琛ㄧず娉ㄩ噴锛屼粠杩欎釜瀛楃涓鐩村埌琛屽熬锛岄兘浼氳瑙f瀽鍣ㄥ拷鐣ャ +"---"" 涓哄彲閫夌殑鍒嗛殧绗︺ + +鍦↘ubernetes涓紝鍙渶瑕佺煡閬撲袱绉嶇粨鏋勭被鍨嬪嵆鍙細 +- Lists +- Maps + +### kubernetes yaml 鏂囦欢妯℃澘锛 + +yaml鏍煎紡鐨刾od瀹氫箟鏂囦欢瀹屾暣鍐呭锛 + +``` +apiVersion: v1 #蹇呴夛紝鐗堟湰鍙凤紝渚嬪v1 +kind: Pod #蹇呴夛紝Pod +metadata: #蹇呴夛紝鍏冩暟鎹 + name: string #蹇呴夛紝Pod鍚嶇О + namespace: string #蹇呴夛紝Pod鎵灞炵殑鍛藉悕绌洪棿 + labels: #鑷畾涔夋爣绛 + - name: string #鑷畾涔夋爣绛惧悕瀛 + annotations: #鑷畾涔夋敞閲婂垪琛 + - name: string +spec: #蹇呴夛紝Pod涓鍣ㄧ殑璇︾粏瀹氫箟 + containers: #蹇呴夛紝Pod涓鍣ㄥ垪琛 + - name: string #蹇呴夛紝瀹瑰櫒鍚嶇О + image: string #蹇呴夛紝瀹瑰櫒鐨勯暅鍍忓悕绉 + imagePullPolicy: [Always | Never | IfNotPresent] #鑾峰彇闀滃儚鐨勭瓥鐣 Alawys琛ㄧず涓嬭浇闀滃儚 IfnotPresent琛ㄧず浼樺厛浣跨敤鏈湴闀滃儚锛屽惁鍒欎笅杞介暅鍍忥紝Nerver琛ㄧず浠呬娇鐢ㄦ湰鍦伴暅鍍 + command: [string] #瀹瑰櫒鐨勫惎鍔ㄥ懡浠ゅ垪琛紝濡備笉鎸囧畾锛屼娇鐢ㄦ墦鍖呮椂浣跨敤鐨勫惎鍔ㄥ懡浠 + args: [string] #瀹瑰櫒鐨勫惎鍔ㄥ懡浠ゅ弬鏁板垪琛 + workingDir: string #瀹瑰櫒鐨勫伐浣滅洰褰 + volumeMounts: #鎸傝浇鍒板鍣ㄥ唴閮ㄧ殑瀛樺偍鍗烽厤缃 + - name: string #寮曠敤pod瀹氫箟鐨勫叡浜瓨鍌ㄥ嵎鐨勫悕绉帮紝闇鐢╲olumes[]閮ㄥ垎瀹氫箟鐨勭殑鍗峰悕 + mountPath: string #瀛樺偍鍗峰湪瀹瑰櫒鍐卪ount鐨勭粷瀵硅矾寰勶紝搴斿皯浜512瀛楃 + readOnly: boolean #鏄惁涓哄彧璇绘ā寮 + ports: #闇瑕佹毚闇茬殑绔彛搴撳彿鍒楄〃 + - name: string #绔彛鍙峰悕绉 + containerPort: int #瀹瑰櫒闇瑕佺洃鍚殑绔彛鍙 + hostPort: int #瀹瑰櫒鎵鍦ㄤ富鏈洪渶瑕佺洃鍚殑绔彛鍙凤紝榛樿涓嶤ontainer鐩稿悓 + protocol: string #绔彛鍗忚锛屾敮鎸乀CP鍜孶DP锛岄粯璁CP + env: #瀹瑰櫒杩愯鍓嶉渶璁剧疆鐨勭幆澧冨彉閲忓垪琛 + - name: string #鐜鍙橀噺鍚嶇О + value: string #鐜鍙橀噺鐨勫 + resources: #璧勬簮闄愬埗鍜岃姹傜殑璁剧疆 + limits: #璧勬簮闄愬埗鐨勮缃 + cpu: string #Cpu鐨勯檺鍒讹紝鍗曚綅涓篶ore鏁帮紝灏嗙敤浜巇ocker run --cpu-shares鍙傛暟 + memory: string #鍐呭瓨闄愬埗锛屽崟浣嶅彲浠ヤ负Mib/Gib锛屽皢鐢ㄤ簬docker run --memory鍙傛暟 + requests: #璧勬簮璇锋眰鐨勮缃 + cpu: string #Cpu璇锋眰锛屽鍣ㄥ惎鍔ㄧ殑鍒濆鍙敤鏁伴噺 + memory: string #鍐呭瓨娓呮锛屽鍣ㄥ惎鍔ㄧ殑鍒濆鍙敤鏁伴噺 + livenessProbe: #瀵筆od鍐呬釜瀹瑰櫒鍋ュ悍妫鏌ョ殑璁剧疆锛屽綋鎺㈡祴鏃犲搷搴斿嚑娆″悗灏嗚嚜鍔ㄩ噸鍚瀹瑰櫒锛屾鏌ユ柟娉曟湁exec銆乭ttpGet鍜宼cpSocket锛屽涓涓鍣ㄥ彧闇璁剧疆鍏朵腑涓绉嶆柟娉曞嵆鍙 + exec: #瀵筆od瀹瑰櫒鍐呮鏌ユ柟寮忚缃负exec鏂瑰紡 + command: [string] #exec鏂瑰紡闇瑕佸埗瀹氱殑鍛戒护鎴栬剼鏈 + httpGet: #瀵筆od鍐呬釜瀹瑰櫒鍋ュ悍妫鏌ユ柟娉曡缃负HttpGet锛岄渶瑕佸埗瀹歅ath銆乸ort + path: string + port: number + host: string + scheme: string + HttpHeaders: + - name: string + value: string + tcpSocket: #瀵筆od鍐呬釜瀹瑰櫒鍋ュ悍妫鏌ユ柟寮忚缃负tcpSocket鏂瑰紡 + port: number + initialDelaySeconds: 0 #瀹瑰櫒鍚姩瀹屾垚鍚庨娆℃帰娴嬬殑鏃堕棿锛屽崟浣嶄负绉 + timeoutSeconds: 0 #瀵瑰鍣ㄥ仴搴锋鏌ユ帰娴嬬瓑寰呭搷搴旂殑瓒呮椂鏃堕棿锛屽崟浣嶇锛岄粯璁1绉 + periodSeconds: 0 #瀵瑰鍣ㄧ洃鎺ф鏌ョ殑瀹氭湡鎺㈡祴鏃堕棿璁剧疆锛屽崟浣嶇锛岄粯璁10绉掍竴娆 + successThreshold: 0 + failureThreshold: 0 + securityContext: + privileged:false + restartPolicy: [Always | Never | OnFailure]#Pod鐨勯噸鍚瓥鐣ワ紝Always琛ㄧず涓鏃︿笉绠′互浣曠鏂瑰紡缁堟杩愯锛宬ubelet閮藉皢閲嶅惎锛孫nFailure琛ㄧず鍙湁Pod浠ラ潪0閫鍑虹爜閫鍑烘墠閲嶅惎锛孨erver琛ㄧず涓嶅啀閲嶅惎璇od + nodeSelector: obeject #璁剧疆NodeSelector琛ㄧず灏嗚Pod璋冨害鍒板寘鍚繖涓猯abel鐨刵ode涓婏紝浠ey锛歷alue鐨勬牸寮忔寚瀹 + imagePullSecrets: #Pull闀滃儚鏃朵娇鐢ㄧ殑secret鍚嶇О锛屼互key锛歴ecretkey鏍煎紡鎸囧畾 + - name: string + hostNetwork:false #鏄惁浣跨敤涓绘満缃戠粶妯″紡锛岄粯璁や负false锛屽鏋滆缃负true锛岃〃绀轰娇鐢ㄥ涓绘満缃戠粶 + volumes: #鍦ㄨpod涓婂畾涔夊叡浜瓨鍌ㄥ嵎鍒楄〃 + - name: string #鍏变韩瀛樺偍鍗峰悕绉 锛坴olumes绫诲瀷鏈夊緢澶氱锛 + emptyDir: {} #绫诲瀷涓篹mtyDir鐨勫瓨鍌ㄥ嵎锛屼笌Pod鍚岀敓鍛藉懆鏈熺殑涓涓复鏃剁洰褰曘備负绌哄 + hostPath: string #绫诲瀷涓篽ostPath鐨勫瓨鍌ㄥ嵎锛岃〃绀烘寕杞絇od鎵鍦ㄥ涓绘満鐨勭洰褰 + path: string #Pod鎵鍦ㄥ涓绘満鐨勭洰褰曪紝灏嗚鐢ㄤ簬鍚屾湡涓璵ount鐨勭洰褰 + secret: #绫诲瀷涓簊ecret鐨勫瓨鍌ㄥ嵎锛屾寕杞介泦缇や笌瀹氫箟鐨剆ecre瀵硅薄鍒板鍣ㄥ唴閮 + scretname: string + items: + - key: string + path: string + configMap: #绫诲瀷涓篶onfigMap鐨勫瓨鍌ㄥ嵎锛屾寕杞介瀹氫箟鐨刢onfigMap瀵硅薄鍒板鍣ㄥ唴閮 + name: string + items: + - key: string +``` + +### 瀹炰緥鏂囦欢 + +``` +apiVersion: extensions/v1beta1 #鎺ュ彛鐗堟湰 +kind: Deployment #鎺ュ彛绫诲瀷 +metadata: + name: ptengine-demo #Deployment鍚嶇О + namespace: ptengine-prd #namespace 鍚嶇О + labels: + app: ptengine-demo #鏍囩 +spec: + replicas: 3 + strategy: + rollingUpdate: ##鐢变簬replicas涓3,鍒欐暣涓崌绾,pod涓暟鍦2-4涓箣闂 + maxSurge: 1 #婊氬姩鍗囩骇鏃朵細鍏堝惎鍔1涓猵od + maxUnavailable: 1 #婊氬姩鍗囩骇鏃跺厑璁哥殑鏈澶navailable鐨刾od涓暟 + template: + metadata: + labels: + app: ptengine-demo #妯℃澘鍚嶇О蹇呭~ + sepc: #瀹氫箟瀹瑰櫒妯℃澘锛岃妯℃澘鍙互鍖呭惈澶氫釜瀹瑰櫒 + containers: + - name: ptengine-demo #闀滃儚鍚嶇О + image: reg.pt1.com/ptengine-prd/ptengine-demo:0.0.1-SNAPSHOT #闀滃儚鍦板潃 + CMD: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ] #鍚姩CMD + args: #鍚姩鍙傛暟 + - '-storage.local.retention=$(STORAGE_RETENTION)' + - '-web.external-url=$(EXTERNAL_URL)' + + imagePullPolicy: IfNotPresent #濡傛灉涓嶅瓨鍦ㄥ垯鎷夊彇 + livenessProbe: #琛ㄧずcontainer鏄惁澶勪簬live鐘舵併傚鏋淟ivenessProbe澶辫触锛孡ivenessProbe灏嗕細閫氱煡kubelet瀵瑰簲鐨刢ontainer涓嶅仴搴蜂簡銆傞殢鍚巏ubelet灏唊ill鎺塩ontainer锛屽苟鏍规嵁RestarPolicy杩涜杩涗竴姝ョ殑鎿嶄綔銆傞粯璁ゆ儏鍐典笅LivenessProbe鍦ㄧ涓娆℃娴嬩箣鍓嶅垵濮嬪寲鍊间负Success锛屽鏋渃ontainer娌℃湁鎻愪緵LivenessProbe锛屽垯涔熻涓烘槸Success锛 + httpGet: + path: /health #濡傛灉娌℃湁蹇冭烦妫娴嬫帴鍙e氨涓/ + port: 8080 + scheme: HTTP + initialDelaySeconds: 60 ##鍚姩鍚庡欢鏃跺涔呭紑濮嬭繍琛屾娴 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 5 + readinessProbe: + readinessProbe: + httpGet: + path: /health #濡傛灉娌℃湁鍋ュ悍妫娴嬫帴鍙e氨涓/ + port: 8080 + scheme: HTTP + initialDelaySeconds: 30 ##鍚姩鍚庡欢鏃跺涔呭紑濮嬭繍琛屾娴 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 5 + resources: ##CPU鍐呭瓨闄愬埗 + requests: + cpu: 2 + memory: 2048Mi + limits: + cpu: 2 + memory: 2048Mi + env: ##閫氳繃鐜鍙橀噺鐨勬柟寮忥紝鐩存帴浼犻抪od=鑷畾涔塋inux OS鐜鍙橀噺 + - name: LOCAL_KEY #鏈湴Key + value: value + - name: CONFIG_MAP_KEY #local绛栫暐鍙娇鐢╟onfigMap鐨勯厤缃甂ey锛 + valueFrom: + configMapKeyRef: + name: special-config #configmap涓壘鍒皀ame涓簊pecial-config + key: special.type #鎵惧埌name涓簊pecial-config閲宒ata涓嬬殑key + ports: + - name: http + containerPort: 8080 #瀵箂ervice鏆撮湶绔彛 + volumeMounts: #鎸傝浇volumes涓畾涔夌殑纾佺洏 + - name: log-cache + mount: /tmp/log + - name: sdb #鏅氱敤娉曪紝璇ュ嵎璺熼殢瀹瑰櫒閿姣侊紝鎸傝浇涓涓洰褰 + mountPath: /data/media + - name: nfs-client-root #鐩存帴鎸傝浇纭洏鏂规硶锛屽鎸傝浇涓嬮潰鐨刵fs鐩綍鍒/mnt/nfs + mountPath: /mnt/nfs + - name: example-volume-config #楂樼骇鐢ㄦ硶绗1绉嶏紝灏咰onfigMap鐨刲og-script,backup-script鍒嗗埆鎸傝浇鍒/etc/config鐩綍涓嬬殑涓涓浉瀵硅矾寰刾ath/to/...涓嬶紝濡傛灉瀛樺湪鍚屽悕鏂囦欢锛岀洿鎺ヨ鐩栥 + mountPath: /etc/config + - name: rbd-pvc #楂樼骇鐢ㄦ硶绗2涓紝鎸傝浇PVC(PresistentVolumeClaim) + +#浣跨敤volume灏咰onfigMap浣滀负鏂囦欢鎴栫洰褰曠洿鎺ユ寕杞斤紝鍏朵腑姣忎竴涓猭ey-value閿煎閮戒細鐢熸垚涓涓枃浠讹紝key涓烘枃浠跺悕锛寁alue涓哄唴瀹癸紝 + volumes: # 瀹氫箟纾佺洏缁欎笂闈olumeMounts鎸傝浇 + - name: log-cache + emptyDir: {} + - name: sdb #鎸傝浇瀹夸富鏈轰笂闈㈢殑鐩綍 + hostPath: + path: /any/path/it/will/be/replaced + - name: example-volume-config # 渚汣onfigMap鏂囦欢鍐呭鍒版寚瀹氳矾寰勪娇鐢 + configMap: + name: example-volume-config #ConfigMap涓悕绉 + items: + - key: log-script #ConfigMap涓殑Key + path: path/to/log-script #鎸囧畾鐩綍涓嬬殑涓涓浉瀵硅矾寰刾ath/to/log-script + - key: backup-script #ConfigMap涓殑Key + path: path/to/backup-script #鎸囧畾鐩綍涓嬬殑涓涓浉瀵硅矾寰刾ath/to/backup-script + - name: nfs-client-root #渚涙寕杞絅FS瀛樺偍绫诲瀷 + nfs: + server: 10.42.0.55 #NFS鏈嶅姟鍣ㄥ湴鍧 + path: /opt/public #showmount -e 鐪嬩竴涓嬭矾寰 + - name: rbd-pvc #鎸傝浇PVC纾佺洏 + persistentVolumeClaim: + claimName: rbd-pvc1 #鎸傝浇宸茬粡鐢宠鐨刾vc纾佺洏 +``` + +## 鍙傝冩枃妗 +- [Kubernetes 绗旇 05 yaml 閰嶇疆鏂囦欢璇﹁В](https://www.cnblogs.com/bakari/p/10509484.html) +- [璇﹁ВKubernetes Deployment鐨勬弿杩版枃浠跺強鐩稿叧閰嶇疆](https://my.oschina.net/gibsonxue/blog/1840887) + diff --git a/content.md b/content.md new file mode 100644 index 0000000..d3be25b --- /dev/null +++ b/content.md @@ -0,0 +1,60 @@ + +# 鍐呭 + +- [5G](5g.md) +- [AOP & IOC](AOP.md) +- [Tesla Corporate Culture](CorporateCulture.md) +- [鎶ょ綉琛屽姩](HW.md) +- [DevOps](README.md) +- [backup](backup.md) +- [寮鍙戞ā寮廬(branch_mode.md) +- [璁よ瘉鍩硅](certificates.md) +- [浜戝甯﹀垎浜玗(cloudbroadband.md) +- [浜戝師鐢焆(cloudnative.md) +- [PMP鐞嗗康](pmpcore.md) +- [cmder](cmder.md) +- [缂栬瘧](compile.md) +- [K8S yaml鏂囦欢璇﹁В](config_k8s.md) +- [鏁版嵁搴揮(database.md) +- [DBA](dba.md) +- [绗竴绡囷細K8S涓夌閮ㄧ讲绛栫暐](deployment.md) +- [绗簩绡囷細K8S鍩轰簬ingress-nginx瀹炵幇鐏板害鍙戝竷](deployment.md) +- [姝g‘鐞嗚ВDevOps寮鍙戣繍缁翠竴浣撳寲](devops.md) +- [devops master certificate](devopscertificate.md) +- [devops master certificate](devopsmaster璇佷功.md) +- [devops master summary](devopssummary.md) +- [devops娴嬭瘯](devopstest.md) +- [DevOps/CD/CI棰樼洰](devopstest_v2.md) +- [瀹圭伨](disaster_recovery.md) +- [瀵逛紶缁熷簲鐢ㄨ繘琛屽鍣ㄥ寲鏀归燷(dock_trans.md) +- [docker](docker.md) +- [淇℃伅瀹夊叏鏍″洯鎷涜仒](ip_safe.md) +- [鐜嬬櫥寮宸ヤ綔浜ゆ帴](jiaojie.md) +- [Kubernetes浠嬬粛](k8slearning.md) +- [kubectl鍩烘湰浣跨敤](kubectl.md) +- [鏈〉鍒椾妇浜嗗父鐢ㄧ殑 鈥渒ubectl鈥 鍛戒护鍜屾爣蹇梋(kubectlcmd.md) +- [Kubernetes](kubernetes.md) +- [缂栫▼鎬濊僝(language.md) +- [lean / 绮剧泭](lean.md) +- [mall-swarm瀹瑰櫒鍖栧疄璺礭(mall_swarm_practic.md) +- [This is an tag](mdlab.md) +- [鐩戞帶鎶鏈痌(monitor.md) +- [娑堟伅绯荤粺](mq.md) +- [杩愮淮鐭ヨ瘑浣撶郴](opsknowledge.md) +- [鑷姩鍖栬繍缁村钩鍙癩(platform.md) +- [淇℃伅瀹夊叏浣撶郴](security.md) +- [涓婄嚎瑙勮寖](shangxian.md) +- [SLA (Service-Level Agreement) 鏈嶅姟绛夌骇鍗忚](sla.md) +- [google SRE](sre.md) +- [闃茬鏀筣(tamper_proof.md) +- [tools](tools.md) +- [绮剧泭 & TPS](tps.md) +- [浜戝師鐢熺幆澧冧笅瀹夊叏杩愮淮鍒嗕韩](training.md) +- [涓彴-鑷姩鍖栧贰妫](xunjian.md) +- [绠$悊](guanli.md) +- [鍒涙柊璇鹃](chuangxin.md) +- [鍒嗗竷寮忔灦鏋刔(fengbushi.md) +- [AIOps](aiops.md) + +2018-11-1 + diff --git a/curlweb.md b/curlweb.md new file mode 100644 index 0000000..b62fbfc --- /dev/null +++ b/curlweb.md @@ -0,0 +1,5 @@ + + +for ((i=1; i<=1000; i++)) do curl -klvg "http://180.101.49.12:443"; sleep 0.1; done; +for ((i=1; ; i++)) { curl -klvg "http://180.101.49.12:443"; sleep 0.1; } + diff --git a/database.md b/database.md new file mode 100755 index 0000000..1c1d2f7 --- /dev/null +++ b/database.md @@ -0,0 +1,76 @@ +# 鏁版嵁搴 + +``` +KISS - Keep It Simple & Stupid锛 +``` + +鏁版嵁琚揩閫熷埗閫犲拰娑堣垂锛屾暟鎹湅涓婂幓鏇村姞鏃犵З搴忥紝鎴栧彨闈炵粨鏋勫寲锛屾嵁璇磋秴杩80%锛屼笖鎸佺画鍔犻熷鍔狅紝浜庢槸鏂扮殑闈炲叧绯诲瀷DB/noSQL蹇熷礇璧 + + +#### :question: +- 绫诲瀷 +- 鐗圭偣 +- 閫夊瀷 + + +#### 鏁版嵁搴撶被鍨 +``` +- Relational DBMS + - oracle,mysql,postgreSQL,hive +- Key-value stores + - redis,memcached +- Document stores/document-oriented database +- Graph DBMS + - neo4j,Microsoft Azure Cosmos DB +- Time Series DBMS + - InfluxDB,Kdb+,Prometheus,Graphite,RRDtool,OpenTSDB,Druid +- Object oriented DBMS +- RDF stores +- Search engines + - Elasticsearch,Splunk +- Wide column stores + - Cassandra,hbase +- Multivalue DBMS +- Native XML DBMS +- Event Stores +- Content stores +- Navigational DBMS +``` + +#### Document stores database +also called document-oriented database systems, are characterized by their schema-free organization of data. +Records do not need to have a uniform structure, i.e. different records may have different columns. +The types of the values a鈧?a鈧?of individual columns can be different for each record. +Columns can have more than one value (arrays). +Records can have a nested structure. +Document stores often use internal notations, which can be processed directly in applications, mostly JSON. +JSON documents of course can also be stored as pure text in key-value stores or relational database systems. +That would, however, require client-side processing of the structures, which has the disadvantage that the features offered by document stores (such as secondary indexes) are not available. +
瀛樺偍鏂囨。鏁版嵁搴擄紝涔熷彨闈㈠悜鏂囨。鏁版嵁搴擄紝涓昏鐗圭偣鏄潪缁撴瀯鍖栥佹暟鎹殑鑷敱缁勭粐 +绾綍鍙互闈炵粨鏋勫寲锛屾瘮濡備笉鍚岀邯褰曚腑鐨勫彲浠ユ湁涓嶅悓鐨勫垪锛屼笉鍚屽垪鐨勬暟鎹被鍨嬩篃鍙互涓嶅悓锛屽垪鐨勬暟鎹彲浠ユ槸澶氫釜鍊硷紝姣斿涓涓猘rray锛岃褰曡繕鍙互鏄祵濂楃粨鏋勩 +姣斿鏂逛究鐩存帴瀛樺偍JSON鏁版嵁锛宬ey-value鏁版嵁搴撲篃鍙互瀛樺偍JSON鏁版嵁锛屼絾瀹㈡埛闇瑕佽嚜宸卞鐞嗘暟鎹粨鏋勶紝杩欐牱灏卞鏄撳け鍘籎SON鏁版嵁缁勭粐鐨勪紭鐐癸紝姣斿绗簩涓储寮 + +#### kafka & redis + +## 娑堟伅绯荤粺 +:question: +- 寮傛 +- 瑙h +- 椤哄簭 + +kafka閫氳繃zookeeper鏉ュ瓨鍌ㄩ泦缇ょ殑meta淇℃伅 + +[Redis鍝ㄥ叺妯″紡锛坰entinel锛夊涔犳荤粨鍙婇儴缃茶褰曪紙涓讳粠澶嶅埗銆佽鍐欏垎绂汇佷富浠庡垏鎹級](https://www.cnblogs.com/kevingrace/p/9004460.html) + + + +![db trend](imgs/db/dbtrend.png) +![db trend 24 months](imgs/db/dbtrend24m.png) + + + +#### references +1. [db ranking](https://db-engines.com/en/ranking) +1. [influxDB vs. openTSDB](http://blog.fatedier.com/2016/07/06/test-influxdb-and-opentsdb/) +1. [openTSDB](http://blog.fatedier.com/2016/07/04/research-of-time-series-database-opentsdb/) +1. [鎭掍赴閾惰鈥斺斿ぇ鏁版嵁瀹炴椂娴佸鐞嗗钩鍙癩(http://www.sohu.com/a/148106853_400678) diff --git a/dba.md b/dba.md new file mode 100644 index 0000000..200686a --- /dev/null +++ b/dba.md @@ -0,0 +1,21 @@ + +# DBA + +- 缁撳 + +- 鏁版嵁搴撴ц兘 + - 澶ц妯℃暟鎹紝鍒嗚〃/鍒嗗簱銆侀泦缇 + +- 鏁版嵁搴撴晠闅滄帓鏌 + - 澶囦唤銆佸鐏俱佹紨缁 + +- 鏁版嵁瀹夊叏 + - 鏁版嵁瀹屾暣鎬 + - 瀹夊叏婕忔礊 + +- 鏁版嵁搴撶洃鎺 + +- 鍗囩骇/鍥炴粴 + +- 鏁版嵁搴撹璁/鏋舵瀯鐨勫缓璁佷紭鍖 + diff --git a/dbmiddleware.md b/dbmiddleware.md new file mode 100644 index 0000000..6595346 --- /dev/null +++ b/dbmiddleware.md @@ -0,0 +1,34 @@ +## 鏁版嵁搴撲腑闂翠欢 + +:question: +- 璇诲啓鍒嗙锛&鏁堢巼 +- 鍒嗗簱鍒嗚〃锛屽垏鍒嗚兘鍔 +- HA鑳藉姏 +- 骞跺彂鎬 +- 绋冲畾鎬 +- 鍙淮鎶ゆ +- 绀惧尯娲昏穬搴︼紝寮婧愭寔缁淮鎶 + +* [myCat note](mycat.md) + +Mycat涓庝互涓婁腑闂翠欢鐨勫姣斿涓嬭〃鎵绀恒 +瀵规瘮椤圭洰|[mycat](https://github.com/MyCATApache/Mycat-doc)|Mango|Cobar|Heisenberg|[Atlas](https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md)|Amoeba + +| mycat | cobar | Atlas | TDDL | heisenberg | Oceanus | vitess | OneProxy | +| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | +| 鍏徃 | 闃块噷 | | 闃块噷 | 鐧惧害 | 360 | | | +| 鏁版嵁鍒囩墖 | 鏀寔 | 鏀寔 | 鏀寔 | 鏀寔 | 鏀寔 | 鏀寔 | | +| 璇诲啓鍒嗙 | 鏀寔 | 鏀寔 | 鏀寔 | 鏀寔 | 鏀寔 | 鏀寔 | | +| 瀹曟満鑷姩鍒囨崲 | 鏀寔 | 涓嶆敮鎸 | 鏀寔 | 涓嶆敮鎸 | 鍗婃敮鎸侊紝褰卞搷鍐 | 涓嶆敮鎸 | | +| MySQL鍗忚 | 鍓嶅悗绔敮鎸 | JDBC | 鍓嶇鏀寔 | 鍓嶅悗绔敮鎸 | 鍓嶅悗绔敮鎸 | JDBC | | +| 鏀寔鐨勬暟鎹簱 | MySQL銆丱racle銆丮ongoDB銆丳ostgreSQL | MySQL | MySQL | MySQL | MySQL | MySQL銆丮ongoDB | | +| 绀惧尯娲昏穬搴 | 楂 | 娲昏穬 | 鍋滄粸 | 浣 | 涓瓑 | 鍋滄粸 | | +| 鏂囨。璧勬枡 | 鏋佷赴瀵 | 杈冮綈鍏 | 杈冮綈鍏 | 缂哄皯 | 涓瓑 | 缂哄皯 | | +| 鏄惁寮婧 | 寮婧 | 寮婧 | 寮婧 | 寮婧 | 寮婧 | 寮婧 | | +| 鏄惁鏀寔浜嬪姟 | 寮盭A | 鏀寔 | 鍗曞簱寮轰竴鑷淬佸垎甯冨紡寮变簨鍔 | 鍗曞簱寮轰竴鑷淬佸搴撳急浜嬪姟 | 鍗曞簱寮轰竴鑷淬佸垎甯冨紡寮变簨鍔 | 涓嶆敮鎸 | | + +DAL +MySQL DAL锛圖ata Access Layer锛夋暟鎹闂眰 + +鍒嗚〃锛氬UID mod 2鍒2寮犺〃瀛樺偍锛屾煡璇㈡椂鍚屾牱鎿嶄綔 + diff --git a/deployment.md b/deployment.md new file mode 100644 index 0000000..7a45fad --- /dev/null +++ b/deployment.md @@ -0,0 +1,949 @@ + +Question: +--- +``` +濡備綍瑙e喅閲囩敤閲戜笣闆閮ㄧ讲鏃堕棿浠d环鐨勯棶棰樸 +鍦烘櫙锛氫竴涓緝澶ч」鐩氳繃婊氬姩閮ㄧ讲姝e父澶х害闇瑕1灏忔椂锛岄噸瑕佹湇鍔$殑閮ㄧ讲涓鑸細鏀惧湪鍑屾櫒寮灞曪紝閫氳繃閲戜笣闆閮ㄧ讲锛宑anary鐗堟湰楠岃瘉鏃堕棿浼氫覆鍏ユ绘椂闂达紝鐗堟湰楠岃瘉鏃堕棿濡傛秷鑰1灏忔椂锛岄偅涔堟剰鍛崇潃杩愮淮浜哄憳鑷冲皯鏅1涓皬鏃跺洖瀹躲 + +鎵浠ワ紝鐩墠鐨勫仛娉曟槸娴嬭瘯瀹岀殑鏈嶅姟锛屾粴鍔ㄩ儴缃插畬鎴愭墍鏈夋湇鍔$敓浜ч儴缃插悗锛屾敮鎾戜汉鍛樺仛涓涓猆AT锛屾病闂缁撴潫锛屾湁闂鍥炴粴寰呬笅涓娆′笂绾裤 + +=> 鏀硅繘 + +1. 鑷姩鍖栨祴璇曠▼搴︽彁楂橈紝canary鐗堟湰鍙互閫氳繃鑷姩鍖栨柟寮忛獙璇侊紝浠庤岃妭鐪佹祴璇曚覆鍏ユ椂闂淬 +2. canary鐗堟湰鍙互閫氳繃鑷姩鍖栦竴閿獙璇侊紙姣斿閫氳繃鍔爃eader鐨勬柟寮忚鑷姩鍖栨祴璇曢獙璇佸尮閰峢eader value鐨刢anary鐗堟湰锛夛紝楠岃瘉鎴愬姛鐩存帴patch鍒版棫鐗堟湰锛岄獙璇佷笉鎴愬姛锛屽垹闄anary鐗堟湰锛岀浉褰撲簬鍥炴粴锛屼笖涓嶅奖鍝嶇敓浜х敤鎴枫 +3. header value 锛 weight 鏂瑰紡鍙戝竷锛屽彲浠ヨ閮ㄥ垎浣撻獙鐢ㄦ埛浣跨敤鏂板姛鑳斤紝浣撻獙app锛 + +``` + +# 绗竴绡囷細K8S涓夌閮ㄧ讲绛栫暐 + +## 1. 閮ㄧ讲绛栫暐瀵规瘮 + +鍒嗗埆瀵规粴鍔ㄩ儴缃层佽摑缁块儴缃插拰閲戜笣闆閮ㄧ讲杩涜瀵规瘮 + +### 婊氬姩閮ㄧ讲 +搴旂敤鐨勬柊鐗堟湰閫愭鏇挎崲鏃х増鏈傚疄闄呯殑閮ㄧ讲鍙戠敓鍦ㄤ竴娈垫椂闂村唴銆傚湪姝ゆ湡闂达紝鏂版棫鐗堟湰浼氬叡瀛橈紝鑰屼笉浼氬奖鍝嶅姛鑳藉拰鐢ㄦ埛浣撻獙銆傝繖涓繃绋嬪彲浠ユ洿杞绘槗鐨勫洖婊氬拰鏃х粍浠朵笉鍏煎鐨勪换浣曟柊缁勪欢銆 + +![Screenshot_2021-10-08-14-20-37-390_com.android.browser.png](https://i.loli.net/2021/10/08/FLNrvu5mTnYa7Cy.png) +閮ㄧ讲绛栫暐瀵规瘮锛氭粴鍔ㄩ儴缃层佽摑缁块儴缃蹭互鍙婇噾涓濋泙閮ㄧ讲 + +### 钃濈豢閮ㄧ讲 +搴旂敤鐨勬柊鐗堟湰閮ㄧ讲鍦ㄧ豢鑹茬増鏈幆澧冧腑锛岃繘琛屽姛鑳藉拰鎬ц兘娴嬭瘯銆備竴鏃︽祴璇曢氳繃锛屽簲鐢ㄧ殑娴侀噺浠庤摑鑹茬増鏈矾鐢卞埌缁胯壊鐗堟湰銆傜劧鍚庣豢鑹茬増鏈彉鎴愭柊鐨勭敓浜х幆澧冦傚湪杩欎釜鏂规硶涓紝涓や釜鐩稿悓鐨勭敓浜х幆澧冨苟琛屽伐浣溿 + +![Screenshot_2021-10-08-14-21-21-681_com.android.browser.png](https://i.loli.net/2021/10/08/p7h84u6AEDyxMl9.png) +閮ㄧ讲绛栫暐瀵规瘮锛氭粴鍔ㄩ儴缃层佽摑缁块儴缃蹭互鍙婇噾涓濋泙閮ㄧ讲 + +![Screenshot_2021-10-08-14-21-31-176_com.android.browser.png](https://i.loli.net/2021/10/08/D5PmG3u4L2fIqS7.png) +閮ㄧ讲绛栫暐瀵规瘮锛氭粴鍔ㄩ儴缃层佽摑缁块儴缃蹭互鍙婇噾涓濋泙閮ㄧ讲 + +### 閲戜笣闆閮ㄧ讲 +閲囩敤閲戜笣闆閮ㄧ讲锛屼綘鍙互鍦ㄧ敓浜х幆澧冪殑鍩虹璁炬柦涓皬鑼冨洿鐨勯儴缃叉柊鐨勫簲鐢ㄤ唬鐮併備竴鏃﹀簲鐢ㄧ缃插彂甯冿紝鍙湁灏戞暟鐢ㄦ埛琚矾鐢卞埌瀹冦傛渶澶ч檺搴︾殑闄嶄綆褰卞搷銆傚鏋滄病鏈夐敊璇彂鐢燂紝鏂扮増鏈彲浠ラ愭笎鎺ㄥ箍鍒版暣涓熀纭璁炬柦銆備互鍓嶆椃宸ュ紑鐭夸笅鐭挎礊鍓嶏紝鍏堜細鏀句竴鍙噾涓濋泙杩涘幓鎺㈡槸鍚︽湁鏈夋瘨姘斾綋锛岀湅閲戜笣闆鑳藉惁娲讳笅鏉ワ紝閲戜笣闆鍙戝竷鐢辨寰楀悕銆備笅鍥剧ず鑼冧簡閲戜笣闆閮ㄧ讲锛 + +![Screenshot_2021-10-08-14-21-41-910_com.android.browser.png](https://i.loli.net/2021/10/08/shUZ6SaKfI5iWRF.png) +閮ㄧ讲绛栫暐瀵规瘮锛氭粴鍔ㄩ儴缃层佽摑缁块儴缃蹭互鍙婇噾涓濋泙閮ㄧ讲 + +閲戜笣闆閮ㄧ讲鍖呮嫭灏嗙敓浜ф祦閲忎粠鐗堟湰A閫愭笎杞Щ鍒扮増鏈珺銆傞氬父锛屾祦閲忔槸鏍规嵁鏉冮噸鍒嗛厤鐨勩 渚嬪锛90锛呯殑璇锋眰鍙戦佸埌鐗堟湰A锛10锛呯殑璇锋眰鍙戦佸埌鐗堟湰B銆 + +## 2. 浣跨敤Kubernetes瀹炵幇閲戜笣闆閮ㄧ讲 + +涓昏姝ラ锛 +1. 閮ㄧ讲v1鐗堟湰鐨勫簲鐢紝姝ゆ椂service璁块棶鐨勯兘鏄痸1鐗堟湰鐨勬湇鍔 +2. 閮ㄧ讲v2鐗堟湰锛屾暟閲忎负x/10锛屽悓鏃剁缉灏弙1鐗堟湰鐨勬暟閲弜/10锛屾鏃舵湁x/10鐨勬祦閲忓埌v2鐗堟湰鐨勬湇鍔 +3. 閫愭缂╁皬v1锛屾墿澶2锛屾渶缁坴2鐗堟湰鏇挎崲鍏ㄩ儴鐨剉1 + +### 2.1 鎼缓妯℃嫙鐨勬湇鍔 + +app-v1.yaml : https://github.com/ContainerSolutions/k8s-deployment-strategies/blob/master/canary/native/app-v1.yaml + +``` +apiVersion: v1 +kind: Service +metadata: + name: my-app + labels: + app: my-app +spec: + type: NodePort + ports: + - name: http + port: 80 + targetPort: http + selector: + app: my-app +``` +--- +``` +apiVersion: apps/v1 +kind: Deployment +metadata: + name: my-app-v1 + labels: + app: my-app +spec: + replicas: 10 + selector: + matchLabels: + app: my-app + version: v1.0.0 + template: + metadata: + labels: + app: my-app + version: v1.0.0 + annotations: + prometheus.io/scrape: "true" + prometheus.io/port: "9101" + spec: + containers: + - name: my-app + image: containersol/k8s-deployment-strategies + ports: + - name: http + containerPort: 8080 + - name: probe + containerPort: 8086 + env: + - name: VERSION + value: v1.0.0 + livenessProbe: + httpGet: + path: /live + port: probe + initialDelaySeconds: 5 + periodSeconds: 5 + readinessProbe: + httpGet: + path: /ready + port: probe + periodSeconds: 5 +``` + +$kubectl apply -f app-v1.yaml + +``` +service/my-app created +deployment.apps/my-app-v1 created +``` + +$kubectl get service my-app + +``` +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +my-app NodePort 10.98.198.198 80:30969/TCP 23m +``` + +$curl 10.98.198.198:80 + +``` +Host: my-app-v1-c9b7f9985-5qvz4, Version: v1.0.0 +``` + +### 2.2 搴旂敤浣跨敤閲戜笣闆閮ㄧ讲鏂瑰紡鏉ュ崌绾 +鎺ヤ笅鏉ワ紝鎴戜滑瀵筸y-app-v1鍗囩骇鍒癿y-app-v2锛 + +app-v2.yaml : https://github.com/ContainerSolutions/k8s-deployment-strategies/blob/master/canary/native/app-v2.yaml + +``` +apiVersion: apps/v1 +kind: Deployment +metadata: + name: my-app-v2 + labels: + app: my-app +spec: + replicas: 1 + selector: + matchLabels: + app: my-app + version: v2.0.0 + template: + metadata: + labels: + app: my-app + version: v2.0.0 + annotations: + prometheus.io/scrape: "true" + prometheus.io/port: "9101" + spec: + containers: + - name: my-app + image: containersol/k8s-deployment-strategies + ports: + - name: http + containerPort: 8080 + - name: probe + containerPort: 8086 + env: + - name: VERSION + value: v2.0.0 + livenessProbe: + httpGet: + path: /live + port: probe + initialDelaySeconds: 5 + periodSeconds: 5 + readinessProbe: + httpGet: + path: /ready + port: probe + periodSeconds: 5 +``` + +寮鍚痺atch鏉ョ洃鎺od鍜宒eployment鐨勫彉鍖 + +$kubectl get --watch deployment + +$kubectl get --watch pod + + +鍗囩骇 + +$kubectl apply -f app-v2.yaml + +``` +deployment.apps/my-app-v2 created +``` + +姝ゆ椂鍙互鐪嬪埌锛宮y-app-v2鍚姩浜1涓 + +$kubectl get --watch deployment + +``` +NAME READY UP-TO-DATE AVAILABLE AGE +my-app-v1 10/10 10 10 45m +my-app-v2 1/1 1 1 46s +``` + +$kubectl scale --replicas=9 deploy my-app-v1 + +``` +deployment.apps/my-app-v1 scaled +``` + +$kubectl get deployments + +``` +NAME READY UP-TO-DATE AVAILABLE AGE +my-app-v1 9/9 9 9 47m +my-app-v2 1/1 1 1 2m48s +``` + +姝ゆ椂锛屾垜浠皢my-app-v1 缂╁皬鍒9涓紝杩欐牱閫氳繃service鐨勮礋杞藉潎琛★紝my-app-v2浼氭壙鎺ュ埌%10锛1/20锛夌殑娴侀噺 + +``` +$service=10.98.198.198:80 + +$while sleep 0.1; do curl "$service"; done + +Host: my-app-v1-c9b7f9985-mqnmr, Version: v1.0.0 +Host: my-app-v1-c9b7f9985-bl4g7, Version: v1.0.0 +Host: my-app-v1-c9b7f9985-rmng9, Version: v1.0.0 +Host: my-app-v1-c9b7f9985-mz9hc, Version: v1.0.0 +Host: my-app-v1-c9b7f9985-bl4g7, Version: v1.0.0 +Host: my-app-v1-c9b7f9985-mz9hc, Version: v1.0.0 +Host: my-app-v1-c9b7f9985-mm6fp, Version: v1.0.0 +Host: my-app-v2-77fc8c9499-m6n9j, Version: v2.0.0 +Host: my-app-v1-c9b7f9985-l69pf, Version: v1.0.0 +Host: my-app-v1-c9b7f9985-mqnmr, Version: v1.0.0 +Host: my-app-v1-c9b7f9985-mz9hc, Version: v1.0.0 +Host: my-app-v1-c9b7f9985-62zb4, Version: v1.0.0 +``` + +楠岃瘉閫氳繃鍚庯紝鎴戜滑閫愭灏唌y-app-v2鎵╁鍒10涓紝灏唌y-app-v1缂╁皬鍒0涓 + +$kubectl scale --replicas=10 deploy my-app-v2 + +$kubectl delete deploy my-app-v1 + +鍐嶆楠岃瘉鏈嶅姟锛屼細鍙戠幇my-app-v2鎵挎帴浜嗘墍鏈夋祦閲: + +``` +$while sleep 0.1; do curl "$service"; done +``` + +娴嬭瘯瀹屾垚娓呯悊鏁版嵁 + +$kubectl delete all -l app=my-app + +## 3. 浣跨敤Kubernetes瀹炵幇钃濈豢閮ㄧ讲 + +涓昏姝ラ锛 +1. 閮ㄧ讲v1鐗堟湰 锛屾鏃秙ervice璁块棶鐨勯兘鏄痸1鐗堟湰鐨勬湇鍔 +2. 閮ㄧ讲v2鐗堟湰锛岀洿鍒伴儴缃插畬鎴 +3. 灏唖ervice鐨勬祦閲忎粠v1鐗堟湰鍒囨崲鍒皏2鐗堟湰 +4. 閿姣乿1 + +棣栧厛锛岄氳繃濡備笅鍛戒护鐩戞帶pod鐨勫疄鏃剁姸鎬 + +$watch kubectl get pod + +### 3.1 鎼缓妯℃嫙鐨勬湇鍔 +app-v1.yaml:https://github.com/ContainerSolutions/k8s-deployment-strategies/blob/master/blue-green/single-service/app-v1.yaml + +``` +apiVersion: v1 +kind: Service +metadata: + name: my-app + labels: + app: my-app +spec: + type: NodePort + ports: + - name: http + port: 80 + targetPort: http + + # Note here that we match both the app and the version + selector: + app: my-app + version: v1.0.0 +``` +--- +``` +apiVersion: apps/v1 +kind: Deployment +metadata: + name: my-app-v1 + labels: + app: my-app +spec: + replicas: 3 + selector: + matchLabels: + app: my-app + version: v1.0.0 + template: + metadata: + labels: + app: my-app + version: v1.0.0 + annotations: + prometheus.io/scrape: "true" + prometheus.io/port: "9101" + spec: + containers: + - name: my-app + image: containersol/k8s-deployment-strategies + ports: + - name: http + containerPort: 8080 + - name: probe + containerPort: 8086 + env: + - name: VERSION + value: v1.0.0 + livenessProbe: + httpGet: + path: /live + port: probe + initialDelaySeconds: 5 + periodSeconds: 5 + readinessProbe: + httpGet: + path: /ready + port: probe + periodSeconds: 5 +``` +閮ㄧ讲鏈嶅姟鍜寁1鐗堟湰 + +$kubectl apply -f app-v1.yaml + +``` +service/my-app created +deployment.apps/my-app-v1 created +``` + +$kubectl get service + +``` +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +kubernetes ClusterIP 10.96.0.1 443/TCP 14d +my-app NodePort 10.111.231.242 80:31540/TCP 18s +``` + +$while sleep 0.1;do curl 10.111.231.242:80;done + +``` +Host: my-app-v1-c9b7f9985-wqpf5, Version: v1.0.0 +Host: my-app-v1-c9b7f9985-wqpf5, Version: v1.0.0 +Host: my-app-v1-c9b7f9985-gnhr4, Version: v1.0.0 +``` + +### 3.2 閮ㄧ讲v2鐗堟湰 + +app-v2.yaml:https://github.com/ContainerSolutions/k8s-deployment-strategies/blob/master/blue-green/single-service/app-v2.yaml + +``` +apiVersion: apps/v1 +kind: Deployment +metadata: + name: my-app-v2 + labels: + app: my-app +spec: + replicas: 3 + selector: + matchLabels: + app: my-app + version: v2.0.0 + template: + metadata: + labels: + app: my-app + version: v2.0.0 + annotations: + prometheus.io/scrape: "true" + prometheus.io/port: "9101" + spec: + containers: + - name: my-app + image: containersol/k8s-deployment-strategies + ports: + - name: http + containerPort: 8080 + - name: probe + containerPort: 8086 + env: + - name: VERSION + value: v2.0.0 + livenessProbe: + httpGet: + path: /live + port: probe + initialDelaySeconds: 5 + periodSeconds: 5 + readinessProbe: + httpGet: + path: /ready + port: probe + periodSeconds: 5 +``` + +閮ㄧ讲瀹屾垚鍚庯紝鎴戜滑鍙互鐪嬪埌锛屾诲叡涓儴缃蹭簡涓や釜鐗堟湰鐨刣eployment銆傛湁3涓猵od鏄痸1锛屽彟澶3涓槸v2鐨勩傝屽綋鍓峴ervice璁块棶鐨勯兘鏄痸1鐗堟湰鐨勬湇鍔 + +![Screenshot_2021-10-08-14-22-30-848_com.android.browser.png](https://i.loli.net/2021/10/08/5f7Qzk28NhlWm6L.png) +image.png +鎺ヤ笅鏉ワ紝灏辨槸瑕佸皢鏈嶅姟鐨勬祦閲忓垏鍒皏2 + +$kubectl patch service my-app -p '{"spec":{"selector":{"version":"v2.0.0"}}}' + +姝ゆ椂鍙互鐪嬪埌锛屾湇鍔$殑娴侀噺閮藉埌浜唙2 + +![Screenshot_2021-10-08-14-22-48-523_com.android.browser.png](https://i.loli.net/2021/10/08/LZQ2cqFz8mV9aiA.png) +image.png +楠岃瘉娌¢棶棰樺悗锛屾垜浠妸v1鍒犻櫎 + +$kubectl delete deploy my-app-v1 + +鑻ユ湁闂锛屽彲浠ュ洖婊 + +$kubectl patch service my-app -p '{"spec":{"selector":{"version":"v1.0.0"}}}' + +## 4. 浣跨敤Kubernetes瀹炵幇婊氬姩閮ㄧ讲 + +涓昏姝ラ锛 +1. 閮ㄧ讲v1鐗堟湰 锛屾鏃秙ervice璁块棶鐨勯兘鏄痸1鐗堟湰鐨勬湇鍔 +2. 璁剧疆v2鐗堟湰锛屼笖鏇存柊绛栫暐涓烘粴鍔ㄦ洿鏂 +3. 閮ㄧ讲v2鐗堟湰 + +### 4.1 鎼缓妯℃嫙鐨勬湇鍔 + +app-v1.yaml: https://github.com/ContainerSolutions/k8s-deployment-strategies/blob/master/ramped/app-v1.yaml + +``` +apiVersion: v1 +kind: Service +metadata: + name: my-app + labels: + app: my-app +spec: + type: NodePort + ports: + - name: http + port: 80 + targetPort: http + selector: + app: my-app +``` +--- +``` +apiVersion: apps/v1 +kind: Deployment +metadata: + name: my-app + labels: + app: my-app +spec: + replicas: 10 + selector: + matchLabels: + app: my-app + template: + metadata: + labels: + app: my-app + version: v1.0.0 + annotations: + prometheus.io/scrape: "true" + prometheus.io/port: "9101" + spec: + containers: + - name: my-app + image: containersol/k8s-deployment-strategies + ports: + - name: http + containerPort: 8080 + - name: probe + containerPort: 8086 + env: + - name: VERSION + value: v1.0.0 + livenessProbe: + httpGet: + path: /live + port: probe + initialDelaySeconds: 5 + periodSeconds: 5 + readinessProbe: + httpGet: + path: /ready + port: probe + periodSeconds: 5 +``` + +閮ㄧ讲app-v1.yaml + +$kubectl apply -f app-v1.yaml + +``` +service/my-app created +deployment.apps/my-app created +``` + +$kubectl get service + +``` +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +kubernetes ClusterIP 10.96.0.1 443/TCP 14d +my-app NodePort 10.100.43.22 80:32725/TCP 45s +``` + +$curl 10.100.43.22:80 + +``` +Host: my-app-c9b7f9985-ph2fz, Version: v1.0.0 +``` + +### 4.2 鎺ヤ笅鏉ュ噯澶囪繘琛屾粴鍔ㄥ崌绾 + +閫氳繃濡備笅鍛戒护鐩戞帶pod鐨勫彉鍖 + +$watch kubectl get pod + +app-v2.yaml : https://github.com/ContainerSolutions/k8s-deployment-strategies/blob/master/ramped/app-v2.yaml + +``` +apiVersion: apps/v1 +kind: Deployment +metadata: + name: my-app + labels: + app: my-app +spec: + replicas: 10 + + # Here we define the rolling update strategy + # - maxSurge define how many pod we can add at a time + # - maxUnavailable define how many pod can be unavailable + # during the rolling update + # + # Setting maxUnavailable to 0 would make sure we have the appropriate + # capacity during the rolling update. + # You can also use percentage based value instead of integer. + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 + maxUnavailable: 0 + + # The selector field tell the deployment which pod to update with + # the new version. This field is optional, but if you have labels + # uniquely defined for the pod, in this case the "version" label, + # then we need to redefine the matchLabels and eliminate the version + # field from there. + selector: + matchLabels: + app: my-app + template: + metadata: + labels: + app: my-app + version: v2.0.0 + annotations: + prometheus.io/scrape: "true" + prometheus.io/port: "9101" + spec: + containers: + - name: my-app + image: containersol/k8s-deployment-strategies + ports: + - name: http + containerPort: 8080 + - name: probe + containerPort: 8086 + env: + - name: VERSION + value: v2.0.0 + livenessProbe: + httpGet: + path: /live + port: probe + initialDelaySeconds: 5 + periodSeconds: 5 + readinessProbe: + httpGet: + path: /ready + port: probe + + # Intial delay is set to a high value to have a better + # visibility of the ramped deployment + initialDelaySeconds: 15 + periodSeconds: 5 +``` + +寮濮嬪崌绾 + +$kubectl apply -f app-v2.yaml + +``` +deployment.apps/my-app configured +``` + +鍚屾椂鍙互鐪嬪埌pod姝e湪琚愭鏇挎崲 + +![Screenshot_2021-10-08-14-23-08-551_com.android.browser.png](https://i.loli.net/2021/10/08/NqISZGDowdzv5CK.png) +image.png +鍦ㄩ愭鏇挎崲鐨勮繃绋嬩腑锛屼负浜嗛獙璇佹祦閲忥紝鍙互闅忔椂鏆傚仠鍗囩骇锛屾殏鍋滄仮澶嶅懡浠ゅ涓 + +$kubectl rollout pause deploy my-app + +``` +deployment.apps/my-app paused +``` + +$kubectl rollout resume deploy my-app + +``` +deployment.apps/my-app resumed +``` + + +# 绗簩绡囷細K8S鍩轰簬ingress-nginx瀹炵幇鐏板害鍙戝竷 + +涔嬪墠浠嬬粛杩囦娇鐢╝mbassador瀹炵幇鐏板害鍙戝竷锛屼粖澶╀粙缁嶅浣曚娇鐢╥ngre-nginx瀹炵幇銆 + +## 浠嬬粛 + +Ingress-Nginx 鏄竴涓狵8S ingress宸ュ叿锛屾敮鎸侀厤缃 Ingress Annotations 鏉ュ疄鐜颁笉鍚屽満鏅笅鐨勭伆搴﹀彂甯冨拰娴嬭瘯銆 + +Nginx Annotations 鏀寔浠ヤ笅 4 绉 Canary 瑙勫垯锛 + +### nginx.ingress.kubernetes.io/canary-by-header锛 +鍩轰簬 Request Header 鐨勬祦閲忓垏鍒嗭紝閫傜敤浜庣伆搴﹀彂甯冧互鍙 A/B 娴嬭瘯銆傚綋 Request Header 璁剧疆涓 always鏃讹紝璇锋眰灏嗕細琚竴鐩村彂閫佸埌 Canary 鐗堟湰锛涘綋 Request Header 璁剧疆涓 never鏃讹紝璇锋眰涓嶄細琚彂閫佸埌 Canary 鍏ュ彛锛涘浜庝换浣曞叾浠 Header 鍊硷紝灏嗗拷鐣 Header锛屽苟閫氳繃浼樺厛绾у皢璇锋眰涓庡叾浠栭噾涓濋泙瑙勫垯杩涜浼樺厛绾х殑姣旇緝銆 + +### nginx.ingress.kubernetes.io/canary-by-header-value锛 +瑕佸尮閰嶇殑 Request Header 鐨勫硷紝鐢ㄤ簬閫氱煡 Ingress 灏嗚姹傝矾鐢卞埌 Canary Ingress 涓寚瀹氱殑鏈嶅姟銆傚綋 Request Header 璁剧疆涓烘鍊兼椂锛屽畠灏嗚璺敱鍒 Canary 鍏ュ彛銆傝瑙勫垯鍏佽鐢ㄦ埛鑷畾涔 Request Header 鐨勫硷紝蹇呴』涓庝笂涓涓 annotation (鍗筹細canary-by-header锛変竴璧蜂娇鐢ㄣ + +### nginx.ingress.kubernetes.io/canary-weight锛 +鍩轰簬鏈嶅姟鏉冮噸鐨勬祦閲忓垏鍒嗭紝閫傜敤浜庤摑缁块儴缃诧紝鏉冮噸鑼冨洿 0 - 100 鎸夌櫨鍒嗘瘮灏嗚姹傝矾鐢卞埌 Canary Ingress 涓寚瀹氱殑鏈嶅姟銆傛潈閲嶄负 0 鎰忓懗鐫璇ラ噾涓濋泙瑙勫垯涓嶄細鍚 Canary 鍏ュ彛鐨勬湇鍔″彂閫佷换浣曡姹傘傛潈閲嶄负 100 鎰忓懗鐫鎵鏈夎姹傞兘灏嗚鍙戦佸埌 Canary 鍏ュ彛銆 + +### nginx.ingress.kubernetes.io/canary-by-cookie锛 +鍩轰簬 Cookie 鐨勬祦閲忓垏鍒嗭紝閫傜敤浜庣伆搴﹀彂甯冧笌 A/B 娴嬭瘯銆傜敤浜庨氱煡 Ingress 灏嗚姹傝矾鐢卞埌 Canary Ingress 涓寚瀹氱殑鏈嶅姟鐨刢ookie銆傚綋 cookie 鍊艰缃负 always鏃讹紝瀹冨皢琚矾鐢卞埌 Canary 鍏ュ彛锛涘綋 cookie 鍊艰缃负 never鏃讹紝璇锋眰涓嶄細琚彂閫佸埌 Canary 鍏ュ彛锛涘浜庝换浣曞叾浠栧硷紝灏嗗拷鐣 cookie 骞跺皢璇锋眰涓庡叾浠栭噾涓濋泙瑙勫垯杩涜浼樺厛绾х殑姣旇緝銆 + + +娉ㄦ剰锛氶噾涓濋泙瑙勫垯鎸変紭鍏堥『搴忚繘琛屽涓嬫帓搴忥細 + +canary-by-header - > canary-by-cookie - > canary-weight + +鎴戜滑鍙互鎶婁互涓婄殑鍥涗釜 annotation 瑙勫垯鍙互鎬讳綋鍒掑垎涓轰互涓嬩袱绫伙細 + +鍩轰簬鏉冮噸鐨 Canary 瑙勫垯 +![658e7d2fb7c671f4.png](https://i.loli.net/2021/10/08/C8kiKuO7a1T6mtI.png) + +鍩轰簬鐢ㄦ埛璇锋眰鐨 Canary 瑙勫垯 +![d1899062bab4dc0f.png](https://i.loli.net/2021/10/08/iUu7fCacj4XLGgA.png) + +娉ㄦ剰锛 Ingress-Nginx 瀹炲湪0.21.0 鐗堟湰 涓紝寮曞叆鐨凜anary 鍔熻兘锛屽洜姝よ纭繚ingress鐗堟湰OK + +## 娴嬭瘯 + +### 搴旂敤鍑嗗 +涓や釜鐗堟湰鐨勬湇鍔★紝姝e父鐗堟湰锛 + +``` +import static java.util.Collections.singletonMap; + +@SpringBootApplication +@Controller +public class RestPrometheusApplication { + + @Autowired + private MeterRegistry registry; + + @GetMapping(path = "/", produces = "application/json") + @ResponseBody + public Map landingPage() { + Counter.builder("mymetric").tag("foo", "bar").register(registry).increment(); + return singletonMap("hello", "ambassador"); + } + + public static void main(String[] args) { + SpringApplication.run(RestPrometheusApplication.class, args); + } +} +``` + +璁块棶浼氳緭鍑猴細 + +``` +{"hello":"ambassador"} +``` +鐏板害鐗堟湰锛 + +``` +import static java.util.Collections.singletonMap; + +@SpringBootApplication +@Controller +public class RestPrometheusApplication { + + @Autowired + private MeterRegistry registry; + + @GetMapping(path = "/", produces = "application/json") + @ResponseBody + public Map landingPage() { + Counter.builder("mymetric").tag("foo", "bar").register(registry).increment(); + return singletonMap("hello", "ambassador, this is a gray version"); + } + + public static void main(String[] args) { + SpringApplication.run(RestPrometheusApplication.class, args); + } + +} +``` + +璁块棶浼氳緭鍑猴細 + +``` +{"hello":"ambassador, this is a gray version"} +``` + +### ingress 閰嶇疆 + +#### header +鎴戜滑閮ㄧ讲濂戒袱涓湇鍔★紝springboot-rest-demo鏄甯哥殑鏈嶅姟锛宻pringboot-rest-demo-gray鏄伆搴︽湇鍔★紝鎴戜滑鏉ラ厤缃甶ngress锛岄氳繃canary-by-header鏉ュ疄鐜帮細 + +姝e父鏈嶅姟鐨勶細 + +``` +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: springboot-rest-demo + annotations: + kubernetes.io/ingress.class: nginx +spec: + rules: + - host: springboot-rest.jadepeng.com + http: + paths: + - backend: + serviceName: springboot-rest-demo + servicePort: 80 +``` +canary 鐨勶細 + +``` +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: springboot-rest-demo-gray + annotations: + kubernetes.io/ingress.class: nginx + nginx.ingress.kubernetes.io/canary: "true" + nginx.ingress.kubernetes.io/canary-by-header: "canary" + nginx.ingress.kubernetes.io/canary-by-header-value: "true" +spec: + rules: + - host: springboot-rest.jadepeng.com + http: + paths: + - backend: + serviceName: springboot-rest-demo-gray + servicePort: 80 +``` +灏嗕笂闈㈢殑鏂囦欢鎵ц锛 + +``` +kubectl -n=default apply -f ingress-test.yml +ingress.extensions/springboot-rest-demo created +ingress.extensions/springboot-rest-demo-gray created +``` + +鎵ц娴嬭瘯锛屼笉娣诲姞header锛岃闂殑榛樿鏄寮忕増鏈細 + +``` +$ curl http://springboot-rest.jadepeng.com; echo +{"hello":"ambassador"} + +$ curl http://springboot-rest.jadepeng.com; echo +{"hello":"ambassador"} +``` + +娣诲姞header锛屽彲浠ョ湅鍒帮紝璁块棶鐨勫凡缁忔槸鐏板害鐗堟湰浜 + +``` +$ curl -H "canary: true" http://springboot-rest.jadepeng.com; echo +{"hello":"ambassador, this is a gray version"} +``` + +#### weight + +``` +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + annotations: + kubernetes.io/ingress.class: nginx + nginx.ingress.kubernetes.io/canary: "true" + nginx.ingress.kubernetes.io/canary-weight: "50" + name: helloworld-weight +spec: + rules: + - host: hello.world.test + http: + paths: + - backend: + serviceName: hello-world-svc-v2 + servicePort: 80 +``` + +鍒涘缓Ingress瑙勫垯锛 + +``` +[root@vm10-0-11-201 ~]# kubectl apply -f helloworld-ingress.yaml +ingress.extensions/hello-world created +[root@vm10-0-11-201 ~]# kubectl apply -f weight-ingress.yaml +ingress.extensions/helloworld-weight created +[root@vm10-0-11-201 ~]# kubectl get ingress +NAME CLASS HOSTS ADDRESS PORTS AGE +hello-world hello.world.test 80 41s +helloworld-weight hello.world.test 80 27s +``` + +楠岃瘉璁块棶鎯呭喌 +閫氳繃浠ヤ笅鍛戒护鑾峰彇EXTERNAL-IP鍙婅闂湇鍔★細 + +``` +[root@vm10-0-11-201 ~]# kubectl get svc -n ingress-nginx +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +nginx-ingress LoadBalancer 10.254.28.54 120.92.xx.xx 80:31741/TCP,443:32754/TCP 3h19m +[root@vm10-0-11-201 ~]# for i in $(seq 1 10); do curl -H "Host: hello.world.test" http://120.92.xx.xx; done; +Hello World v2! +Hello World v2! +Hello World v1! +Hello World v2! +Hello World v2! +Hello World v1! +Hello World v1! +Hello World v1! +Hello World v2! +Hello World v2! +``` +澶氭璁块棶鑳藉彂鐜扮害50%鐨勬祦閲忎細琚垎鍙戝埌v2鐗堟湰鏈嶅姟涓 + +#### others + +ingress-nginx 浠 0.21.0 寮濮嬫敮鎸侀噾涓濋泙锛坈anary锛夋ā寮忥紝瀵瑰簲鐨 merge 鏄 3341銆 Canary deploys with ingress-nginx 浠嬬粛浜嗙敤娉曘 + +棣栧厛鍒涘缓涓涓櫘閫氱殑 ingress A 鎸囧悜 Service A锛 + +``` +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + annotations: + nginx.ingress.kubernetes.io/ingress.class: nginx + nginx.ingress.kubernetes.io/upstream-fail-timeout: "10" + nginx.ingress.kubernetes.io/upstream-max-fails: "2" + name: demo-echo-ingress + namespace: demo-echo +spec: + rules: + - host: demo.echo.test + http: + paths: + - path: / + backend: + serviceName: webshell + servicePort: 80 +``` +鐒跺悗鍒涘缓涓涓缃簡鐩稿悓 host 鍜 path 鐨 ingress B锛孖ngress B 鎸囧悜浜嗗彟涓涓湇鍔 Service B锛屽苟涓斿湪 annotations 涓敞鏄庤繖鏄竴涓 canary ingress锛 + +``` +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + annotations: + nginx.ingress.kubernetes.io/canary: "true" + nginx.ingress.kubernetes.io/canary-by-header: "version" + nginx.ingress.kubernetes.io/canary-by-header-value: "canary" + nginx.ingress.kubernetes.io/canary-by-cookie: "canary-cookie" + nginx.ingress.kubernetes.io/canary-weight: "50" + nginx.ingress.kubernetes.io/ingress.class: nginx + nginx.ingress.kubernetes.io/upstream-fail-timeout: "10" + nginx.ingress.kubernetes.io/upstream-max-fails: "2" + name: demo-echo-ingress-canary + namespace: demo-echo +spec: + rules: + - host: demo.echo.test + http: + paths: + - path: / + backend: + serviceName: echo + servicePort: 80 +``` +甯︽湁 鈥渧ersion: canary鈥 澶寸殑璇锋眰閮借鍙戦佸埌 canary 鐗堟湰锛 + +``` +curl -H "version: canary" -H "Host: demo.echo.test" 10.10.64.58 +``` +鐩稿叧鍙傛暟涓猴細 + +``` +nginx.ingress.kubernetes.io/canary-by-header: "version" +nginx.ingress.kubernetes.io/canary-by-header-value: "canary" +``` +涓嶅甫鏈 鈥渧ersion: canary鈥 澶寸殑璇锋眰涓鍗婅杞彂缁 canary 鐗堟湰锛岀浉鍏冲弬鏁颁负锛 + +``` +nginx.ingress.kubernetes.io/canary-weight: "50" +``` +杩樻敮鎸佹寜鐓 cookie 閫夋嫨锛宑ookie 鐨勫间负 always 鎴栬 never锛屽墠鑰呰浆鍙戠粰 canary锛屽悗鑰呬笉杞彂锛屾寚瀹 cookie 鍚嶇О鐨勫弬鏁颁负 锛 + +``` +nginx.ingress.kubernetes.io/canary-by-cookie: "canary-cookie" +curl -v -b canary-cookie=always demo.echo.test # 璁块棶閲戜笣闆鐗堟湰 +curl -v -b canary-cookie=never demo.echo.test # 璁块棶闈為噾涓濋泙鐗堟湰 +header銆乧ookie銆亀eight 鐨勪綔鐢ㄩ『搴忔槸锛歝anary-by-header -> canary-by-cookie -> canary-weight銆 +``` + +## 鍙傝 +https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#canary + diff --git a/devops.md b/devops.md new file mode 100644 index 0000000..bf0fd9f --- /dev/null +++ b/devops.md @@ -0,0 +1,68 @@ + +# [姝g‘鐞嗚ВDevOps寮鍙戣繍缁翠竴浣撳寲](https://www.aisoutu.com/a/67821) + +鍙戝竷浜 2020-12-25 00:20 + +鎴戜滑涓鐩磋DevOps鏄滆皝寮鍙戣皝杩愮淮銆佸紑鍙戣繍缁翠竴浣撳寲鈥濓紝浣嗗叿浣撴庝箞鍋氬苟娌℃湁鍑犱釜浜鸿鐨勬竻妤氱殑銆傜壒鍒槸鈥滆皝寮鍙戣皝杩愮淮鈥濓紝杩欐槑鏄炬槸涓嶇鍚堝疄闄呮儏鍐电殑銆傝瘯鎯充竴涓嬶紝涓涓紑鍙戜汉鍛樺紑鍙戠殑搴旂敤鏈嶅姟閮界敱浠栬嚜宸辨潵杩愮淮锛屼粬鑳借繍缁村嚑涓簲鐢ㄦ湇鍔★紵鐒跺悗鍙堟湁澶氬皯鏃堕棿鑳界户缁仛寮鍙戯紵鍒版渶鍚庡矀涓嶆槸鎵鏈夊紑鍙戜汉鍛橀兘鎴愪簡杩愮淮浜哄憳銆傛湁鐐规瀬绔紝浣嗘槸涔熸璇存槑浜嗘垜浠DevOps鐨勮璇嗗瓨鍦ㄥ緢澶х殑璇В銆 + +DevOps鎻愬♀滃紑鍙戣繍缁翠竴浣撳寲鈥濓紝浣嗕笉鏄滆皝寮鍙戣皝杩愮淮鈥濄備絾鎬庝箞寮鍙戣繍缁翠竴浣撳寲寰寰涔熼兘娌℃湁璇存竻妤氾紝涔熸病鏈夊緢濂界殑瀹炶返妗堜緥銆**Google SRE鏇村鐨勫叾瀹炴槸杩愮淮闃舵鐨勫伐浣滐紝铏界劧Google SRE寰堝宸ヤ綔鏄繍缁村伐鍏峰拰杩愮淮鏈嶅姟鐨勫紑鍙戝伐浣滐紝浣嗗叾鏈川涓婃槸鍋氳繍缁淬備絾鏄畠缁欐垜浠殑涓涓緢濂界殑鍚ず鏄紝鎶娾滆繍缁村紑鍙戔濆拰鈥滆繍缁寸淮鎶も濅竴浣撳寲浜嗭紝涔熷氨鏄繍缁翠汉鍛樹笉鍐嶆槸绠鍗曠殑绯荤粺绠$悊鍜岀淮鎶わ紝鑰屾槸閫氳繃杩愮淮宸ュ叿鐨勭爺鍙戯紝浣胯繍缁存祦绋嬭嚜鍔ㄥ寲鍜屾櫤鑳藉寲锛屽皢涓浜涙棩甯搁噸澶嶆х殑杩愮淮宸ヤ綔閫氳繃鑷爺宸ュ叿鑷姩鍖栧拰鏅鸿兘鍖栦簡锛岃繖灏卞ぇ澶у噺杞讳簡杩愮淮浜哄憳鐨勭淮鎶ゅ伐浣滈噺锛屾彁鍗囦簡杩愮淮鏁堢巼銆**杩欎簺宸ヤ綔涓嶅啀闈犫滅爺鍙戜汉鍛樷濓紝鑰屾槸鈥滆繍缁磋嚜韬濈殑鑳藉姏鏉ュ疄鐜扮殑銆 + +CG: +*杩愮淮&寮鍙戜笉鏄竴涓伐绉嶉棬绫伙紝濡備綍涓浣擄紵濡備綍绮樺悎锛屼笉鏄寮鍙戞棦鍋氬紑鍙戞湁鍋氳繍缁达紝杩欐牱鏃犳硶涓撴敞寮鍙戯紝涔熸棤娉曚笓娉ㄨ繍缁达紝涓嶆槸璇磋繍缁村拰寮鍙戞槸涓涓汉鎴栦竴涓洟闃燂紝鑰屾槸寮鍙戝拰杩愮淮鑳芥棤缂濊鎺ワ紝褰㈡垚鍙嶉鍚堝姏銆傞偅涔堝浣曞仛鍒拌繖鐐癸紝涓鏄繍缁磋繃绋嬪繀椤诲悜鍓嶇湅锛屽姞閫熷弽棣堝拰澶勭悊杩囩▼锛涗簩鏄繀椤讳緷闈犺嚜鍔ㄥ寲宸ュ叿锛屼汉鐨勫崗浣滄瘯绔熸槸闈炲父閲嶈鐨勶紝浣嗕汉瀛樺湪鏁堢巼鍋忓樊鍜屾妧鑳藉亸宸紝鍗曚緷闈犱汉鐨勫崗浣滐紝蹇呯劧浼氬湪涓よ呬箣闂村舰鎴怗ap锛岃嚜鍔ㄥ寲宸ュ叿褰㈡垚绠¢亾锛屾寮忓讥鍚堣繖涓猤ap锛屾妸涓よ呯矘鍚堣捣鏉ャ* +**浼樺寲鍘熷垯锛氬噺灏戝ぇ閲忕殑浜哄伐娌熼氬崗鍚岋紝鑰屾槸搴旇閫氳繃宸ュ叿閾惧崗鍚屻** +- 娴佹按绾垮鍔犲惎鍔ㄦ鏌ヨ妭鐐癸紝2涓皬鏃跺唴鏈変唬鐮乧heck in 鍒欒Е鍙戙 +- 鏄惁闇瑕佷汉宸ラ獙璇侊紝鍙互鎸塩ommit desc 纭銆 +- 闇姹傚拰缂洪櫡鐨勭鐞 +- 闇姹傚拰缂洪櫡鐘舵佺殑鍙樺寲 +- 鍙樻洿椹卞姩鐨勭増鏈紑鍙戝拰娴佹按绾胯璁 + +DevOps寮鍙戣繍缁翠竴浣撳寲骞朵笉鏄寮鍙戝幓鍋氳繍缁达紝鑰屾槸浣垮紑鍙戝拰杩愮淮閫氳繃涓浜涙満鍒舵湁鏈虹粨鍚堛侀珮鏁堢粺涓锛屾垚涓轰竴涓暣浣擄紝浠庤屾秷闄ゅ紑鍙戝洟闃熷拰杩愮淮鍥㈤槦涔嬮棿鐨刧ap锛屾湁鏁堟彁鍗囧簲鐢ㄦ湇鍔$殑鐮斿彂鍜岃繍缁磋繍钀ユ晥鐜囥 + +閭d箞閫氳繃浠涔堟牱鐨勬満鍒讹紝濡備綍鏉ユ秷闄ゅ紑鍙戝拰杩愮淮涔嬮棿鐨勫埄鐩婂啿绐侊紝濡備綍鎻愬崌鏁堢巼鏄垜浠湪瀹炴柦DevOps涔嬪墠鎴栬呭疄鏂借繃绋嬩腑闇瑕佽鐪熸濊冪殑闂銆 + +Google SRE瀹炶返缁欐垜浠簡寰堝ソ鐨勮繍缁撮樁娈电殑DevOps瀹炴柦鍚ず銆**杩愮淮杩樻槸闇瑕佷笓鑱屽仛杩愮淮锛岃屼笖姣斾紶缁熻繍缁村仛鐨勬洿澶氥**杩愮淮浜哄憳闇瑕佸鑷繁杩愮淮鐨勭幆澧冦佸伐鍏枫佹祦绋嬨佽祫婧愮瓑鏈夋繁鍏ョ殑鐞嗚В鍜岃璇嗭紝鑳界嫭绔嬪紑鍙戣繍缁村伐鍏凤紝鐙珛瀹炵幇杩愮淮鐨勮嚜鍔ㄥ寲銆佹櫤鑳藉寲銆侀珮鍙敤銆佺ǔ瀹氭с佸畨鍏ㄦх瓑瑕佹眰銆傛敮鎾戝簲鐢ㄧ殑杩愮淮鍜岃繍钀ャ傝繖灏变娇杩愮淮鎴愪负浜嗕竴涓湁鏈虹殑灏忛棴鐜紝鍖呮嫭浜嗚繍缁村伐鍏枫佹祦绋嬬瓑鐨勯渶姹傘佽璁°佸紑鍙戙佹祴璇曘侀儴缃层佽繍钀ャ佸弽棣堛佹敼杩涚瓑瀹屾暣鐢熷懡鍛ㄦ湡杩囩▼銆傝繖鍜屼笟鍔″簲鐢ㄧ殑寮鍙戝拰杩愮淮杩愯惀鏄笉鍚屽眰娆$殑銆**SRE鐨勫伐浣滃湪鎻愬崌杩愮淮鏁堢巼鐨勫悓鏃朵篃寰堝ソ鐨勬敮鎾戜簡涓氬姟搴旂敤鐨勮繍缁磋繍钀ユ晥鐜囥** + +SRE渚ч噸浜嶥evOps鐨凮ps杩愮淮闃舵銆侱evOps鐨凞ev寮鍙戦樁娈靛寘鎷渶姹傘佽璁°佺紪鐮併佹祴璇曘侀儴缃茬瓑杩囩▼銆傚紑鍙戦樁娈靛垯寮鸿皟鎸佺画寮鍙戙佹寔缁儴缃叉垨鎸佺画寮鍙戙佹寔缁氦浠橈紝寮鸿皟鏁忔嵎寮鍙戙傜洰鐨勮繕鍦ㄤ簬鎻愰珮鏁堢巼銆傜幆澧冪殑鏁忔嵎鍑嗗銆佺幆澧冪殑涓鑷存ф槸Dev闃舵楂樻晥鐨勯噸瑕佸熀纭銆 + +**浼犵粺寮鍙戙佹祴璇曘乁AT绛夌幆澧冮兘鏄敱寮鍙戜汉鍛樿嚜宸辨潵缁存姢銆傝繖涔熷鑷翠簡寰寰鍜岀敓浜х幆澧冧笉涓鑷达紝鎵浠ュ湪鐢熶骇閮ㄧ讲鏃跺彲鑳戒細瀛樺湪寰堝鎰忓悜涓嶅埌鐨勯棶棰樸傚洜姝ゅ湪DevOps瀹炶返涓紝鐜鐨勮繍缁翠竴瀹氳浜ょ敱杩愮淮浜哄憳缁熶竴鏉ョ淮鎶わ紝寮鍙戜汉鍛樺彧鏄娇鐢ㄧ幆澧冭屼笉杩愮淮鐜銆** + +**璋佹湁鏉冮檺浣跨敤鐜璋佹病鏈夋潈闄愪娇鐢ㄧ幆澧冭繖鍙堟秹鍙婂埌浜咲evOps涓殑缁熶竴鏉冮檺绠$悊鍜岀粺涓璁よ瘉绠$悊閮ㄥ垎銆**缁熶竴鏉冮檺鍜岃璇佺鐞嗗彲浠ヤ綔涓轰紒涓氱殑鎶鏈腑鍙版湇鍔$敱鎶鏈腑鍙拌繍缁村洟闃熸潵缁熶竴杩愮淮杩愯惀銆備负浼佷笟鍐呭鐢ㄦ埛鎻愪緵璁よ瘉鍜屾潈闄愭湇鍔°傚悇涓幆澧冧娇鐢ㄦ妧鏈腑鍙扮殑缁熶竴璁よ瘉鏉冮檺骞冲彴鐨勬湇鍔℃潵瀹屾垚璁よ瘉鍜屾潈闄愮鎺э紝涔熼伩鍏嶄簡閲嶅鐨勬姇鍏ュ拰寤鸿銆傚紑鍙戜汉鍛樺彧闇瑕佺敤鑷繁鐨勮处鍙烽殢鏃剁櫥褰曚笉鍚岀殑鐜鏉ュ畬鎴愯嚜宸辩殑宸ヤ綔銆傝繖鍏跺疄灏辨槸PaaS鐨勭悊蹇点傚綋鐒讹紝浣犱篃鍙互鍦ㄤ紒涓氬唴閮ㄥ疄鐜板崟鐐圭櫥褰曪紝涓娆$櫥褰曪紝鍙互鍦ㄦ嫢鏈夋潈闄愮殑涓嶅悓鐜涔嬮棿鍒囨崲鏉ュ畬鎴愬伐浣溿傝繖浜涙槸DevOps鐨勫熀纭宸ヤ綔銆傜湅浼兼病鏈夊叧绯伙紝鍗村甫鏉ュ畬鍏ㄤ笉鍚岀殑鏁堟灉銆 + +*CG: 寮鍙戙佽繍缁寸殑鏉冮檺杈圭晫鍦ㄥ摢閲岋紵* + +**鐜涓鑷存у彲浠ョ畝鍗曠殑閫氳繃瀹瑰櫒鍖栨潵瀹炵幇銆**浣嗗鍣ㄧ幆澧冨彧鑳借揪鍒扮浉瀵逛竴鑷存э紝骞朵笉鑳藉疄鐜板畬鍏ㄤ竴鑷存с傚鍣ㄨ繍琛屽湪涓嶅悓閰嶇疆鐨勫涓绘満鎴栬櫄鎷熷寲鑺傜偣涓婏紝閮戒細甯︽潵涓瀹氱殑宸紓銆傛墍浠ヤ綘涔熷彲鑳界粡甯镐細閬囧埌鍦ㄦ煇涓妭鐐规ц兘寰堥珮锛岃屾煇涓椂鍒昏縼绉诲埌鍙﹀涓涓妭鐐规ц兘鍗翠笉濡傞鏈熴 + +鐜鐨勬晱鎹峰噯澶囧垯鏄竴涓浉瀵逛笉瀹规槗鐨勫伐浣溿備紶缁熺爺鍙戣繃绋嬩腑閫氬父寰堝鏃堕棿閮芥槸鑺卞湪鐜鍑嗗涓娿備笉绠℃槸鍚﹂噰鐢ㄥ鍣ㄥ寲锛岃繖鍧楃殑鏁堢巼閮芥槸闇瑕佽冭檻鎻愬崌鐨勩傚湪寮鍙戦樁娈垫秹鍙婄殑娴佺▼鍜屽伐浣滀篃姣旇緝澶氥傛瘮濡傚紑鍙戠幆澧冨噯澶囥佹祴璇曠幆澧冪殑鍑嗗銆佹祴璇曟暟鎹殑鍑嗗銆佹祴璇曠敤渚嬬殑鑷姩鏋勫缓銆佹祴璇曠己闄风殑鑷姩璁板綍绛夈傝屼笖杩欓儴鍒嗗伐浣滃彲浠ラ氳繃鐩稿簲鐨勫伐鍏峰疄鐜版晱鎹疯兘鍔涳紝灏藉彲鑳戒娇宸ュ叿鍜屾祦绋嬫爣鍑嗗寲锛岃繖鏍峰氨鍙互瀹炵幇鑷姩鍖栵紝灏辫兘鏇村揩鐨勬彁鍗囨晥鐜囥 + +*CG: alpha/beta 娴嬭瘯鐜鐨勫噯澶囪皝璐熻矗锛* + +鑰岃蒋浠剁紪鐮佺殑鏍囧噯鍖栫▼搴︿篃鐩稿灏辨瘮杈冧綆锛屽線寰渚濊禆浜庡紑鍙戜汉鍛樼殑涓汉鑳藉姏鍜屾佸害銆傝蒋浠剁爺鍙戝叾瀹炶川鏄櫤鍔涙姇璧勶紝涓嶅悓鐨勪汉甯︽潵鐨勬晥鏋滃畬鍏ㄦ槸涓嶄竴鏍风殑銆**鎵浠ュ緢澶氭兂浠ュ鍖呯殑鏂瑰紡瀹炵幇鑷湁杞欢鐨勮嚜涓诲彲鎺у熀鏈笂鏄笉鐜板疄鐨勩** + +寮鍙戦樁娈垫渶缁堥渶瑕佷氦浠樻爣鍑嗗寲浜や粯浠讹紝涓嶇鏄鍣ㄩ暅鍍忋佹垨鏄痡ar銆亀ar銆乪xe鏂囦欢绛夛紝杩欎簺鏂囦欢闇瑕佺粺涓绠$悊璧锋潵锛岄暅鍍忓彲浠ョ敤闀滃儚浠撳簱锛宩ar绛夊彲浠ラ氳繃閰嶇疆绠$悊宸ュ叿绛夌粺涓鏉ョ鐞嗭紝鑰岄儴缃插垯鍙互瀹炵幇鑷姩鍖栵紝涓嶇浣跨敤鑷姩鍖栬剼鏈垨鑰呰嚜鍔ㄥ寲宸ュ叿锛屼互鍑忓皯閮ㄧ讲闂鍜屾彁鍗囨晥鐜囷紝鏀寔**鎸佺画閮ㄧ讲**鐨勮兘鍔涖 + +鎴戜滑鍦ㄣ婂鍣ㄤ簯骞冲彴杩愮淮鏋舵瀯璁捐銆嬩篃娓呮鍦拌В閲婁簡寮鍙戝拰杩愮淮涔嬮棿鐨勬爣鍑嗗寲浜や粯鐜妭銆傝繖鏄噺灏戝紑鍙戝拰杩愮淮涔嬮棿娌熼氭垚鏈拰鎻愬崌鏁堢巼鐨勯噸瑕佹満鍒躲傚鏋滀娇鐢ㄥ鍣紝闀滃儚鍜岄暅鍍忎粨搴撳皢鍏呭綋杩欐牱鐨勪竴涓爣鍑嗗寲浜や粯浠跺拰鏍囧噯鍖栦氦浠樼鐞嗗獟浠嬨傚畠鍙互寰堝ソ鐨勫垝鍒嗗拰鏈夋晥杩炴帴寮鍙戙佹祴璇曘乁AT銆佺敓浜ц繍缁寸瓑搴旂敤鐢熷懡鍛ㄦ湡闃舵銆 + +鍙﹀鎴戜滑鐭ラ亾DevOps寰堥噸瑕佺殑鏄褰㈡垚闂幆銆傝繍缁磋繍钀ュ寮鍙戠殑鍙嶉鏄潪甯搁噸瑕佺殑锛屼笉浠呬粎鏄痓ug鍜岀己闄风殑鍙嶉淇锛屽寘鎷敤鎴蜂綋楠岀瓑閮芥槸寰堥噸瑕佺殑鍐呭銆傝繖灏遍渶瑕佸悎鐞嗗悎閫傜殑鍙嶉鏈哄埗鍜屾祦绋嬨傛棦鍖呮嫭鎶鏈殑锛屼篃鍖呮嫭闈炴妧鏈殑鍥犵礌銆 + +鎵浠ユí鍚戜笂鎴戜滑鍙互绠鍗曠殑鐪嬩綔鏄紑鍙戙佹爣鍑嗗寲浜や粯鍜岃繍缁寸殑鍒掑垎锛屾爣鍑嗗寲浜や粯灏卞儚鏄汉鐨勫叧鑺傦紝璧峰埌娑︽粦鍜屽脊鎬т几寮犵殑浣滅敤锛屼娇寮鍙戝拰杩愮淮鎴愪负涓浣撳苟鍏呭垎鍙戞尌鍚勮嚜鐨勪笓涓氫紭鍔裤傝岀旱鍚戜笂锛屽彲浠ラ氳繃鍒嗗眰鏉ュ疄鐜伴珮搴︿笓涓氬寲杩愮淮銆傛渶涓嬪眰鏄熀纭璁炬柦璧勬簮鐨勮繍缁达紝涔嬩笂鏄钩鍙般佸伐鍏枫佺幆澧冪殑杩愮淮锛屽湪杩欎簺骞冲彴銆佸伐鍏枫佺幆澧冧箣涓婃槸涓氬姟搴旂敤鐨勮繍缁淬傛墍鏈夎繖浜涘伐浣滈兘鏄负浜嗕繚璇佷笟鍔¤繍钀ョ殑鍙敤涓庡畨鍏ㄣ傞氳繃涓氬姟杩愯惀鎵嶈兘鏈夋敹鐩娿佹湁鍒╂鼎銆 + +![1_16088294734824786.png](https://i.loli.net/2021/10/25/ujbVGPR71TpBqMO.png) + +浠庡簲鐢ㄦ暣涓敓鍛藉懆鏈熺鐞嗚繃绋嬬湅锛80%鐨勫熀鏈伐浣滃彲鑳芥槸鍦ㄨ繍缁撮樁娈碉紝杩愮淮鐨勪簨椤逛篃姣旇緝澶氾紝浠庢晥鐜囦笂璁诧紝浣垮悇杩愮淮浜嬮」涓撲笟鍖栥佽嚜鍔ㄥ寲鐢氳嚦鏅鸿兘鍖栧垯瀹规槗鎻愬崌鏁堢巼銆傚紑鍙戣繍缁翠竴浣撳寲閲嶇偣鍦ㄤ簬鎻愬崌杩愮淮鐨勬晥鐜囷紝鍖呮嫭搴旂敤銆佺幆澧冦佸钩鍙般佸伐鍏枫佸熀纭璁炬柦璧勬簮绛夈傛湁楂樻晥銆侀珮鍙敤鐨勮繍缁寸幆鑺傝兘鍔涳紝鍒欒兘淇濊瘉涓氬姟搴旂敤鐨勯珮鍙敤涓庣ǔ瀹氭э紝涔熷氨鏄疓oogle SRE鐨凷ite Reliabilities銆傝屽浜庡簲鐢ㄥ紑鍙戜汉鍛橈紝鍗充究鏄嚭鐜版剰澶栨儏鍐碉紝杩愮淮涔熸湁搴斿鎺柦锛屽紑鍙戜汉鍛樺垯鏈夊厖瓒崇殑鏃堕棿杩涜缁嗚嚧鐨勮璁″拰闂澶勭悊锛岃拷姹傛洿绋冲畾銆佸彲闈犮侀珮鏁堢殑鑳藉姏锛屼粠鑰屼娇杩愮淮鏇村鏄撳拰渚垮埄銆 + +寮鍙戣繍缁翠竴浣撳寲杩芥眰寮鍙戝拰杩愮淮鐨勫埄鐩婁竴鑷达紝鑰屼笉鏄竴涓汉鏃㈠仛寮鍙戜篃鍋氳繍缁淬傝繖闇瑕侀氳繃涓瀹氱殑鏈哄埗鍜屽熷姪鐩稿簲鐨勫伐鍏风瓑鏉ヤ繚璇侊紝浣垮紑鍙戝拰杩愮淮涔嬮棿鑳藉鏈夋椿鍔ㄥ叧鑺傘佹湁娑︽粦鍓傘傝繖搴旇鏄垜浠湪鏋勫缓DevOps鐨勬椂鍊欓渶瑕佽鐪熻冭檻瀹炵幇鐨勬牳蹇冨唴瀹广 + + + +## references +- [鐚叓鎴掔綉DevOps瀹瑰櫒浜戜笌娴佹按绾縘(http://dockone.io/article/8384) +- [涓囪揪缃戠粶绉戞妧鐨凞evOps骞冲彴鏋舵瀯瑙f瀽](https://cloud.tencent.com/developer/article/1080141) +- [DevOps涔嬪钩鍙版灦鏋刔(https://www.cnblogs.com/cdani/p/7642386.html) +- [娴佹按绾2.0椹卞姩 CD/DevOps](https://cloud.tencent.com/developer/article/1035432) +- [搴﹂噺椹卞姩鐨凞evOps杞瀷 ](https://www.sohu.com/a/124936190_468741) +- [淇濋殰pipeline鑴氭湰鍦╠evops涓垚鍔熷簲鐢ㄧ殑鍥涘ぇ鏍稿績鐐筣(https://blog.csdn.net/liwenxiang629/article/details/120762790) +- [DevOps鑳戒负鍊嶅璁″垝鍋氱偣鍟?](https://www.aisoutu.com/a/18920) +- [楂橀氶噺浣庡欢杩熺殑浜戠幆澧冨ぇ鏁版嵁娴佹按绾挎灦鏋刔(https://www.infoq.cn/article/myKdXcvOtTTLtOmZTe3s?utm_source=rss&utm_medium=article) +- [Devops 钀藉湴鐨勬牳蹇冨拰13鏉$粡楠屾荤粨](http://info.dns110.com/321101.html) +- []() + diff --git a/devops_blameless.md b/devops_blameless.md new file mode 100644 index 0000000..73f850c --- /dev/null +++ b/devops_blameless.md @@ -0,0 +1,28 @@ + +2020/3/3 +鍏充簬devops鏃犻棶璐f枃鍖 + +鏁呴殰鍒嗘瀽浼氾紝璁ㄨ鍏充簬骞冲彴鏁呴殰鍙婂簲鎬ユ祦绋嬫槸涓嶆槸绗﹀悎瑙勮寖鐨勯棶棰橈紝鎴戜滑鏄繖鏍凤紝鏁呴殰鍙戠敓浼氬鏁呴殰杩涜棰勫垽锛屽鏋滄槸涓夌骇鏁呴殰锛屽嵆鍏ㄥ眬鎬ф渶涓ラ噸鐨勭殑鏁呴殰锛岄偅涔堝氨鍙互杩涜搴旀ユ搷浣滐紝鐩殑鏄涓氬姟鍙敤锛屼篃灏辨槸鈥滃厛鎶㈤氬悗淇鈥濈殑鍘熷垯銆傝鑼冮噷瀵规晠闅滃彂鐢熷埌搴旀ヤ簨浠讹紝鍙婃晠闅滀慨澶嶆椂闂存湁瑕佹眰銆 + +鍥犱负鍒氬垰棰嗗瀵规晠闅滅殑澶勭悊涓嶆弧鎰忥紝涔嬪墠涔熼棶璐d簡鍑犳锛岀敋鑷充篃鎵d簡缁╂晥锛屾墍浠ワ紝杩欎釜鏁呴殰鎶ュ憡鎬庝箞鍐欐瘮杈冮噸瑙嗭紝鍦ㄥ杩囩▼缁熻杩涜鍒嗘瀽涓紝鎴戜滑鍙戠幇杩欎釜澶勭悊鐨勮繃绋嬫湁浜轰负杩熸粸锛屾病鏈夊緢濂界殑鐞嗙敱鍔犱互璇存槑銆 + +鍥犱负鏁呴殰鍙戠敓鏃舵湁涓鐞嗗皬缁勫疄鏃舵矡閫氶棶棰樺強澶勭悊杩囩▼锛岃繖鏃跺欏氨鏈変汉鎻愬嚭鏉ワ紝鏄笉鏄彲浠ュ缓绔嬩竴涓柊璁ㄨ缁勶紝鎶奞A鐨勪汉韪㈠嚭鍘伙紝杩欏綋鐒惰鎴戝惁鍐筹紝鎴戜滑瑕佹竻妤氭晠闅滄荤粨鐨勭洰鐨勬槸浠涔堬紒锛侊紒 +鍝堝搱锛岃繖灏辨槸闂矗鏂囧寲鍜岃川閲忚瀵熸渶缁堢殑蹇呯劧鍚庢灉锛屽洜涓鸿繖绉嶆枃鍖栦笅锛屾垜鍙堟庤兘淇濊瘉涓嬫闃熷憳鐨勮繖绉嶁滆棌鐫鎺栫潃鈥濇墜娈典笉鑳岀潃鎴戣繘琛屽憿銆 + +blame 锛 闂鍙戠敓 -> 鐢╅攨锛岀瀿鎶 -> 淇℃伅銆佺壒鍒槸闂涓嶉忔槑 -> 鍘熷洜涓嶆槑 -> 闂绉疮 -> 娆犲猴紝闆嗕腑鐖嗗彂锛屽悇鎵棬鍓嶉洩锛屽畼鍍氭枃鍖 + +blameless 锛氶棶棰樺彂鐢 -> 鍙嶉 -> 瑙e喅 -> 鎬荤粨 -> 鎻愬崌锛岄潪甯哥鍚圥DCA鐜簿鐩婄殑鏂规硶璁哄晩 + +devops涔嬫墍浠ュ己璋僢lameless锛屽洜涓篵lameless鐨勭‘鏄熀纭锛屼笉鍏夋槸璁╅棶棰樼畝鍗曞寲锛岃鍥㈤槦鏇寸Н鏋侊紙鑰屼笉鏄鍥㈤槦鑳嗘垬蹇冩儕锛屽皬蹇冪考缈硷紝杩欐槸鍒涙柊鐨勫ぇ鏁岋紝鎵璋撳垱鏂版湁鏃跺欏氨鏄竴绉嶅皬鑼冨洿鐨勮瘯閿欙紝鍚堣鐨勫墠鎻愪笅榧撳姳璇曢敊锛夛紱鍏舵鏄痓lameless鏄鏋滄湁闂閭e氨璁╅棶棰樺敖鏃╁嚭鐜扮殑devops鍙︿竴鍘熷垯锛宖ail fast锛涘啀鑰咃紝blameless璁╅棶棰樺強鏃跺弽棣堬紝绗﹀悎鍚戜笂娓搁潬鎷㈢殑鍘熷垯銆 + +娌℃湁blame锛屼笉楠備汉锛岄瀵兼绘槸鎷呭績娌℃湁闇囨厬鍔涳紝搴曚笅浜轰笉鑳藉ソ濂藉共娲伙紝鍏稿瀷涓撳埗鏀垮簻鍨嬫濈淮锛屽畼鍍氭枃鍖 + +閭d箞锛岄棶棰樻槸锛屾嵁鎴戞墍鐭ワ紝blame鏄緢澶氱粍缁囬瀵奸┍鍔ㄦ墽琛屽姏鐨勬墜娈碉紝blameless涓嶆槸鑷簾姝﹀姛锛 +涓轰粈涔堟斂搴滃己璋冮棶璐o紝涓浗鏀垮簻闂矗鍒舵槸寰堝帀瀹崇殑锛岀敋鑷虫槸缁堢敓闂矗锛岀鍚庣畻璐﹂兘涓嶉矞瑙侊紝鏈杩戞柊鍐犵柅鎯咃紝鍏夋姹夊氨宸茬粡[闂矗澶勭悊654浜猴紝娑夊眬绾у共閮10浜篯(https://www.jiemian.com/article/4051360_foxit.html)锛岃繖涓櫎浜嗕腑鍥藉巻鍙插巻鏉ョ殑杩愬姩寮忔不鐞嗙殑闇瑕侊紝鍙︿竴涓噸瑕佸師鍥犲氨鏄繚鎸佷腑澶潈濞佸拰鎵ц鍔涚殑闇瑕侊紝纭繚涓ぎ缁濆鑳藉鎸囨尌鍦版柟銆傝繖灏辫窡涓涓粍缁囩殑鐩爣鏈夊叧绯伙紝鏀垮簻鐨勭洰鏍囧畯瑙備笂涓瀹氭槸缁熶竴鍘嬪掍竴鍒囷紝绋冲畾鍘嬪掍竴鍒囷紝鏀垮簻灞炴у帇鍊掍竴鍒囷紝鑰岃繖涓鍒囩殑鍩虹灏辩粷瀵规潈濞侊紝鍦ㄨ繖涓洰鏍囦笅锛屽繀椤婚棶璐o紝娌℃湁鏈轰細闂矗锛岀敋鑷冲彲浠ュ垱閫犳満浼氶棶璐o紝姣斿鍒橀偊鑳″叞妗堬紝涔鹃殕鍙瓊妗堬紝鏂囬潻銆傜粡娴庡拰绉戞妧棰嗗煙褰撶劧涓嶆槸绋冲畾鍘嬪掍竴鍒囦簡锛岀ǔ瀹氳繃搴﹀氨鏄帇鍒跺垱鏂帮紝鎵撳帇杩涙鍜屽帇鍒跺彂灞曪紝杩欏氨鏄负浠涔堟斂搴滈儴闂ㄢ滀竴绠″氨姝烩濈殑鍘熷洜鍚с +閭d箞浼佷笟鍛紵 + + +--- +if you can not measure it , you can not manage it +- 绠$悊澶у笀 褰煎緱寰烽瞾鍏 +--- diff --git a/devopscertificate.md b/devopscertificate.md new file mode 100644 index 0000000..75a5fad --- /dev/null +++ b/devopscertificate.md @@ -0,0 +1,179 @@ +# devops master certificate + +1. 楠屾敹娴嬭瘯鐨勬渶浣抽夋嫨? Happy Path +2. 鍒涘缓鍙墽琛屾枃浠剁殑宸ュ叿鏄竴绉嶄粈涔堟牱鐨勬瀯寤哄伐鍏? Make, 闈㈠悜浜у搧 +3. 涓鍑洪棶棰樺氨楠傚鍖: 鍔犲己鍗忎綔, 涓嶆寚璐. +4. 鍛婅瘔鑰佹澘Devops鑳藉甫鏉ュ摢浜涙晥鏋: 蹇熷彂甯, 闄嶄綆鎴愭湰, 鐩存帴鏀寔涓氬姟浜у嚭 +5. DevOps寮濮嬫椂瑕佸仛浠涔? 鎰挎櫙, 鐩爣. +6. Devops鍥㈤槦鐨勬垚鍛? 6-8浜, Cross function 璺ㄨ亴鑳 +7. 绱фュ彉鏇存墦琛ヤ竵? RFC 鐢宠鍙樻洿, 鍒嗘瀽褰卞搷, 閫氱煡鍒╃泭鐩稿叧鏂 +8. 浜戣绠楃殑鍝釜鐗规ц兘瀹炵幇鑷姩閮ㄧ讲? 鏍囧噯鏍 +9. 浜戠殑鍝釜鐗规т笉璁╀汉鏀惧績鎯充笂浜? 瀹夊叏, 鏈嶅姟绾у埆(SLA) +10. 鍝釜涓嶆槸瀹炵幇鑹ソ閰嶇疆绠$悊鐨勭瓥鐣?涓嶈兘鎶婁簩杩涘埗鏀惧埌閰嶇疆绠$悊涓 +11. 浠涔堟槸绠$悊鍩虹璁炬柦鐨勫師鍒? 鍘熷垯鏄悗闈釜鑷姩鍖, 鐗堟湰鎺у埗, 鐩戞帶 +12. 浠涔堟槸鏋勫缓渚濊禆, 浠涔堟槸杩愯渚濊禆? 缂栬瘧鏄瀯寤轰緷璧 +13. 鎵嬪姩杞欢鍙戝竷杩囩▼鐨勪紭鐐? 鍔犲己鍗忎綔, 鍔犲己Review +14. 浠涔堜笉鏄儴缃茬閬撶殑涓閮ㄥ垎? +15. 涓涓柊鐗堟湰姣忎笁涓湀鍙戝竷涓娆℃槸Devops瀹炶返? 杩唬涓杩涜澧為噺鍙戝竷 +16. 涓轰粈涔圫LA瀵瑰鎴峰姝ら噸瑕? 瀵瑰鎴锋湁浠峰 +17. 鍙戠敓鏁呴殰鏄熀纭璁炬柦閲嶅缓? 鑷姩鍖栨彁渚涜嚜鍔ㄥ寲杩愮淮 +18. SOR? 鍗忎綔鍨 +19. 鍚戝叾浠栧悓浜嬫姳鎬ㄤ笉鐩存帴鍙戠敓鍐茬獊? 閬垮厤/鍥為伩 +20. DevOps Mindset? 闈炶按璐, 楂樻晥, 浜插拰 +21. 浠涔堟槸鍗忎綔? 澶氫汉鏍规嵁杈撳叆杈炬垚鍏卞悓鐨勮緭鍑 +22. 浠涔堟槸浜插拰? 涓嶅悓缇や綋 +23. 濡備綍浣緿evops鏇村姞鎴愮啛? 鎴存槑鐜, KAIZEN, 鍙鍖栨帶鍒跺拰鍙鍖栫鐞. +24. Devops鏂囧寲杞彉鍖呭惈浠涔? 鏂板拰, 鍗忓拰, 楂樺害淇′换, 鍚岀悊蹇, 涓嶈按璐, 鍗曚欢娴 +25. 椤圭洰鍦―evOps涓彇寰楁垚鍔熷繀椤绘敼鍙樹粈涔? Mindset, 鍗冧竾涓嶈閫夊伐鍏 +26. 閲嶅鍙潬鏄寚浠涔堣繃绋? Release +27. Devops鍙嶆ā寮? 鎵嬪伐鍙戝竷, 寮鍙戝畬鍚庢墠閮ㄧ讲 +28. 杩唬鏃堕棿鍜岄娆″彇鍐充簬浠涔? 涓氬姟闇姹 +29. 鎸佺画閮ㄧ讲鐨勪紭鐐? 鎬ц兘鍜屼竴鑷存т笉鐩稿啿绐 +30. Obeya浣滄垬绯荤粺? 鍏变韩淇℃伅, 蹇熷喅绛 +31. CI鐨勫ソ澶? 鏇村皯鐨凚ug, 鏇翠綆鐨勬垚鏈, 鏇村揩鍙戠幇Bug +32. 鏃㈣兘淇濊瘉璐ㄩ噺鍙堣兘鎻愰珮鍙戝竷鏁堢巼?鍗曚欢娴 +33. 鏋勫缓澶辫触鏃跺簲璇ユ庝箞瑙e喅? 璋佹彁浜ゅけ璐ヨ皝璐熻矗淇o + +--- +DevOps鐧界毊涔 +绗1閮ㄥ垎:A journey to DevOps The DevOps framework should support business outcomes directly銆 + +绗2閮ㄥ垎:What is DevOps for the enterprise system? DevOps can also enable maturity by using W.E. Deming鈥檚 Plan Do-Check-Act cycle. + +绗4閮ㄥ垎DevOps Body of Knowledge:绗洓鑺俆PS (Lean) concept as foundation :Building a stream-lined supply chain of IT services is difficult because there are many items and it is necessary to change your mindset from the familiar existing development cycle and its methodologies.(JIT means building up a stream-lined supply chain with one-piece +flow.) + +绗4閮ㄥ垎 DevOps Body of Knowledge:IT service management Service on just providing quick and frequent IT services and reliable operation and is led by the service master. It is most suited for SoE and SoR continuity is an essential part of the warranty (fitness for purpose) of a service. If service continuity cannot be maintained and/or restored in accordance with the requirements of the business, then the business will not experience the value that has been promised. Without continuity, the utility (fitness for use) of the service cannot be accessed. + +绗 5 绔犺鑹茶亴璐: Leads the team and facilitates, this role is the same as 鈥淪crum Master鈥 in Scrum.Implements visual control across the entire process and has a strong focus on establishing a stream-lined process with one-piece flow. + +绗5閮ㄥ垎:DevOps Team Roles (Leads the team and facilitates, this role is the same as 鈥淪crum Master鈥 in Scrum. Implements visual control across the entire process and has a strong focus on establishing a stream-lined process with one-piece flow.) + +绗5閮ㄥ垎:Gatekeeper / Release coordinator: Responsible for monitoring the operational status and progress of the next release of the IT service. Make go/no go decisions about deployment according to criteria including security, compliance, regulatory requirements, maturity of operation team and their process views. + +绗7閮ㄥ垎:DevOps Process Project Planning The service master creates the vision, goal, and value of the project, and then puts together the DevOps team members. + +绗 7 绔 JKK 瑙i噴锛氬畠鍩轰簬 100锛呭畬鎴愰珮璐ㄩ噺椤圭洰鍒涘缓瀹屾垚瀹氫箟 + +绗7閮ㄥ垎:DevOps Process Obeya is a war room which serves two purposes - information management and on-the-spot decision making. + +绗8閮ㄥ垎 DevOps implementation Collaboration: (Standard): This focuses on just providing quick and frequent IT services and reliable operation and is led by the service master. It is most suited for SoE and SoR + +DEVOPS鍥㈤槦鐢 6-8 鍚嶆垚鍛樼粍鎴愮殑璺ㄨ亴鑳藉洟闃熴 + +The Service Master EOL + +绮剧泭绠$悊涓殑鍏ぇ娴垂绫诲瀷 + +鎸佺画浜や粯绗11绔犲熀纭璁炬柦鍜岀幆澧冪鐞 225椤碉細鑷姩鍖栫殑鍑嗗宸ヤ綔涓庤嚜鍔ㄥ寲缁存姢鐩哥粨鍚堬紝鍙繚璇佸嚭鐜伴棶棰樺氨鑳藉湪鍙瑙佺殑鏃堕棿鍐呴噸寤哄熀纭璁炬柦銆 + +鎸佺画浜や粯绗11绔 11.7.2绔犺妭 铏氭嫙鐜鍜岄儴缃叉祦姘寸嚎銆250椤 鏋勫缓鍜屽彂甯冪鐞嗙郴缁熷簲璇ヨ兘璁颁綇鐢ㄦ潵杩愯閮ㄧ讲娴佹按绾跨殑铏氭嫙鏈烘ā鏉匡紝褰撻儴缃插埌鐢熶骇鐜鏃讹紝涔熷簲璇ヨ兘澶熷惎鍔ㄥ悓涓濂楄櫄鎷熸満妯℃澘銆 + +鎸佺画浜や粯绗洓绔 娴嬭瘯绛栫暐鐨勫疄鐜 71椤靛綋浣犳湁鏃堕棿鍐欐洿澶氱殑鑷姩鍖栨祴璇曟椂锛屽緢闅惧湪Happy Path鍜孲ad Path涔嬮棿杩涜閫夋嫨銆 濡傛灉浣犵殑搴旂敤绋嬪簭姣旇緝绋冲畾锛岄偅涔圚appy Path搴旇鏄綘鐨勯閫夛紝鍥犱负瀹冧滑鏄敤鎴锋墍瀹氫箟鐨勫満鏅 + +鎸佺画浜や粯绗4.3绔犺妭 75椤靛埗瀹氶伒瀹圛NVEST鍘熷垯[鍗崇嫭绔嬬殑锛圛ndependent锛夈佸彲鍗忓晢鐨勶紙Negotiable锛夈佹湁浠 鍊肩殑锛圴aluable锛夈佸彲浼拌鐨勶紙Estimable锛夈佸皬鐨勶紙Small锛変笖鍙祴璇曠殑锛圱estable锛塢 鐨勭敤鎴锋晠浜媅ddVMFH]鍙婅冭檻鍏堕獙鏀舵潯浠躲 + +鎸佺画浜や粯绗15绔 鎸佺画浜や粯绠$悊锛340椤典紒涓氭不鐞嗘洿鍏虫敞浜庣鍚堝害 锛坈onformance锛夛紝鍗抽伒浠庢с佷繚闅溿佺洃绠°佽矗浠诲拰閫忔槑绠$悊锛 鑰屼笟鍔℃不鐞嗭紙business governance锛夋洿鍏虫敞涓氬姟鍜屼环鍊煎垱閫犵殑鎵ц搴︼紙performance锛夈傚叾瀹烇紝鎵ц搴﹀拰绗 鍚堝害閮藉彲浠ユ弧瓒炽傝繖涓閬撶悊鍦ㄦ寔缁氦浠樹腑涔熸槸姝g‘鐨勩傞氳繃纭繚浜や粯鍥㈤槦鑳藉緱鍒板簲鐢 绋嬪簭鍦ㄧ被鐢熶骇鐜涓婄殑涓嶆柇鍙嶉锛 鏄儴缃叉祦姘寸嚎杈炬垚鈥滄墽琛屽害鈥濊繖涓洰鏍囩殑鏂规硶鍜屾墜娈点傞儴缃叉祦姘寸嚎浣夸氦浠樻祦绋嬫洿鍔犻忔槑锛屾潵甯姪鍥㈤槦杈炬垚绗﹀悎搴 + +鎸佺画浜や粯 5.4 鎻愪氦闃舵 97椤 + +15.3绔犺妭 344椤碉細鎴戜滑鐨勫叧娉ㄧ偣鍦ㄤ簬杩唬鍜屽閲忎氦浠橈紝浠ュ強璺ㄥ姛鑳借亴璐h鑹蹭箣闂寸殑鍗 浣溿345椤碉細Scrum鏄竴绉嶈凯浠e紡澧為噺杞欢寮鍙戣繃绋嬶紝閫氬父鐢ㄤ簬鏁忔嵎杞欢寮鍙戙傚寘鎷竴绯诲垪 瀹炶返鍜岄瀹氫箟瑙掕壊鐨勮繃绋嬫鏋躲347椤 寮鍙戜笌鍙戝竷锛氭垜浠帹鑽愪互杩唬澧為噺寮忚繃绋嬭繘琛岃蒋浠 鐨勫紑鍙戜笌鍙戝竷銆 + +绗3绔 鎸佺画闆嗘垚 44椤 楂樻晥浣跨敤鎸佺画闆嗘垚 鐨勯偅浜涘洟闃熻兘澶熸瘮閭d簺娌℃湁浣跨敤瀹冪殑鍥㈤槦鏇 蹇湴浜や粯杞欢锛屼笖缂洪櫡鏇村皯銆傚湪浜や粯杩囩▼ 涓紝缂洪櫡琚彂鐜板緱瓒婃棭锛屼慨澶嶅畠鐨勬垚鏈氨瓒婁綆锛 鍥犳涔熷氨澶уぇ鑺傜渷浜嗘垚鏈拰鏃堕棿銆傚洜 姝ゆ垜浠涓猴紝瀵逛簬涓撲笟鐨勮蒋浠朵氦浠樺洟闃熸潵璇达紝鎸佺画闆嗘垚涓庣増鏈帶鍒跺悓绛夐噸瑕併 + +鎸佺画浜や粯 3.7 绔犺妭 60 椤典粠鎶鏈搴︿笂鐪嬶紝鏈涓虹畝鍗曠殑鏂规硶锛堜篃鏄粠娴佺▼瑙掑害涓婅鏈鏈夋晥鐨勬柟娉曪級灏辨槸浣 鐢ㄥ叡浜殑鐗堟湰鎺у埗绯荤粺鍜屾寔缁泦鎴愮郴缁熴 63 椤 3.8 绔犺妭锛氾紝DVCS 寮曞叆浜嗕竴涓腑闂村眰锛氬湪鏈湴宸ヤ綔鍖虹殑淇敼蹇呴』鍏堟彁浜ゅ埌鏈湴搴擄紝鐒跺悗鎵嶈兘 鎺ㄩ佸埌鍏朵粬浠撳簱锛岃屾洿鏂版湰鍦板伐浣滃尯鏃讹紝蹇呴』鍏堜粠鍏朵粬浠撳簱涓皢浠g爜鏇存柊鍒版湰鍦板簱銆備互鍙 14.4 绔犺妭 + +鎸佺画浜や粯绗簲绔犮備粈涔堜笉鏄儴缃茬閬撶殑涓閮ㄥ垎锛88椤 + +6.2 绔犺妭 鏋勫缓宸ュ叿锛117 椤 鍚勬瀯寤哄伐鍏风殑涓嶅悓鐐瑰湪浜庡畠鏄换鍔″鍚戠殑锛岃繕鏄骇鍝佸鍚戠殑銆備换鍔″鍚戠殑 鏋勫缓宸ュ叿锛堟瘮濡 Ant銆丯Ant 鍜 MSBuild锛変細渚濇嵁涓绯诲垪鐨勪换鍔℃弿杩颁緷璧栫綉缁滐紝 鑰屼骇鍝佸 鍚戠殑宸ュ叿锛屾瘮濡 Make锛堝垱寤哄彲鎵ц鏂囦欢锛夛紝鏄牴鎹畠浠敓鎴愮殑浜х墿锛堟瘮濡備竴涓彲鎵ц鏂囦欢锛夋潵鎻忚堪銆 + +椤圭洰澶辫触锛氳浆鍚戞寔缁儴缃叉ā寮忕殑鏈浣崇涓姝ユ槸浠涔堬紵寮鍙戝簲闈炴寮忓湴娑夊強鏁翠釜椤圭洰鐨勮繍缁达紝骞跺悎浣滃叡鍚屽垱寤洪儴缃茶剼鏈 + +鍝鍋氭硶鏈夊姪浜庡湪涓嶅奖鍝嶈川閲忕殑鎯呭喌涓嬫彁楂橀熷害锛烵ne-piece-flow + +鎵嬪姩杞欢鍙戝竷杩囩▼鐨勪紭鐐规槸浠涔堬紵榧撳姳鍗忎綔锛屽洟闃熸垚鍛樺垯瀹℃煡褰兼鐨勫伐浣溿 + +绗叓绔狅細鑷姩鍖栭獙鏀舵祴璇 154 椤碉細棣栧厛锛岀敱浜庡弽棣堢幆灏 澶уぇ缂╃煭锛岀己闄疯鍙戠幇寰楁洿蹇紝涔熷氨鏇村鏄撲慨澶嶃傚叾娆★紝鐢变簬娴嬭瘯浜哄憳銆佸紑鍙戜汉鍛樺拰 瀹㈡埛闇瑕佺揣瀵嗗悎浣滄墠鑳藉垱寤轰竴涓壇濂界殑鑷姩鍖栨祴璇曞浠讹紝杩欎細淇冭繘浠栦滑涔嬮棿鐨勮壇濂藉悎 浣滐紝鑰屼笖姣忎釜浜洪兘灏嗗叧娉ㄨ蒋浠跺簲璇ヤ氦浠樼殑涓氬姟浠峰笺 + +绗 3 绔狅紝3.5.1 52 椤点53 椤 鎮ㄧ殑鍚屼簨璇达細鈥滃嵆浣挎瀯寤轰腑鏂紝鎮ㄤ篃搴旇Check In銆 + +鑰佹澘闂疄鏂紻evOps锛學hat would not be a good reason? 鍥㈤槦瑙i噴浜嗘柊瀹炶返鍦ㄥ彟涓瀹跺叕鍙镐腑鐨勮繍浣滄柟寮忋 + +8.5.1 楠屾敹娴嬭瘯涓殑鐘舵 p167棣栧厛锛岃鎶靛埗浣跨敤鐢熶骇鏁版嵁鐨勫浠戒綔涓洪獙鏀舵祴璇曠殑娴嬭瘯鏁版嵁搴撶殑璇辨儜锛堝敖绠℃湁鏃 瀹冨鍚炲悙閲忔祴璇曟槸鏈夌敤鐨勶級銆傜浉鍙嶏紝鎴戜滑瑕佺淮鎶や竴涓彈鎺х殑鏁版嵁鏈灏忛泦銆傛祴璇曠殑涓涓叧 閿柟闈㈡槸寤虹珛涓涓‘鐭ョ殑璧峰鐐广傞氳繃鐢熶骇鏁版嵁鐨勫壇鏈互杩涜娴嬭瘯銆 + +12.4 绔犺妭 鏁版嵁搴撳洖婊氬拰鏃犲仠鏈哄彂甯 P268 + +11.9 鍩虹璁炬柦鍜屽簲鐢ㄧ▼搴忕殑鐩戞帶 p257 鏀堕泦鏁版嵁銆佽褰曟棩蹇椼佸缓绔嬩俊鎭睍绀烘澘銆佽涓洪┍鍔ㄧ洃鎺с傛彁鍑轰簡鍥涚鍙兘鐨勬搷浣滄潵鎺掗櫎搴旂敤绋嬪簭鏁呴殰 1,2&4 + +13.5.5 寰幆渚濊禆銆 P302 寰幆渚濊禆鏋勫缓闃舵 + +13.3 渚濊禆 P286 鏋勫缓鏃朵緷璧栦笌杩愯鏃朵緷璧栦箣闂寸殑鍖哄埆濡備笅锛氭瀯寤烘椂渚濊禆浼氬嚭鐜板湪搴旂敤绋嬪簭缂栬瘧鍜岄摼鎺ユ椂锛堝鏋滈渶瑕佺紪璇戝拰閾炬帴鐨勮瘽锛夛紱鑰岃繍琛屾椂渚濊禆浼氬嚭鐜板湪搴旂敤绋嬪簭杩愯骞跺畬鎴愬畠鐨勬煇浜涙搷浣滄椂銆 + +绗 2 绔 閰嶇疆绠$悊 P24 杩涜澧為噺鏇存敼锛屾弧瓒虫垜鎵鍦ㄧ粍缁囩殑鎵鏈夊悎瑙勬ц瀹 + +绗 11 绔 鍩虹璁炬柦绠$悊 P224 绗 11 绔 鍩虹璁炬柦绠$悊 P224 +鍑嗗閮ㄧ讲鐜鐨勮繃绋嬩互鍙婇儴缃蹭箣鍚庡鐜鐨勭鐞嗘槸鏈珷鐨勪富瑕佸唴瀹广傜劧鑰屼负浜嗚兘 澶熷仛鍒拌繖涓鐐癸紝灏辫鍩轰簬涓嬮潰杩欎簺鍘熷垯锛岀敤涓涓暣浣撴柟娉曟潵绠$悊鎵鏈夊熀纭璁炬柦銆 鈶 浣跨敤淇濆瓨浜庣増鏈帶鍒跺簱涓殑閰嶇疆淇℃伅鏉ユ寚瀹氬熀纭璁炬柦鎵澶勭殑鐘舵併 鍩虹璁炬柦搴旇鍏锋湁鑷不鐗规э紝鍗冲畠搴旇鑷姩鍦板皢鑷繁璁惧畾涓烘墍闇鐘舵併 閫氳繃娴嬭瘯璁惧鍜岀洃鎺ф墜娈碉紝搴旇姣忔椂姣忓埢閮借兘鎺屾彙鍩虹璁炬柦鐨勫疄鏃剁姸鍐点 浠涔堜笉鏄鐞嗗熀纭璁炬柦鐨勫師鍒欙紵缂栧啓鏂扮殑閫氱敤鍩虹绠$悊鑴氭湰銆 + +2.2 绔犵増鏈帶鍒 P27 浠涔堜笉琚涓烘槸瀹炵幇閰嶇疆绠$悊杩欎竴鐩爣鐨勬湁鏁堢瓥鐣ワ紵濮嬬粓灏嗕簩杩涘埗鏂囦欢鍜岄厤缃俊鎭繚瀛樺湪涓璧枫 + +11.8.1 P254 Cloud 瀹夊叏鍜屾湇鍔℃按骞 + +11.8.2 浜戜腑骞冲彴 P255 灏嗗簲鐢ㄩ儴缃插埌瀹屽叏鏍囧噯鍖栫殑搴旂敤鏍堜笂锛屽氨鎰忓懗鐫涓嶉渶瑕佹媴蹇冩祴璇曠幆澧冦佽瘯杩愯 鐜鍜岀敓浜х幆澧冪殑閰嶇疆鍜岀淮鎶わ紝涔熶笉闇瑕佹媴蹇冭櫄鎷熸満鏄犲儚鐨勭鐞嗐傛渶鍚庝竴鐐瑰挨鍏舵槸闈╁懡鎬х殑銆傚湪鏈功涓紝鐢ㄤ簡澶ч噺鐨勭瘒骞呮潵璁ㄨ濡備綍鑷姩鍖栦綘鐨勯儴 缃层佹祴璇曞拰鍙戝竷娴佺▼锛屼互鍙婂浣曟惌寤哄拰绠$悊娴嬭瘯鍜岄儴缃茬幆澧冦備簯涓殑鍝釜骞冲彴鐗规ф渶鑳藉疄鐜拌嚜鍔ㄩ儴缃诧紵 Standardized stack + +10.5 绱фヤ慨澶 P216 浠讳綍鎯呭喌涓嬶紝閮戒笉鑳界牬鍧忔祦绋嬨傜揣鎬ヤ慨澶嶇増鏈 涔熻璧板悓鏍风殑鏋勫缓銆侀儴缃层佹祴璇曞拰鍙戝竷娴佺▼锛屼笌鍏朵粬浠g爜鍙樻洿娌′粈涔堝尯鍒傚彂甯 RFC 浣滀负绱фヨˉ涓佸苟閫氱煡鎵鏈夊埄鐩婄浉鍏宠呫 鐒跺悗鏍规嵁 SLA 搴旂敤绱фヨˉ涓併侾216 + +--- +楂樻晥鐨 DevOps 鏂囧寲闇瑕佸叿澶囷細楂樻晥娌熼氾紝鍏辫瘑涓庝俊浠伙紝浜烘у寲鐨勫憳宸ラ厤缃拰璧勬簮 +鍐欎竴浠介」鐩珷绋嬪緢閲嶈锛屼竴璧峰啓椤圭洰鑼冨洿鏈濂界殑鐞嗙敱鏄粈涔堬細纭繚鎵鏈夊洟闃熷鎴愬姛鏈夌潃鐩稿悓鐨勫畾涔 +琛¢噺宸叉壘鍒扮▼搴忛敊璇殑鎬绘暟鏄窡韪」鐩川閲忔渶濂界殑鏂规硶鍚楋細鍏ㄥ眬鑼冨洿鍐呰岄潪灞閮ㄨ繘琛屼紭鍖 +鏈嶅姟绾у埆鍗忚瀵逛笓娉ㄤ簬澧楀姞鍟嗕笟浠峰兼湁鎵甯姪 + +--- +1. 鍦烘櫙锛5 涓湀 h 鍚庘︹︼紝寮鍙戝畬鎴愬悗鎵嶅悜绫荤敓浜х幆澧冮儴缃诧紙鑰冪偣锛屽弽妯″紡锛 +2. 鍦ㄥ彂甯冩祦绋嬩负杞欢鍙戝竷鍒涘缓涓涓彲閲嶅涓斿彲闈犵殑杩囩▼銆傦紙鑰冪偣锛岃蒋浠朵氦浠樺師鍒欙級 +3. DEVOPS 搴旇寤虹珛涓涓 Pull System銆丱ne Piece Flow 鐨 IT Super Chain +4. 寤虹珛 DEVOPS New Mind of All People锛屾祦绋 One Piece Flow +5. 鍦烘櫙锛氫竴瀹跺叕鍙哥敱浜庝緵搴斿晢鐨勮姹傦紝鍙墿涓 5 涓湀鐨勬椂闂村缓绔 DEVOPS 鐨勫洟闃燂紝浠 浠浣曞喅瀹氫粬浠殑杩唬鏃堕棿鍜岄娆★紵 鏍规嵁绗﹀悎涓氬姟瑕佹眰鏉ョ‘瀹 +6. DEVOPS 鍥涗釜鏀煴 Collaboration锛孧ultiple People +7. 瑕佽繘琛 DEVOPS 杞瀷锛孋oach Team 涓殑姣忎竴涓汉锛屽缓绔 Blameless 鐨勬枃鍖 +8. DevOps 杞瀷锛氭矡閫氥佸悓鐞嗗績銆佷汉鍛樺拰璧勬簮 +9. 鍦烘櫙锛欳EO 浠ュ墠鎬绘槸楠備笅闈㈢殑浜猴紝鐜板湪閲囩敤浜 DEVOPS 鏂瑰紡锛屾儏鍐垫湁鎵濂借浆锛屼絾鏄 娌℃湁杈惧埌鐞嗘兂鏁堟灉锛屽簲璇ワ細Trust each Other锛屽缓绔 Blameless 鏂囧寲 +10. 涓涓汉鎶辨ㄥ彟涓涓汉锛岄氳繃閭欢鍒板瀹f壃瀵瑰彟涓涓汉鐨勪笉婊★紝Avoidance +11. Gatekeeper 鐨勮亴璐o細Security銆丆ompliance銆丷egulatory Requirements +12. 娴垂鐨勭被鍨嬶細Extra Feature +13. 鍦 DEVOPS 椤圭洰璁″垝鏃讹紝SLR 鍖呭惈閭d簺鍐呭銆佸畨鍏ㄣ佽繛缁х瓑鍐呭 +14. DEVOPS 椤圭洰寮濮嬫椂瑕佸仛閭d簺宸ヤ綔锛烿ision銆丟oal 绛 +15. SOR 閫傜敤鏈堥偅绉 DEVOPS 鏂瑰紡锛孋ollaboration +16. Obeya锛屼俊鎭叡浜紝鍋氬喅瀹 +17. Auto Provisioning Auto maintenance +18. VM 妯℃澘 +19. SLA 鐨勯噸瑕佹э紝涓氬姟杩炵画鎬 +20. 鍦ㄧǔ瀹氭病鏈夋椂闂寸殑鎯呭喌涓嬭繘琛岋細Happy Path 娴嬭瘯 +21. 鍦烘櫙锛氶攢鍞汉鍛樻彁鍑轰簡涓浜涘垪閿鍞棶棰橈紝杩欎釜鐢ㄦ埛鏁呬簨绗﹀悎 INVEST 鍘熷垯锛熼棶閫夊摢 涓涓細鍙祴璇曟 +22. Development Pipeline 瀵规不鐞嗙殑浣滅敤 +23. 鎻愪氦闃舵闇瑕佸仛浠涔堝伐浣滐紵 +24. 涓涓洟闃熶笁涓湀杩涜涓娆℃柊鐗堟湰鐨勯儴缃诧紝鑰屼笖鏄寜鐓фā鍧楀紑鍙戝拰閮ㄧ讲锛屽洜姝や粬浠 涓轰粬浠殑閲囩敤鐨勬槸 DEVOPS 鐨勬柟娉曪紝閫夐」闂傚拰鍚 +25. 鎸佺画闆嗘垚鐨勪紭鍔 fewer bug銆乧heaper +26. Check In polices +27. Run time Build time +28. 瀹夊叏闂鍑虹幇鍚庯紝濡備綍杩涜绱фュ彉鏇 +29. 璋佸彲浠ュ喅瀹氭湇鍔$粓姝 +30. 鏁版嵁搴撶鐞嗭紝姝ら鏄妧鏈锛屽ぇ姒傚唴瀹规槸瑕佸仛涓涓洖閫鑴氭湰锛屼笖瑕佷繚璇佸師鏈夋暟鎹笉 鑳藉垹闄わ紝浣嗗彲鑳介噸鏋勮〃鍐呭銆 +31. 涓嶄笂浜戠殑鐞嗙敱锛屽畨鍏紝SLA +32. Standardized stack +33. 鎵嬪伐鍙戝竷杞欢鐨勪紭鍔 +34. 鎵嬪伐娴嬭瘯鐨勭被鍨 +35. 鍦烘櫙锛氭煇浜鸿鎻愪氦鏈夐棶棰樼殑浠g爜锛屼笖鎸尟鏈夎瘝璁插埌鎻愪氦鍚庡彲鑳介氳繃鍙樻洿杩涜鏇存銆 +36. 寰幆渚濊禆 +37. Ensures performance (fast delivery) and conformance (to requirements +38. 涓嶈灏嗙敓浜ф暟鎹簱鎷垮埌娴嬭瘯鐜 +39. JKK 100%璐ㄩ噺瑕嗙洊 +40. 鐗堟湰鎺у埗锛屽反榛庯紝浼︽暒锛屾倝灏硷紝杩樻湁鍏朵粬鍦版柟瀛樺湪鏃跺樊锛屽浣曡繘琛岀増鏈帶鍒 +41. 鍩虹鏋舵瀯鐜鍑嗗 +42. Cross Function 鐨 6-8 浜 +43. 涓嶈鎶婁簩杩涘埗鏂囦欢鏀捐繘鏋勪欢搴撲腑 +44. Make such as an Executable +45. Product Oriented +46. Process Master 鐨勮亴璐o紝寤虹珛鍙鍖栫湅鏉匡紝鍗曚欢娴佺瓑 +47. 閰嶇疆绠$悊绛栫暐锛屽閲忥紝鍚堣 +48. Increase speed without compromising quality diff --git a/devopsmaster璇佷功.md b/devopsmaster璇佷功.md new file mode 100644 index 0000000..1f9022a --- /dev/null +++ b/devopsmaster璇佷功.md @@ -0,0 +1,7 @@ + +# devops master certificate + +## 鎴戠殑devops master璇佷功 +![devops鎴愮哗.png](https://i.loli.net/2020/09/06/fIbFGrNPsow9YUJ.png) +![devops鎴愮哗鍒嗘瀽.png](https://i.loli.net/2020/09/06/6BFKTwjcumv8gDS.png) + diff --git a/devopssummary.md b/devopssummary.md new file mode 100644 index 0000000..6f9c692 --- /dev/null +++ b/devopssummary.md @@ -0,0 +1,116 @@ + +# devops master summary + +- 鏄粈涔堬紵鏂囧寲锛 +- devops瀹炶返锛 +- devops宸ュ叿锛 +- 浠峰兼祦鍏蜂綋鍖栥佸彲瑙嗗寲锛 +- 闇姹傛媶鍒嗘妧鏈紵 +- BA QA/Tester Dev - BDD鎶鏈紵 +- 璋佸喅瀹氳兘涓嶈兘涓婄嚎锛 + + +# 瑕佺偣 +1. DevOps Mindset? **闈炶按璐**, 楂樻晥, 浜插拰 +1. Devops鏂囧寲杞彉鍖呭惈? 浜插拰, 鍗忎綔, 淇′换, 鍚岀悊蹇, 涓嶈按璐, **鍗曚欢娴** **Trust each Other锛孊lameless** +1. DevOps鏂规硶璁: PDCA锛孠AIZEN锛屽彲瑙嗗寲鎺у埗&绠$悊锛坥beya浣滄垬瀹わ細鍏变韩淇℃伅, 蹇熷喅绛栵級 +1. 鑱氱劍杞欢浜や粯鐨勪笟鍔′环鍊硷紙鎸佺画銆侀『鐣呫侀珮璐ㄩ噺浜や粯鏈夋晥浠峰硷級 +1. 鍒涘缓涓涓**鎷夊紡閮ㄧ讲娴佹按绾** +1. 璐ㄩ噺鍐呭缓 + 闈㈠悜涓婃父锛堜粠Ops鍒癉ev锛 + **浜轰汉瀵硅川閲忚礋璐** +1. 閮ㄧ讲鑴氭湰锛氫娇鐢ㄥ悓鏍风殑閮ㄧ讲鑴氭湰鍦ㄤ笉鍚岀幆澧冧腑閮ㄧ讲锛岀‘淇濋儴缃叉祦绋嬪箓绛夋 +1. 灏芥棭鍙戠幇闂(缂栬瘧閿欒锛屾祴璇曞け璐ワ紝鐜闂璁╂彁浜ゅけ璐) **fail fast fail cheap** +1. 浠讳綍鎯呭喌涓嬶紝閮戒笉鑳界牬鍧忔祦绋嬨傜揣鎬ヤ慨澶嶇増鏈篃瑕佽蛋 鏋勫缓/閮ㄧ讲/娴嬭瘯/鍙戝竷鐨勬祦绋嬶紝涓庡彉鏇存病鍖哄埆 +1. 鍙戝竷锛氳摑缁垮彂甯冿紝閲戜笣闆鍙戝竷, AB娴嬭瘯 +1. 绱фヤ慨澶 or 鍥炴粴 +1. 鍩虹璁炬柦閲嶅缓锛欰uto provisioning - auto maintainance +1. 鍒涘缓**绫荤敓浜х幆澧**锛岀幆澧冮厤缃彉鏇村簲鑳藉瑙﹀彂娴佹按绾 + 纭繚浜や粯鍥㈤槦鑳藉緱鍒板簲鐢ㄧ▼搴忓湪绫荤敓浜х幆澧冧笂鐨勪笉鏂弽棣 +1. 鍒涘缓鐩戞帶绛栫暐锛歝ollect, store, dashboard, log, monitor +1. 浼佷笟娌荤悊锛 + - 绗﹀悎搴(conformance)锛屽悎瑙勬э紝鍏虫敞閬典粠鎬э紝淇濋殰锛岀洃绠★紝璐d换锛岄忔槑绠$悊 + - 鎵ц搴(performance)锛岀哗鏁堬紝鍏虫敞涓氬姟鍜屼环鍊 +1. 楠屾敹娴嬭瘯鐨勬渶浣宠矾寰**happy path** +1. 浜や粯杩囩▼涓紝缂洪櫡琚彂鐜板緱瓒婃棭锛屼慨澶嶅畠鐨勬垚鏈氨瓒婁綆 fail fast +1. **鎷夌伅** + +绱фュ彉鏇翠笉搴旇鎴愪负涓嶈蛋鍙樻洿娴佺▼鐨勭悊鐢 + +#### 绮剧泭8澶ф氮璐 DOWNTIME + +| type | description | 瑙e喅 | +| ---- | ---- | ---- | +| defect | 缂洪櫡 | poka-yake(闃查敊璁捐) | +| overproduction | 杩囧害鐢熶骇 | 鍙鍖栵紝鎷夊姩鐢熶骇 | +| waiting | 绛夊緟 | 璇嗗埆绾︽潫锛屽噺灏戠瓑寰 | +| non-utilized people | 鏈厖鍒嗗埄鐢ㄤ汉鍛 | kaizen锛屽涔犲瀷缁勭粐 | +| transportation | 鎼繍 | 鍗曚欢娴 | +| inventory | 搴撳瓨 | 鍙鍖栵紝鎷夊姩鐢熶骇 | +| motion | 鍔ㄤ綔 | | +| extra processing/feature | 闀閲 | 5why | + +#### 闇姹/鐢ㄦ埛鏁呬簨鍘熷垯 INVEST + +type | x +-- | -- +鐙珛鐨勶紙Independent锛 | 瑙h +渚夸簬娌熼氾紙Negotiable锛 | 鍑忓皯涓庡鎴风瓑鐩稿叧鏂圭殑娌熼氭垚鏈 +鏈変环鍊肩殑锛圴aluable锛 | 瀵瑰鎴锋湁浠峰 +鍙及璁$殑锛圗stimable锛 | 寮鍙戣呬究浜庝及璁″伐浣滈噺 +灏忕殑锛圫mall锛 | 鐭皬鏈変唬琛ㄦэ紝鏁忔嵎杩唬 +鍙祴璇曠殑锛圱estable锛 | 鐢ㄦ埛鏁呬簨宸插畬鎴愮殑鏍囧噯锛屾垨鑰呰鑳藉纭宸插畬鎴 + + +#### 涓汉瀹炶返 + +鍏充簬娴嬭瘯 +1. 绫荤敓浜х幆澧冧綔涓篵eta娴嬭瘯鐜锛屽彲浠ユ槸鏈湴璧勬簮 +2. 鐢熶骇涓妸閮ㄧ讲鍜屽彂甯冭В鑰︼紝鍙戝竷閲囩敤閲戜笣闆鎴栬摑缁匡紝钃濈豢瀵硅祫婧愯姹傚お楂橈紝閲囩敤閲戜笣闆鍙戝竷锛屾祴璇/鏀拺/涓氬姟浜哄憳瀵归噾涓濋泙鍋氬皬鎵归噺楠岃瘉锛屽彧楠岃瘉涓绘祦绋嬶紝鍋氬啋鐑熴傜敤Prometheus鍋歱od鐩戞帶銆 +3. 楠岃瘉鏈夐棶棰橈紝鍒犻櫎鏂扮増鏈琍od锛涢獙璇侀氳繃锛屾柊鐗堟湰Pod鎵╁睍鍒拌佺増鏈祫婧愩 + + +``` +绾︽潫鐐瑰湪鍝噷锛 --> 濡備綍鏀瑰杽绾︽潫鐐癸紵 --> 绐佺牬绾︽潫鐐 --> + ^ | + |__________________________________________________| + +鍙兘绾︽潫鐐 +1. 鐜鎼缓 +2. 浠g爜閮ㄧ讲 +3. 娴嬭瘯鐨勫噯澶囧拰鎵ц + +鐩戣缂洪櫡鍜岄晙閲 + +``` + + +寮鍙戣繍缁粹滀笁姝ュ伐浣滄硶鈥濓紝瀹冩棬鍦ㄩ槓鏄庢寚瀵煎紑鍙戣繍缁寸殑娴佺▼涓庡疄璺电殑浠峰艰涓庣悊蹇点 + +### 绗竴宸ヤ綔娉 +鏄叧浜庝粠寮鍙戝埌IT杩愮淮鍐嶅埌瀹㈡埛鐨勬暣涓嚜宸﹀悜鍙崇殑宸ヤ綔娴併**涓轰簡浣挎祦閲忔渶澶у寲锛屾垜浠渶瑕佸皬鐨勬壒閲忚妯″拰宸ヤ綔闂撮殧锛岀粷涓嶈缂洪櫡娴佸悜涓嬫父宸ヤ綔涓績**锛屽苟涓斾笉鏂负浜嗘暣浣撶洰鏍囷紙鐩稿浜庡紑鍙戝姛鑳藉畬鎴愮巼銆佹祴璇曞彂鐜/淇姣旂巼鎴栬繍缁存湁鏁堟ф寚鏍囩瓑灞閮ㄧ洰鏍囷級杩涜浼樺寲銆傚繀瑕佺殑鍋氭硶鍖呮嫭鎸佺画鏋勫缓銆侀泦鎴愪互鍙婇儴缃诧紝鎸夐渶鍒涘缓鐜锛屼弗鎺у崐鎴愬搧锛屼互鍙婃瀯寤鸿捣鑳藉椤哄埄鍙樻洿鐨勫畨鍏ㄧ郴缁熷拰缁勭粐銆 + +### 绗簩宸ヤ綔娉 +鏄叧浜庝环鍊兼祦鍚勯樁娈佃嚜鍙冲悜宸︾殑蹇熸寔缁弽棣堟祦锛屾斁澶у叾鏁堢泭浠ョ‘淇濋槻姝㈤棶棰樺啀娆″彂鐢燂紝鎴栬呮洿蹇湴鍙戠幇鍜屼慨澶嶉棶棰樸傝繖鏍凤紝鎴戜滑灏辫兘鍦ㄦ墍闇涔嬪鑾峰彇鎴栧祵鍏ョ煡璇嗭紝浠庢簮澶翠笂淇濊瘉璐ㄩ噺銆 + +鈥滃繀瑕佺殑鍋氭硶鍖呮嫭锛氬湪閮ㄧ讲绠¢亾涓殑鏋勫缓鍜屾祴璇曞け璐ユ椂鈥滃仠姝㈢敓浜х嚎鈥濓紱 +鏃ュ涓鏃ュ湴鎸佺画鏀硅繘鏃ュ父宸ヤ綔锛涘垱寤哄揩閫熺殑鑷姩鍖栨祴璇曞瑁呰蒋浠讹紝浠ョ‘淇濅唬鐮佹绘槸澶勪簬鍙儴缃茬殑鐘舵侊紱 +鍦ㄥ紑鍙戝拰IT杩愮淮涔嬮棿寤虹珛鍏卞悓鐨勭洰鏍囧拰鍏卞悓瑙e喅闂鐨勬満鍒讹紱 +寤虹珛鏅亶鐨勪骇鍝侀仴娴嬫妧鏈紝璁╂瘡涓汉閮借兘鐭ラ亾锛屼唬鐮佸拰鐜鏄惁鍦ㄦ寜鐓ц瀹氱殑杩愯锛屼互鍙婃槸鍚﹁揪鍒颁簡瀹㈡埛鐨勭洰鏍囥 + +### 绗笁宸ヤ綔娉 +鏄叧浜庡垱閫犲叕鍙告枃鍖栵紝璇ユ枃鍖栧彲甯﹀姩涓ょ椋庢皵鐨勫舰鎴愶細涓嶆柇灏濊瘯锛岃繖闇瑕佹壙鎷呴闄╁苟浠庢垚鍔熷拰澶辫触涓惛鍙栫粡楠屾暀璁紱鐞嗚В閲嶅鍜岀粌涔犳槸鐔熺粌鎺屾彙鐨勫墠鎻愩傗 + +鈥滃皾璇曞拰鎵挎媴椋庨櫓璁╂垜浠兘澶熶笉鎳堝湴鏀硅繘宸ヤ綔绯荤粺锛岃繖缁忓父瑕佹眰鎴戜滑鍘诲仛涓浜涗笌鍑犲崄骞存潵鐨勫仛娉曞ぇ涓嶇浉鍚岀殑浜嬨備竴鏃﹀嚭浜嗛棶棰橈紝涓嶆柇閲嶅鐨勬棩甯告搷缁冭祴浜堟垜浠殑鎶鑳藉拰缁忛獙锛屼护鎴戜滑鍙互鎾ゅ洖鑷冲畨鍏ㄥ尯鍩熷苟鎭㈠姝e父杩愪綔銆 + +蹇呰鐨勫仛娉曞寘鎷惀閫犱竴绉嶅媷浜庡垱鏂般佹暍浜庡啋闄╋紙鐩稿浜庣晱鎯ф垨鐩茬洰鏈嶄粠鍛戒护锛変互鍙婇珮淇′换搴︼紙鐩稿浜庝綆淇′换搴﹀拰鍛戒护鎺у埗锛夌殑鏂囧寲锛屾妸鑷冲皯20%鐨勫紑鍙戝拰IT杩愮淮鍛ㄦ湡鍒掓嫧缁欓潪鍔熻兘鎬ч渶姹傦紝骞朵笖涓嶆柇榧撳姳杩涜鏀硅繘銆 + + + +### references +- [浣跨敤Kubernetes婕旂ず閲戜笣闆鍙戝竷](https://www.cnblogs.com/rexcheny/p/10740536.html) +- [istio瀹屾垚閲戜笣闆銆佺伆搴﹀彂甯僝(https://blog.csdn.net/qq_42150559/article/details/96136245) +- [浣跨敤鍘熺敓k8s鍙奾elm瀹屾垚鐏板害(閲戜笣闆)鍙戝竷](https://blog.csdn.net/qq_42150559/article/details/97143825) +- [Kubernetes鐨勯儴缃茬瓥鐣ワ紝浣犲父鐢ㄥ摢绉嶏紵](https://www.sohu.com/a/318731931_100159565) + + +- [鍐欑粰鏂颁汉鐨凚A宸ヤ綔璇存槑涔(https://www.jianshu.com/p/9efbf1233a7e) +- [DevOps瀹炴柦锛氫粠鏁忔嵎鏂囧寲涓庨厤缃枃浠剁殑鍥版儜璇磋捣](http://www.suphp.cn/yunweipai/35/23835.html) diff --git a/devopstest.md b/devopstest.md new file mode 100644 index 0000000..bb1545b --- /dev/null +++ b/devopstest.md @@ -0,0 +1,483 @@ +# devops娴嬭瘯 + +## 涓銆侀夋嫨棰橈紙20锛 + +1. 楠屾敹娴嬭瘯鐨勬渶浣抽夋嫨? +a. Happy Path +b. 鍥炲綊娴嬭瘯 +c. alternate Path +d. Sad Path + +a. happy path 鐩稿綋浜庡仛涓绘祦绋 + +2. 浜戣绠楃殑鍝釜鐗规ц兘瀹炵幇鑷姩閮ㄧ讲? +a. 鏍囧噯鏍 +b. 瑙勬ā鍖 +c. 铏氭嫙鍖 +d. 閫氱敤鎬 + +a. 鏍囧噯鏍堜娇寰楄嚜鍔ㄩ儴缃叉垚涓哄彲鑳 + +3. 杞欢浜や粯杩囩▼涓紝璁╂暣涓繃绋嬭嚜鍔ㄥ寲锛屽苟鑳藉鍙婃椂鍙戠幇闂鍜屼慨澶嶉棶棰橈紝鍦ㄦ杩囩▼涓,浠ヤ笅瀹炶返涓嶆槸鍙嶆ā寮忛夐」鏄細 +a锛岃姹備竴浠借灏芥枃妗o紝璇ユ枃妗f弿杩颁簡姣忎釜姝ラ涓鏄撳嚭閿欑殑鍦版柟 +b锛屽紑鍙戝畬鎴愬悗鎵嶅悜绫荤敓浜х幆澧冮儴缃 +c锛屾彁鍓嶉绻佺殑鍋氳浣犳劅鍒扮棝鑻︾殑浜 +d锛屾墜宸ヨ繘琛岀敓浜х幆澧冪殑閰嶇疆 + +c. 鐥涜嫤鐨勪簨鎯呴绻佸仛 + +4. 鑹ソ鐨勯厤缃鐞嗚繃绋嬶紝鏄疄鐜板紑鍙戝拰閮ㄧ讲杩囩▼鍙帶鍜屽彲閲嶅鐨勫熀纭锛屼互涓嬪摢涓唴瀹逛笉鏄壇濂介厤缃鐞嗙瓥鐣ワ細 +a. 鑳藉鍐嶇幇鎵闇鐨勪换浣曠幆澧冦 +b. 涓轰簡杈惧埌绯荤粺杩愯绋冲畾鐨勭洰鏍囷紝鍥哄寲閰嶇疆锛屼换浣曚慨鏀归兘鍋氱櫥璁般 +c. 鑳藉杩借釜鏌愪釜鍏蜂綋鐜鐨勬煇娆′慨鏀癸紝骞惰兘澶熻拷婧慨鏀规簮锛屼互鍙婁粈涔堟椂闂磋皝鍋氫簡淇敼銆 +d. 澧為噺寮忎慨鏀癸紝骞跺彲灏嗕慨鏀归儴缃插埌浠绘剰涓绉嶇幆澧冧腑銆 + +b. 涓嶆槸鏁忔嵎绛栫暐銆傚奖鍝嶈凯浠c + +5. 姣忎釜搴旂敤绋嬪簭閮戒緷璧栦簬杞欢銆佺‖浠躲佸熀纭璁炬柦绛夋墠鍙互姝e父宸ヤ綔锛岃繖浜涘唴瀹圭О浣滃簲鐢ㄧ▼搴忕殑鐜锛岀幆澧冪鐞嗕笌閰嶇疆绠$悊鍚屾牱閲嶈銆備互涓嬪摢绉嶄笉鏄壇濂界殑鐜绠$悊瀹炶返锛 +a. 鐜绠$悊鐨勫叧閿槸閫氳繃涓涓嚜鍔ㄥ寲杩囩▼鏉ュ垱寤虹幆澧冦 +b. 鍥犱负鐜绠$悊鐨勯噸瑕佹э紝涓鏃︾郴缁熷嚭闂锛屾淳閬h祫娣变笓瀹惰姳璐逛笉纭畾鐨勬椂闂存潵鎵惧埌闂锛屽苟淇瀹冦 +c. 淇鏌愪釜鐜鍙兘闇瑕佸ぇ閲忔椂闂达紝鍥犳锛屾渶濂藉湪鍙瑙佺殑鏃堕棿閲岄噸寤虹幆澧冿紝骞跺皢鍏舵仮澶嶅埌鏌愪釜宸茬煡鐨勬甯哥姸鎬併 +d. 鍒涘缓涓涓被鐢熶骇鐜锛岄厤缃棶棰樺彲鍦ㄦ棭鏈熸祴璇曚腑鍙戠幇銆 + +b. 1. 鑷姩鍖栥佺畝鍗曞寲銆佸彲閲忎骇銆佸彲閲嶇幇锛屼笉鏄緷璧栬祫娣变笓瀹 + +6. 鍏徃鎵撶畻鏋勫缓涓鏉¢儴缃叉祦姘寸嚎锛屽叕鍙搁瀵煎笇鏈涘疄鐜伴绻佸彂甯冦 +鏈夊洟闃熸垚鍛樿涓猴細杩欐潯閮ㄧ讲娴佹按绾挎渶閲嶈鐨勬槸鑷姩鍖栥傚洟闃熼鍏堣璁╁畠鑷姩鍖栬捣鏉ャ +杩欑璇存硶瀵瑰悧锛 +a. 鏄殑锛岃繖鏄纭殑銆傞儴缃叉祦姘寸嚎鑷姩鍖栨槸鎻愬崌鏁堢巼鐨勬渶閲嶈鍥犵礌銆 +b. 鏄殑锛岃繖鏄纭殑銆傚叧娉ㄨ嚜鍔ㄥ寲閮ㄧ讲娴佹按绾跨殑鍒涘缓锛屽厠鏈嶄箣鍚庡彲鑳介亣鍒扮殑娼滃湪闂銆 +c. 涓嶏紝杩欐槸閿欒鐨勩傚畬鎴愬崟浠舵祦鍙婁竴涓彲闈犵殑閮ㄧ讲娴佺▼鏄紭鍏堢骇鏈楂樼殑浠诲姟銆傝娴佺▼鐨勮嚜鍔ㄥ寲鍙互鏆傜紦瀹炴柦銆 +d. 涓嶏紝杩欐槸閿欒鐨勩傞鍏堝簲褰撹嚜鍔ㄥ寲鐨勬槸娴嬭瘯娴佺▼鑰岄潪閮ㄧ讲娴佹按绾裤 + +c, 鏃犺浣曟椂锛屾墍鏈夐儴缃叉祦姘寸嚎棣栧厛搴斿綋鏄崟浠舵祦绋嬬殑閮ㄧ讲娴佹按绾匡紝鏃犻渶鑷姩鍖栧氨鍙珮鏁堣繍琛屻備竴鏃﹁娴佹按绾跨ǔ瀹氱‘绔嬶紝灏辨湁鏈轰細閫夋嫨鍙鐨勬祦绋嬪疄鏂借嚜鍔ㄥ寲銆備絾鏄紝鏋勫缓绋冲畾鐨勯儴缃叉祦姘寸嚎姘歌繙姣旇嚜鍔ㄥ寲鏇撮噸瑕併 + +7. 鏈夊緢澶氭柟娉曞彲浠ヤ娇缁勭粐瓒嬪悜鎴愮啛锛屼笅鍒楀摢绉嶆柟娉曚笉浼氫娇浣犵殑devOps缁勭粐鏇磋秼鎴愮啛锛 +a. 鏄庣‘瀹氫箟鐩爣瀹氬拰閲岀▼纰戯紝甯姪鍥㈤槦鎴愬憳鍒ゆ柇鍏舵棩甯告椿鍔ㄦ槸鍚︽湁浠峰笺 +b. 鏄庣‘瀹氫箟娴佺▼锛屾敮鎸佸苟淇冧娇鍥㈤槦鎴愬憳閫愭棩鏀硅繘娴佺▼銆 +c. 瀵逛細璁殑鎵鏈夊唴瀹硅繘琛岃褰曪紝浣夸綘鐨勫洟闃熸垚鍛樺彲浠ュ緢鏂逛究鐨勪簡瑙e埌姣忔娌熼氱殑鍐呭淇℃伅銆 +d. 鐩戞帶骞惰褰曟瘡澶╃殑娲诲姩锛屼互鎵惧嚭灏忚寖鍥村唴姣忓ぉ鍙栧緱鐨勮繘姝ュ苟浜堜互璧炴壃銆 + +c, 杩欐棤鍔╀簬devOps缁勭粐鐨勬垚鐔熴傛槸鍚﹁瀵逛細璁繘琛屽叏绋嬭褰曞苟鍐嶆瀹℃煡锛屽苟娌℃湁涓ユ牸鐨勮姹傘傛湁蹇呰璁板綍杈炬垚鍏辫瘑鐨勫唴瀹癸紝鑰屼笉鏄褰曟暣 鍦轰細璁傦紙鏂囩尞锛氭寔缁氦浠橈紝绗崄浜旂珷锛 + +8. 浣犺涓鸿嚜宸辩殑寮鍙戝洟闃熸槸涓鏀湡姝g殑鍥㈤槦銆 +浣犺寰楁湁浠涔堢‘鍒囩殑鐗瑰緛琛ㄦ槑杩欐槸涓鏀洟闃熻屼笉鍙槸涓涓皬缁勫憿锛 +a. 璇ュ洟闃熼伒瀹堝湪鍥㈤槦浼氳涓叡鍚屽埗瀹氱殑瑙勫垯銆 +b. 鍥㈤槦鍙紑鑷繁涓绘寔鐨勯珮鏁堜細璁 +c. 鍥㈤槦浠ョǔ瀹氱殑宸ヤ綔鑺傚锛屾湞鐫鍏卞悓鐨勭洰鏍囨帹杩涖 +d. 璇ュ洟闃熼氳繃璐ㄨ璐熻矗鏌愰」宸ヤ綔鐨勫洟闃熸垚鍛樼殑鏂瑰紡鏉ヨВ鍐抽棶棰樸 + +d 涓鏀湡姝g殑鍥㈤槦鑳藉缁存寔绋冲畾鐨勫伐浣滆妭濂忥紝骞惰兘澶熷缁堝悜鐫鍏卞悓鐨勭洰鏍囧姫鍔涖傦紙鏂囩尞锛欵ffective devOps锛岀涔濈珷锛 + +9. +涓洪噰鐢ㄦ暣浣撴柟娉曞鐞嗘墍鏈夊熀纭璁炬柦锛屽簲褰撻伒寰摢涓ゆ潯鍘熷垯? +a. +1. 浣犵殑鍩虹璁炬柦搴斿叿澶囩殑鐘舵侀渶瑕侀氳繃鍙樻洿鎺у埗閰嶇疆鏉ョ‘瀹氥 +2. 浣犲簲褰撻氳繃鐩戞帶涓庝簨浠剁鐞嗭紝鍙婃椂浜嗚В鍩虹璁炬柦鐨勫噯纭姸鎬併 +b. +1. 闇瑕侀氳繃鍙樻洿鎺у埗閰嶇疆鏉ョ‘瀹氫綘鐨勫熀纭璁炬柦搴斿叿澶囩殑鐘舵併 +2. 浣犲簲褰撻氳繃浠櫒浠〃鍙婁簨浠剁鐞嗭紝濮嬬粓浜嗚В鍩虹璁炬柦鐨勭‘鍒囩姸鎬併 +c. +1. 浣犵殑鍩虹璁炬柦搴斿叿澶囩殑鐘舵侀渶瑕侀氳繃鐗堟湰鎺у埗閰嶇疆鏉ョ‘瀹氥 +2. 浣犲簲褰撻氳繃褰撳墠浜嬩欢涓庝簨浠剁鐞嗭紝濮嬬粓浜嗚В鍩虹璁炬柦鐨勭‘鍒囩姸鎬併 +d. +1. 浣犵殑鍩虹璁炬柦搴斿叿澶囩殑鐘舵侀渶瑕侀氳繃鐗堟湰鎺у埗閰嶇疆鏉ョ‘瀹氥 +2. 浣犲簲褰撻氳繃浠〃鐩樹笌鐩戞帶濮嬬粓浜嗚В鍩虹璁炬柦鐨勭‘鍒囩姸鎬併 + +d, 涓洪噰鐢ㄦ暣浣撴柟娉曞鐞嗘墍鏈夊熀纭璁炬柦锛屽簲褰撻伒寰繖涓ゆ潯鏍稿績鍘熷垯銆傦紙鏂囩尞锛氭寔缁氦浠橈紝 绗崄涓绔狅級 + +10. +鍦ㄦ晱鎹峰拰devops涓惛鏀朵簡寰堝绮剧泭鏍稿績姒傚康銆傚疄鏂絛evOps鏃讹紝灏嗙簿鐩婄殑鐩稿叧姒傚康搴旂敤鍦╠evOps杩囩▼涓紝鏈夊姪浜庢垚鍔熷疄鏂絛evops銆 +鍦ㄦ杩囩▼涓紝绮剧泭绠$悊鐨勫摢浜涘師鍒欐垨瀹炶返鏂规硶鏈鏈夋晥? + +a) Kaizen(涓撴湁璇嶏紝鎰忎负灏忕殑銆佷笉鑺遍挶鐨勬寔缁敼鍠) +b) 5S - 鏁寸悊锛圫HIRI锛夈佹暣椤匡紙SEITON锛夈佹竻鎵紙SEISO锛夈佹竻娲侊紙SEIKETSU锛夈佺礌鍏伙紙SHITSUKE锛 +c) Obeya绯荤粺(鍙鍖栫鐞) +d) 鍗曚欢娴佷笌璐ㄩ噺妫鏌 + +d, +鍒涘缓涓涓彲琛岀殑銆佸崟浠堕儴缃叉祦姘寸嚎灏嗘湁 鍔╀簬鎴愬姛瀹炴柦devOps銆俤evOps涓渶閲嶈鐨勫伐浣滃湪浜庢瀯寤轰粠寮鍙戦儴闂ㄥ埌杩愮淮閮ㄩ棬鐨勪笂娓告祦绋嬶紝灏ゅ叾鏄拡瀵瑰崟涓閮ㄧ讲娴佹按绾裤傝川閲忔鏌ワ紙JKK锛夋槸鑳藉杈炬垚杩欎竴鐩爣鐨勬渶鏈夋晥鐨勫伐浣滆涓恒傦紙鏂囩尞锛氥婁紒涓歞evOps鐨勬垚鍔熶箣璺嬶級 + + +11. 鎸佺画闆嗘垚涓嶄細鍗曠嫭鐨勫府浣犱慨澶嶆瀯寤鸿繃绋嬶紝鍦ㄤ腑鍚庢湡寮灞曟寔缁泦鎴愶紝鎰忓懗鐫鍦ㄦ瀯寤鸿繃绋嬮渶瑕佽楄垂澶ч噺宸ヤ綔銆 +涓轰簡浣挎寔缁泦鎴愭洿楂樻晥锛屾棭鏈熼樁娈碉紝涓鑸笉浼氭秹鍙婄殑宸ヤ綔鏄紵 +a. 棰戠箒鎻愪氦浠g爜鍒扮増鏈帶鍒跺簱 +b. 鍒涘缓鍒嗘敮锛屽苟灏芥棭鎻愪氦浠g爜鍒板垎鏀 +c. 鍒涘缓鑷姩鍖栨祴璇曞浠 +d. 淇濇寔杈冪煭鐨勬瀯寤哄拰娴嬭瘯杩囩▼ + +b. 搴旀彁浜ゅ埌涓诲共锛屽垎鏀鏄撶牬鍧忓嵆鏃堕泦鎴 +鎸佺画浜や粯 P46 + +12. 鍏充簬鐗堟湰鎺у埗锛屼互涓嬭娉曚笉姝g‘鐨勬槸锛 +a. 婧愪唬鐮佸繀椤荤撼鍏ョ増鏈帶鍒躲 +b. 閰嶇疆淇℃伅蹇呴』绾冲叆鐗堟湰鎺у埗銆 +c. 涓轰簡鍔犲揩鍙戝竷鍛ㄦ湡鍜屾彁楂樿蒋浠惰川閲忥紝灏嗙紪璇戝櫒鎴栧叾浠栫浉鍏冲伐鍏风殑浜岃繘鍒堕暅鍍忕撼鍏ョ増鏈帶鍒躲 +d. 涓轰簡鍔犻熸墦鍖咃紝灏嗘簮浠g爜缂栬瘧鍚庣殑浜岃繘鍒舵枃浠剁撼鍏ョ増鏈帶鍒躲 + +d. 涓嶆帹鑽愶紝1. 姣旇緝澶э紝2. 姣忔閲嶆柊鏋勫缓閮戒細閲嶆柊鐢熸垚浜岃繘鍒舵枃浠讹紝鏃犲繀瑕 + + +13. 涓涓紑鍙戝洟闃熷devOps鎰熷叴瓒c備粬浠富瑕佹劅鍏磋叮鐨勫璞℃槸鎸佺画闆嗘垚锛坈I锛夈備粬浠洰鍓嶅紑鍙戝苟缁存姢鐫涓夌涓昏瑙e喅鏂规鍙婂洓绉嶆瑕佽В鍐虫柟妗堛備粬浠噰鐢⊿crum瀹炶返鏂规硶銆傛瘡娆″啿鍒洪兘闇瑕佸洓鍛ㄦ椂闂达紝骞冲潎姣忓崄澶╁埌鍗佷簲澶╁娴嬭瘯鐜閮芥湁涓娆℃彁浜ゅ彂甯冿紝骞冲潎姣忎釜鏈堝鐢熶骇鐜鏈変竴娆″彂甯冦備粬浠兂涓虹鐞嗗眰鍒跺畾涓涓畾鎬х殑鍟嗕笟璁鸿瘉锛屾潵鏀寔浠栦滑涓哄垱寤烘寔缁泦鎴愬疄璺垫ā寮忚屼粯鍑虹殑鎶曡祫涓庡姫鍔涖 +鎸佺画闆嗘垚鏈夊摢浜涙樉鎬ф敹鐩婂璇ュ晢涓氳璇佹渶涓烘湁鍒╋紵 +a. 姣忓ぉ瀵规祴璇曠幆澧冭繘琛屼竴娆¢儴缃茶兘鏋佸ぇ鐨勬彁楂樺晢涓氭晥鐩婂苟涓斿ぇ澶х缉鍑忓紑鍙戞垚鏈 +b. 杩欐湁鍔╀簬鎻愬崌鍥㈤槦绮剧銆傜敱浜庡叕鍙稿凡缁忓湪浣跨敤Scrum锛屾寔缁泦鎴愬皢涓哄叕鍙镐笟鍔″甫鏉ユ樉钁楃殑鐩婂銆 +c. 瀹冮氳繃鏇村ソ鐨勯泦鎴愭祴璇曟彁楂樹簡涓氬姟绋冲畾鎬э紝鍚屾椂缁存寔鍙戝竷閫熷害浠ラ槻姝骇鐢熼澶栨垚鏈 +d. 鍦ㄧ敓浜х幆澧冧腑锛屾瘡澶╄繘琛屼竴娆′俊鎭彂甯冭兘澶熸彁鍗囦笟鍔℃敹鐩婏紝骞跺ぇ澶у噺灏戝紑鍙戞垚鏈 + +d, 鏇村揩閫熺殑鍚戠敓浜х幆澧冨彂甯冩槸鎸佺画闆嗘垚鐨勪竴澶т富瑕佺泭澶勶紝姝ゅ杩樺寘鎷洿蹇熷湴鍙戠幇鏁呴殰浠ュ噺灏戝紑鍙戞垚鏈拰鏁呴殰淇鎴愭湰銆傦紙鏂囩尞锛氥婃寔缁氦浠樸嬶紝 绗笁绔犫斺旀寔缁泦鎴愶級 + +14. 鍏充簬浣跨敤鑴氭湰鍘绘瀯寤哄拰閮ㄧ讲娴佺▼鑷姩鍖栵紝浠ヤ笅璇存硶姝g‘鐨勬槸锛 +a. 姣忕鐜閲囩敤涓涓剼鏈紝骞跺皢鍏朵綔涓虹増鏈帶鍒剁郴缁熺殑涓閮ㄥ垎鍔犱互缁存姢銆 +b. 涓嶅悓鐜浣跨敤涓嶅悓鐨勭壒瀹氳剼鏈紝浠ヨВ鍐崇幆澧冧箣闂寸殑宸紓闂銆 +c. 涓嶅悓鐜閲囩敤鍚屾牱鐨勮剼鏈紝瀵圭壒瀹氱殑閰嶇疆閲囩敤鎵嬪姩鍙傛暟銆 +d. 閲囩敤鍚屼竴鑴氭湰鍦ㄤ笉鍚岀幆澧冧腑杩涜閮ㄧ讲锛屽苟鍗曠嫭绠$悊閰嶇疆淇℃伅銆 + +d, +鑴氭湰搴斿綋淇濇寔涓鑷达紝鎵嶈兘淇濊瘉鏋勫缓鍜屼氦浠樻祦绋嬪緱鍒版湁鏁堟祴璇曘傜幆澧冧箣闂达紙濡俇RI鍜孖P绛夛級鐨勫樊寮傚簲褰撲綔涓洪厤缃鐞嗘祦绋嬬殑涓閮ㄥ垎浜堜互澶勭悊銆傦紙鏂囩尞锛氥婃寔缁氦浠樸嬶紝绗叚绔犫斺旀瀯寤 涓庨儴缃茶剼鏈鐞嗙殑鍘熷垯涓庢柟娉曪級 + + +15. 褰撴湁杩愮淮渚у彉鏇存椂锛岃繍缁撮儴闂ㄥ憡鐭ュ紑鍙戦儴闂ㄧ殑鏈浣虫椂闂存槸浣曟椂锛 +a. 鏃犻渶鍛婄煡寮鍙戝洟闃熴傝繍缁翠晶鐨勫彉鏇翠粎杩愮淮鍥㈤槦鐭ユ檽鍗冲彲銆 +b. 绔嬪埢鎵ц銆傚簲褰撳敖蹇氱煡寮鍙戦儴闂ㄣ +c. 娆℃棩鏃╂櫒鐨凷crum浼氳涓 +d. 褰撹繍缁村洟闃熷凡缁忓畬鎴愰獙鏀舵祴璇曟椂銆 + +b, 搴斿綋绔嬪嵆鍛婄煡寮鍙戦儴闂紝璁╀粬浠兘澶熼瑙佹綔鍦ㄧ殑椋庨櫓鍜岄棶棰樸傦紙鏂囩尞锛氫紒涓氱骇devOps鐨勬垚鍔熶箣璺級 + +16. 鑰冭檻瀵瑰熀鏈儴缃叉祦姘寸嚎杩涜鍏蜂綋瑙f瀽銆 +鍝釜闃舵琛ㄦ槑璇ョ郴缁熷湪鍔熻兘鎬т笌闈炲姛鑳芥у眰闈㈠潎鍙戞尌浣滅敤锛 +a. 鑷姩鍖栭獙鏀舵祴璇 +b. 鏋勫缓涓庡崟鍏冩祴璇 +c. 鎵嬪姩楠屾敹娴嬭瘯 +d. 鐗堟湰鎺у埗 + +a. 鑷姩鍖栭獙鏀舵祴璇曢樁娈佃〃鏄庯紝绯荤粺鍦ㄥ姛鑳芥т笌闈炲姛鑳芥у眰闈笂宸ヤ綔姝e父锛屽湪琛屼负涓婂畠鑳芥弧瓒崇敤鎴风殑闇姹傚拰瀹㈡埛鐨勮鏍艰姹傘傦紙鏂囩尞锛 銆婃寔缁氦浠樸嬶紝绗叓绔狅級 + + +17. 寮鍙戝洟闃熷綋鍓嶅湪娴嬭瘯涓亣鍒拌澶氭寫鎴樸傜洰鍓嶄粬浠娇鐢ㄤ汉宸ラ獙鏀舵祴璇曟祦绋嬨 +寮鍙戣呰涓轰粬浠墍鍒涘缓鐨勫崟鍏冩祴璇曟槸鍗佸垎鍛ㄥ瘑鐨勶紝鍙互閬垮厤鍥為銆 +鍦ㄦ瘡娆″彂甯冩椂锛屽紑鍙戝洟闃熼兘闇瑕佽姳璐100涓囧湪浜哄伐楠屾敹娴嬭瘯鐜妭銆 +棰嗗灞傝姹傚紑鍙戝洟闃熷疄鏂借嚜鍔ㄥ寲楠屾敹娴嬭瘯锛屼互闄嶄綆娴嬭瘯鐨勬绘垚鏈苟灏藉彲鑳藉噺灏戝紩鍏ョ敓浜х幆澧冧腑鐨勪唬鐮佺己闄锋暟閲忓拰鍥為娆℃暟銆 +鍦ㄤ緷鐓ц嚜鍔ㄥ寲闇姹傜‘瀹氬簲鐢ㄧ▼搴忕殑楠屾敹鏍囧噯鏃讹紝搴斿綋閬靛惊浠涔堝師鍒欙紵 +a. agile锛堟晱鎹凤級鍘熷垯 +b. aTaM锛堟灦鏋勬潈琛″垎鏋愭硶锛夊師鍒 +c. dIVEST鍘熷垯 +d. INVEST鍘熷垯 + +d, 楠屾敹娴嬭瘯婧愯嚜楠屾敹鏍囧噯锛屽洜姝や綘鐨勫簲鐢ㄧ▼ 搴忕殑楠屾敹鏍囧噯鐨勫埗瀹氬簲褰撹冭檻鑷姩鍖栧洜绱狅紝閬靛惊INVEST鍘熷垯锛 +Independent (鐙珛鎬)銆丯egotiable (鍙崗鍟)銆乂aluable(鏈変环鍊)銆丒stimatable(鍙及璁)銆丼mall(灏忚屽皯)銆乀estable(鍙祴璇)锛堟枃鐚細鎸佺画浜や粯锛岀鍏珷鈥斺斿浣曞垱寤哄彲缁存寔鐨勯獙鏀舵祴璇曞浠讹級 + + +18. 鑷姩鍖栨祴璇曟槸楂樻晥杞欢鍙戝竷鍜屽疄鐜版寔缁氦浠樼殑鍩虹锛屼互涓嬮偅涓绫绘祴璇曚笉瀹滃叏闈㈣嚜鍔ㄥ寲銆 +a. 瀹归噺娴嬭瘯 +b. GUI娴嬭瘯 +c. 鍗曞厓娴嬭瘯 +d. 鎺㈢储鎬ф祴璇 + +d. 鎺㈢储鎬ф祴璇曚竴鑸渶缁撳悎浜哄伐娴嬭瘯 + +19. +鍏徃姝e湪浣跨敤devOps銆傝鍏徃瀹炴柦浜嗘寔缁儴缃诧紝骞跺叿澶囬珮搴﹁嚜鍔ㄥ寲楠屾敹娴嬭瘯鍜屾瘡鏃ュ悜鐢熶骇閮ㄤ氦浠樻柊杞欢鐨勭ǔ瀹氶儴缃叉祦姘寸嚎銆傚叕鍙告湁涓涓法澶х殑鏁版嵁搴撳強浼楀鐢ㄦ埛銆傝鍏徃鍏峰鍏ㄩ潰鍙潬鐨勫閲忔祴璇曠瓥鐣ャ傜敱浜庤鍏徃鐜骞垮ぇ鑰屽鏉傦紝闅忕潃姣忎釜鏂扮増鏈殑鍙戝竷锛岀敓浜ч儴灏变細鍑虹幇涓浜涘皬鏁呴殰銆 +浠涔堢瓥鐣ヨ兘澶熸渶鏈夋晥鍦板府鍔╄鍏徃棰勯槻杩欎簺鏁呴殰锛 +a) 閲囩敤閲戜笣闆鍙戝竷 +b) 鑷姩鍖栧閲忔祴璇 +c) 闄嶄綆浜や粯鐜 +d) 閲囩敤钃濈豢閮ㄧ讲 + +a. 閲戜笣闆鍙戝竷鍖呮嫭鍚戠敓浜ф湇鍔″晢涓殑涓灏忛儴鍒嗘帹鍑烘柊鐗堟湰鐨勫簲鐢ㄧ▼搴忥紝浠ュ揩閫熸敹闆嗗弽棣堛傝繖鑳藉蹇熷彂鐜版柊鐗堟湰涓嚭鐜扮殑鎵鏈夐棶棰橈紝鑰屼笉浼氬澶у鏁扮敤鎴蜂骇鐢熷奖鍝嶏紝鍥犱负宸ヤ綔閲忔槸閫愭笎澧為暱鐨勶紱鍚屾椂杩欎竴鍋氭硶杩樿兘纭畾鍝嶅簲鏃堕棿鍙婂叾浠栧伐浣滆〃鐜拌 閲忔爣鍑嗭紝鍑忓皯鏂扮増鏈彂甯冪殑椋庨櫓锛屽苟甯姪灏藉揩鍙戠幇涓庝慨澶嶆紡娲炪傦紙鏂 鐚細鎸佺画浜や粯锛岀鍗佺珷-閲戜笣闆鍙戝竷锛 + +钃濈豢閮ㄧ讲闇瑕佸ぇ閲忚祫婧愶紝鍥犺屽湪璇ユ儏澧 涓唬浠烽珮鏄傘傛澶栵紝鑻ラ渶瑕佸洖閫锛屽湪澶у瀷鏁版嵁 搴撲腑閲囩敤杩欎竴绛栫暐鍙兘瀵艰嚧鏁呴殰鎴栧彧璇绘儏鍐靛彂 鐢熴傚彟澶栵紝杩欎篃鏃犲姪浜庡閲忔祴璇曟晥鐜囩殑鎻愰珮銆 + +20. 鍏徃姝e湪灏濊瘯杞彉锛屽苟寮濮嬩娇鐢╠evOps鐨勬柟寮忓紑灞曞伐浣溿備綘鐨勫洟闃熶篃鍦ㄧ粡鍘嗚繖涓杞彉銆 +浣犳鍦ㄥ弬涓庤璁轰唬鐮佹彁浜ら樁娈电殑鏈浣冲疄璺点 +鏌愬悓浜嬭锛氣滃綋鏌愪竴鏋勫缓閬埌鐮村潖涓旀棤浜烘媴璐f椂锛屾垜浠簲褰撴壘鍑洪犳垚鐮村潖鐨勪汉骞惰姹備粬浠睍寮宸ヤ綔锛屼互淇濊瘉浠栦滑鑳戒慨澶嶈繖涓鏋勫缓銆傗 +杩欐牱鍋氬悎閫傚悧锛 +a. 鏄殑銆傚彧鏈夌牬鍧忔瀯寤虹殑浜烘墠鑳藉淇瀹冿紝鍥犳浣犲簲褰撴壘鍒拌礋璐d汉锛屽嵆浣胯繖鏍峰彲鑳戒細璁╀汉鎰熻涓嶈垝 +鏈嶃 +b. 鏄殑銆備綘搴斿綋濮嬬粓涓虹牬鍧忔瀯寤鸿礋璐c傚鏋滀綘涓嶈礋璐o紝浣犵殑鍚屼簨灏嗗彲鑳藉己鍒舵墽琛岃繖椤硅瀹氥 +c. 涓嶏紝devOps鐜涓笉瀛樺湪杩借矗銆傝嫢鍚屼簨涓嶆壙鎷呰矗浠伙紝涓嶈寮鸿揩浠栦滑銆 +d. 涓嶏紝浣犲簲褰撻鍏堜慨澶嶆瀯寤恒傜劧鍚庢娊鍑烘椂闂达紝纭畾鐩稿叧璐熻矗浜哄苟杩涜澶勭綒銆 + +c, Devops鏂囧寲涓嶆彁鍊″己杩换浣曚汉鍋氫换浣曚簨銆傜姱閿欐槸鍙互鎺ュ彈鐨勩傚洟闃熸垚鍛樺叡鍚屽崗浣滀互鍏嬫湇鍚勭閿欒鎴栨寫鎴樸傦紙鏂囩尞锛氭寔缁氦浠橈紝绗笁绔狅紱楂樻晥鐨 devOps锛岀涓閮ㄥ垎锛 + + +## 浜屻佺畝绛旈锛5锛 +1. 绠杩癲evops鑳藉甫鏉ュ摢浜涙晥鏋滐紵 + 蹇熷彂甯 + 闄嶄綆鎴愭湰 + 鎸佺画鍙嶉锛屾彁楂樿蒋浠惰川閲 + 鏇村叧娉ㄤ笟鍔′骇鍑猴紝缁欏鎴峰甫鏉ヤ环鍊 + +2. 姣忎釜绯荤粺閮戒細閬囧埌杩欑鎯呭喌锛氬彂鐜颁竴涓弗閲嶇己闄凤紝蹇呴』灏藉揩淇銆傜畝杩扮揣鎬ュ彉鏇磋繃绋? + 闇鐗㈣锛氫换浣曟儏鍐典笅锛岄兘涓嶈兘鐮村潖娴佺▼锛岀揣鎬ヤ慨澶嶇増鏈悓鏍疯蛋鏋勫缓銆侀儴缃层佹祴璇曘佸彂甯冩祦绋嬶紝涓庡叾浠栦唬鐮佸彉鏇存病鏈夊尯鍒 + 鐢宠鍙樻洿(Request for change,RFc) + 鍒嗘瀽褰卞搷 + 閫氱煡鍒╃泭鐩稿叧鏂 + +3. devops鏂囧寲杞彉鍖呭惈鍝簺? + 楂樻晥 + 浜插拰 + 鍗忎綔 + 楂樺害淇′换 + 鍚岀悊蹇 + 闈炶按璐 + 鍗曚欢娴 + +4. 鎸佺画闆嗘垚涓嶅厜鏄竴浜涘伐鍏风粍鍚堬紝鏇存槸涓绉嶅疄璺碉紝瀹冪殑鏈夋晥鎬т篃渚濊禆浜庡洟闃熺邯寰嬨傜畝杩癱I(鎸佺画闆嗘垚)鐨勫ソ澶勶紝鍙婁负浜嗗疄鐜版寔缁泦鎴愮洰鏍囷紝鏈夊摢浜涜壇濂界殑瀹炶返? + 濂藉锛 + 杞欢鍦ㄤ换浣曟椂鍊欏彲宸ヤ綔 + 鏇村皯鐨刡ug + 鏇翠綆鐨勬垚鏈 + 鏇村揩鍙戠幇bug + 鑹ソ瀹炶返鎴栫邯寰嬶細 + 鏋勫缓澶辫触鍚庝笉瑕佸悜鐗堟湰搴撴彁浜ゆ柊浠g爜, 纭繚杞欢涓鐩村彲宸ヤ綔 + 鏈湴鏋勫缓骞惰繍琛屾彁浜ゆ祴璇曪紝娴嬭瘯閫氳繃鎵嶇户缁伐浣 + 涓嶈灏嗗け璐ョ殑鏋勫缓娉ㄩ噴鎺 + 涓鸿嚜宸卞鑷寸殑闂璐熻矗 + 鎵鏈変汉涓鸿川閲忚礋璐 + ... + + 5. 鍦ㄨ嚜鍔ㄥ寲杩愮淮涓紝瑕佸疄鐜板熀纭璁炬柦鍜屽簲鐢ㄧ▼搴忕殑鐩戞帶绛栫暐锛岄氬父瑕佽冭檻鍝簺鏂归潰鍐呭鎴栦粠鍝簺鏂归潰鐫鎵嬶紵 + 閲囬泦鏁版嵁锛岃蒋纭欢杩愯鎯呭喌锛屽仴搴峰害锛岀粺璁′俊鎭瓑, 閫氳繃SNMP/TR069绛 + 璁板綍鏃ュ織锛岃В鏋愩佸垎鏋愩佺粺璁℃棩蹇楁枃浠讹紝骞跺叧娉ㄦ棩蹇楃瓑绾 + 寤虹珛淇℃伅灞曠ず鏉(dashborad),鍙鍖 + 寤虹珛鑷姩閫氱煡/鍛婅鏈哄埗 + +## 涓夈佽杩伴锛2锛 +1. 鍦ㄨ蒋浠跺彂甯冭繃绋嬪叡锛屾垜浠父甯哥湅鍒版祴璇曘佽繍缁淬佸紑鍙戝洟闃熷崗浣滀笉鐣呭鑷寸殑娴佺▼鍙楅樆锛岄儴缃叉祦姘寸嚎浠庣鍒扮鏉ヨ疮绌挎祦绋嬶紝瀹炵幇鑷姩鍖栨瀯寤恒侀儴缃层佹祴璇曞拰鍙戝竷銆傚叕鍙告帹杩涙晱鎹/devops锛岃缁撳悎瀹炶返锛岃杩板浣曟瀯寤轰竴濂楅儴缃叉祦姘寸嚎锛屼互鍙婅繖濂楅儴缃叉祦姘寸嚎濡備綍鍦ㄥ疄璺典腑鏇村ソ鐨勫疄鐜版寔缁氦浠樸 + +鍐呭瑕佺偣锛 +缁撳悎瀹炶返鏉ラ槓杩 + 1. 閮ㄧ讲娴佹按绾挎祦绋 + 鎻愪氦,鐗堟湰鎺у埗搴 + 鑷姩鏋勫缓鍜屽崟鍏冩祴璇曪紙鍙兘娑夊強鑷姩閰嶇疆绠$悊锛 + 閮ㄧ讲浜岃繘鍒跺寘 + 鑷姩鍖栭獙鏀舵祴璇(涓鑸仛鍐掔儫娴嬭瘯锛屼篃鍙兘鍖呮嫭鑷姩鍖栧閲忋佸畨鍏ㄧ瓑闈炲姛鑳芥ф祴璇) + + 杩愮淮涓閿儴缃插埌鐢熶骇鐜锛堝鍣ㄥ寲,鐢熶骇鐜閰嶇疆锛岄儴缃蹭簩杩涘埗鍖咃級 + + 娴佺▼鐨勮捣鐐规槸寮鍙戜汉鍛樺悜鐗堟湰鎺у埗搴撴彁浜や唬鐮侊紝娴佹按绾垮鎻愪氦浣滃嚭鍝嶅簲锛岃Е鍙戞祦姘寸嚎鐨勪竴涓疄渚嬶紝缂栬瘧浠g爜锛岃繍琛屽崟鍏冩祴璇曪紝鎵ц浠g爜鍒嗘瀽锛屽垱寤鸿蒋浠剁殑浜岃繘鍒跺寘锛涘鏋滄墍鏈夊崟鍏冩祴璇曢氳繃锛屼唬鐮佺鍚堟爣鍑嗭紝瀹屾垚杞欢鎵撳寘锛涗箣鍚庤Е鍙戣嚜鍔ㄥ寲楠屾敹銆 + 2. 鏋勫缓娴佹按绾胯繃绋 + 瀵逛环鍊兼祦寤烘ā骞跺垱寤虹畝鍗曠殑鍙伐浣滄鏋讹紙姣斿娴佽鐨刯enkins锛 + 灏嗘瀯寤哄拰閮ㄧ讲娴佺▼鑷姩鍖 + 灏嗗崟鍏冩祴璇曞拰浠g爜鍒嗘瀽鑷姩鍖 + 灏嗗姛鑳斤紙楠屾敹锛夋祴璇曡嚜鍔ㄥ寲 + 灏嗗彂甯冭嚜鍔ㄥ寲 + 3. 涓浜涜壇濂藉疄璺 + 閮ㄧ讲娴佹按绾跨殑鎴愬姛鐨勫叧閿箣涓鏄悇涓幆鑺傝兘澶熷敖蹇緱鍒板弽棣 + 椤圭洰杈冨ぇ鎯呭喌涓嬶紝鍏ㄩ噺鎴栧洖褰掓祴璇曞彲鑳借楄垂澶ч噺鐨勬椂闂达紝鍙兘鎵撴柇鎸佺画闆嗘垚鏁堢巼锛屽湪娴佹按绾夸腑寰寰鍙仛鍐掔儫娴嬭瘯锛岄氬父瑕佸湪涓涓や釜灏忔椂鍐呭畬鎴愯杩囩▼銆 + 纭繚鐢熶骇涓儴缃茬殑鍖呬笌娴佹按绾跨敓鎴愮殑浜岃繘鍒跺寘鏄悓涓涓紝鎴栬呭鍖呭仛HaSH楠岃瘉銆傞噸鏂板垱寤轰簩杩涘埗鍖呭皢甯︽潵涓嶄竴鑷撮闄┿ + 濡傛灉鏌愪釜鐜妭澶辫触锛屽簲鍋滄鏁翠釜娴佹按绾裤傛暣涓洟闃熷澶辫触璐熻矗銆 + 璞″叾浠栦氦浠樼殑搴旂敤涓鏍凤紝瀵归儴缃叉祦姘寸嚎杩涜澧為噺寮忓疄鐜帮紝涓嶆柇鏀瑰杽鍜岄噸鏋勩 + 璁╂瘡涓幆鑺傚彲瑙嗗寲锛岃澶у鑳藉娓呮櫚鐨勭湅鍒板摢涓幆鑺傛湁浠涔堥棶棰樸 + + +鍙傝<鎸佺画浜や粯>绗簲绔犵浉鍏冲唴瀹 + +2. +涓涓數淇$骇搴旂敤閮ㄧ讲鍦ㄤ簯涓婏紝闅忕潃涓氬姟涓嶆柇婕旇繘锛岀郴缁熺敤鎴峰拰鏁版嵁閲忎笉鏂鍔狅紝浜戣祫婧愮殑绋冲畾鎬у拰绯荤粺鐨勫鏉傛у甫鏉ョ殑绯荤粺鏈嶅姟涓柇鐨勯闄╄秺鏉ヨ秺澶э紝绯荤粺涓柇鐨勫奖鍝嶄篃闅忎箣澧炲姞銆傝缁撳悎瀹炶返锛岃杩颁粠鍝簺鏂归潰鏉ユ彁鍗囩郴缁熷彲鐢ㄦф垨鎻愬崌绯荤粺瀹圭伨鑳藉姏銆 + +浠庝互涓嬭鐐圭粨鍚堝疄璺靛睍寮璁鸿堪锛 + +鏋舵瀯鎵嬫锛氫粠浠ヤ笅瑙掑害缁撳悎搴旂敤杩涜鍒嗘瀽锛 + - 鍐枫佺儹澶囦唤锛屽績璺虫娴嬩繚娲 + 濡傞氳繃LVS銆乭aproxy銆乲eepalive绛夋柟寮 + - 闆嗙兢 & 璐熻浇鍧囪  & 鍒嗗竷寮 + 璐熻浇鍧囪 鏋舵瀯鏄涓湇鍔″仛涓鍫嗗悓绫荤殑浜嬫儏锛屾瘡浠朵簨鎯呯浉浜掔嫭绔嬶紱 + 鍒嗗竷寮忕殑鏋舵瀯鍒欐槸灏嗕竴浠跺鏉傜殑浜嬫儏鍒嗚В鍑哄涓儴浠斤紝鐢卞涓湇鍔″幓鍋氾紝鍐嶉氳繃鏋舵瀯瀹炵幇澶氫釜鍒嗚В浜嬫儏澶勭悊缁撴灉鐨勫悎骞躲 + - 澶氫腑蹇冿紝寮傚湴寮傛満鎴匡紝娑夊強璐熻浇鍒嗘媴鍜屾暟鎹悓姝ョ瓑闂鐨勮冭檻 + - 绾靛悜鎵╁锛屽鍔犳湇鍔″櫒璧勬簮锛屾崲鎬ц兘鏇村己鐨勬湇鍔″櫒鎻愬崌鏈嶅姟鑳藉姏 + - 妯悜鎵╁锛屽涓氬姟銆佹暟鎹簱銆佸尯鍩熺瓑杩涜鍒掑垎 + - 涓氬姟鏈嶅姟鐨勬媶鍒 + - 鏁版嵁搴撶殑璇诲啓鍒嗙 + ... + +杩愮淮鎵嬫锛 + - 铏氭嫙鍖栥佸鍣ㄥ寲 + - 鐩戞帶鎵嬫锛屽彂鐜版満鍒跺拰鍔犻熷鐞嗘満鍒剁瓑 + - 婕旂粌鍜屼竴浜涢楗ㄥ宸ュ叿鏁呴殰妯℃嫙 + - 鑷姩鍖栬繍缁达紝鐩戞帶棰勮绛夋墜娈 + - 搴旀ラ妗 + ... + + + +2. 鍒涘缓鍙墽琛屾枃浠剁殑宸ュ叿鏄竴绉嶄粈涔堟牱鐨勬瀯寤哄伐鍏? Make, 闈㈠悜浜у搧 +3. 涓鍑洪棶棰樺氨楠傚鍖: 鍔犲己鍗忎綔, 涓嶆寚璐. +4. 鍛婅瘔鑰佹澘devops鑳藉甫鏉ュ摢浜涙晥鏋: 蹇熷彂甯, 闄嶄綆鎴愭湰, 鐩存帴鏀寔涓氬姟浜у嚭 +5. devOps寮濮嬫椂瑕佸仛浠涔? 鎰挎櫙, 鐩爣. +6. devops鍥㈤槦鐨勬垚鍛? 6-8浜, cross function 璺ㄨ亴鑳 +7. 绱фュ彉鏇存墦琛ヤ竵? RFc 鐢宠鍙樻洿, 鍒嗘瀽褰卞搷, 閫氱煡鍒╃泭鐩稿叧鏂 +8. 浜戣绠楃殑鍝釜鐗规ц兘瀹炵幇鑷姩閮ㄧ讲? 鏍囧噯鏍 +9. 浜戠殑鍝釜鐗规т笉璁╀汉鏀惧績鎯充笂浜? 瀹夊叏, 鏈嶅姟绾у埆(SLa) +10. 鍝釜涓嶆槸瀹炵幇鑹ソ閰嶇疆绠$悊鐨勭瓥鐣?涓嶈兘鎶婁簩杩涘埗鏀惧埌閰嶇疆绠$悊涓 +11. 浠涔堟槸绠$悊鍩虹璁炬柦鐨勫師鍒? 鍘熷垯鏄悗闈釜鑷姩鍖, 鐗堟湰鎺у埗, 鐩戞帶 +12. 浠涔堟槸鏋勫缓渚濊禆, 浠涔堟槸杩愯渚濊禆? 缂栬瘧鏄瀯寤轰緷璧 +13. 鎵嬪姩杞欢鍙戝竷杩囩▼鐨勪紭鐐? 鍔犲己鍗忎綔, 鍔犲己Review +14. 浠涔堜笉鏄儴缃茬閬撶殑涓閮ㄥ垎? +15. 涓涓柊鐗堟湰姣忎笁涓湀鍙戝竷涓娆℃槸devops瀹炶返? 杩唬涓杩涜澧為噺鍙戝竷 +16. 涓轰粈涔圫La瀵瑰鎴峰姝ら噸瑕? 瀵瑰鎴锋湁浠峰 +17. 鍙戠敓鏁呴殰鏄熀纭璁炬柦閲嶅缓? 鑷姩鍖栨彁渚涜嚜鍔ㄥ寲杩愮淮 +18. SOR? 鍗忎綔鍨 +19. 鍚戝叾浠栧悓浜嬫姳鎬ㄤ笉鐩存帴鍙戠敓鍐茬獊? 閬垮厤/鍥為伩 +20. devOps Mindset? 闈炶按璐, 楂樻晥, 浜插拰 +21. 浠涔堟槸鍗忎綔? 澶氫汉鏍规嵁杈撳叆杈炬垚鍏卞悓鐨勮緭鍑 +22. 浠涔堟槸浜插拰? 涓嶅悓缇や綋 +23. 濡備綍浣縟evops鏇村姞鎴愮啛? 鎴存槑鐜, KaIZEN, 鍙鍖栨帶鍒跺拰鍙鍖栫鐞. +24. devops鏂囧寲杞彉鍖呭惈浠涔? 鏂板拰, 鍗忓拰, 楂樺害淇′换, 鍚岀悊蹇, 涓嶈按璐, 鍗曚欢娴 +25. 椤圭洰鍦╠evOps涓彇寰楁垚鍔熷繀椤绘敼鍙樹粈涔? Mindset, 鍗冧竾涓嶈閫夊伐鍏 +26. 閲嶅鍙潬鏄寚浠涔堣繃绋? Release +27. devops鍙嶆ā寮? 鎵嬪伐鍙戝竷, 寮鍙戝畬鍚庢墠閮ㄧ讲 +28. 杩唬鏃堕棿鍜岄娆″彇鍐充簬浠涔? 涓氬姟闇姹 +29. 鎸佺画閮ㄧ讲鐨勪紭鐐? 鎬ц兘鍜屼竴鑷存т笉鐩稿啿绐 +30. Obeya浣滄垬绯荤粺? 鍏变韩淇℃伅, 蹇熷喅绛 +31. cI鐨勫ソ澶? 鏇村皯鐨刡ug, 鏇翠綆鐨勬垚鏈, 鏇村揩鍙戠幇bug +32. 鏃㈣兘淇濊瘉璐ㄩ噺鍙堣兘鎻愰珮鍙戝竷鏁堢巼?鍗曚欢娴 +33. 鏋勫缓澶辫触鏃跺簲璇ユ庝箞瑙e喅? 璋佹彁浜ゅけ璐ヨ皝璐熻矗淇o + +--- +devOps鐧界毊涔 +绗1閮ㄥ垎:a journey to devOps The devOps framework should support business outcomes directly銆 + +绗2閮ㄥ垎:What is devOps for the enterprise system? devOps can also enable maturity by using W.E. deming鈥檚 Plan do-check-act cycle. + +绗4閮ㄥ垎devOps body of Knowledge:绗洓鑺俆PS (Lean) concept as foundation :building a stream-lined supply chain of IT services is difficult because there are many items and it is necessary to change your mindset from the familiar existing development cycle and its methodologies.(JIT means building up a stream-lined supply chain with one-piece +flow.) + +绗4閮ㄥ垎 devOps body of Knowledge:IT service management Service on just providing quick and frequent IT services and reliable operation and is led by the service master. It is most suited for SoE and SoR continuity is an essential part of the warranty (fitness for purpose) of a service. If service continuity cannot be maintained and/or restored in accordance with the requirements of the business, then the business will not experience the value that has been promised. Without continuity, the utility (fitness for use) of the service cannot be accessed. + +绗 5 绔犺鑹茶亴璐: Leads the team and facilitates, this role is the same as 鈥淪crum Master鈥 in Scrum.Implements visual control across the entire process and has a strong focus on establishing a stream-lined process with one-piece flow. + +绗5閮ㄥ垎:devOps Team Roles (Leads the team and facilitates, this role is the same as 鈥淪crum Master鈥 in Scrum. Implements visual control across the entire process and has a strong focus on establishing a stream-lined process with one-piece flow.) + +绗5閮ㄥ垎:Gatekeeper / Release coordinator: Responsible for monitoring the operational status and progress of the next release of the IT service. Make go/no go decisions about deployment according to criteria including security, compliance, regulatory requirements, maturity of operation team and their process views. + +绗7閮ㄥ垎:devOps Process Project Planning The service master creates the vision, goal, and value of the project, and then puts together the devOps team members. + +绗 7 绔 JKK 瑙i噴锛氬畠鍩轰簬 100锛呭畬鎴愰珮璐ㄩ噺椤圭洰鍒涘缓瀹屾垚瀹氫箟 + +绗7閮ㄥ垎:devOps Process Obeya is a war room which serves two purposes - information management and on-the-spot decision making. + +绗8閮ㄥ垎 devOps implementation collaboration: (Standard): This focuses on just providing quick and frequent IT services and reliable operation and is led by the service master. It is most suited for SoE and SoR + +dEVOPS鍥㈤槦鐢 6-8 鍚嶆垚鍛樼粍鎴愮殑璺ㄨ亴鑳藉洟闃熴 + +The Service Master EOL + +绮剧泭绠$悊涓殑鍏ぇ娴垂绫诲瀷 + +鎸佺画浜や粯绗11绔犲熀纭璁炬柦鍜岀幆澧冪鐞 225椤碉細鑷姩鍖栫殑鍑嗗宸ヤ綔涓庤嚜鍔ㄥ寲缁存姢鐩哥粨鍚堬紝鍙繚璇佸嚭鐜伴棶棰樺氨鑳藉湪鍙瑙佺殑鏃堕棿鍐呴噸寤哄熀纭璁炬柦銆 + +鎸佺画浜や粯绗11绔 11.7.2绔犺妭 铏氭嫙鐜鍜岄儴缃叉祦姘寸嚎銆250椤 鏋勫缓鍜屽彂甯冪鐞嗙郴缁熷簲璇ヨ兘璁颁綇鐢ㄦ潵杩愯閮ㄧ讲娴佹按绾跨殑铏氭嫙鏈烘ā鏉匡紝褰撻儴缃插埌鐢熶骇鐜鏃讹紝涔熷簲璇ヨ兘澶熷惎鍔ㄥ悓涓濂楄櫄鎷熸満妯℃澘銆 + +鎸佺画浜や粯绗洓绔 娴嬭瘯绛栫暐鐨勫疄鐜 71椤靛綋浣犳湁鏃堕棿鍐欐洿澶氱殑鑷姩鍖栨祴璇曟椂锛屽緢闅惧湪Happy Path鍜孲ad Path涔嬮棿杩涜閫夋嫨銆 濡傛灉浣犵殑搴旂敤绋嬪簭姣旇緝绋冲畾锛岄偅涔圚appy Path搴旇鏄綘鐨勯閫夛紝鍥犱负瀹冧滑鏄敤鎴锋墍瀹氫箟鐨勫満鏅 + +鎸佺画浜や粯绗4.3绔犺妭 75椤靛埗瀹氶伒瀹圛NVEST鍘熷垯[鍗崇嫭绔嬬殑锛圛ndependent锛夈佸彲鍗忓晢鐨勶紙Negotiable锛夈佹湁浠 鍊肩殑锛圴aluable锛夈佸彲浼拌鐨勶紙Estimable锛夈佸皬鐨勶紙Small锛変笖鍙祴璇曠殑锛圱estable锛塢 鐨勭敤鎴锋晠浜媅ddVMFH]鍙婅冭檻鍏堕獙鏀舵潯浠躲 + +鎸佺画浜や粯绗15绔 鎸佺画浜や粯绠$悊锛340椤典紒涓氭不鐞嗘洿鍏虫敞浜庣鍚堝害 锛坈onformance锛夛紝鍗抽伒浠庢с佷繚闅溿佺洃绠°佽矗浠诲拰閫忔槑绠$悊锛 鑰屼笟鍔℃不鐞嗭紙business governance锛夋洿鍏虫敞涓氬姟鍜屼环鍊煎垱閫犵殑鎵ц搴︼紙performance锛夈傚叾瀹烇紝鎵ц搴﹀拰绗 鍚堝害閮藉彲浠ユ弧瓒炽傝繖涓閬撶悊鍦ㄦ寔缁氦浠樹腑涔熸槸姝g‘鐨勩傞氳繃纭繚浜や粯鍥㈤槦鑳藉緱鍒板簲鐢 绋嬪簭鍦ㄧ被鐢熶骇鐜涓婄殑涓嶆柇鍙嶉锛 鏄儴缃叉祦姘寸嚎杈炬垚鈥滄墽琛屽害鈥濊繖涓洰鏍囩殑鏂规硶鍜屾墜娈点傞儴缃叉祦姘寸嚎浣夸氦浠樻祦绋嬫洿鍔犻忔槑锛屾潵甯姪鍥㈤槦杈炬垚绗﹀悎搴 + +鎸佺画浜や粯 5.4 鎻愪氦闃舵 97椤 + +15.3绔犺妭 344椤碉細鎴戜滑鐨勫叧娉ㄧ偣鍦ㄤ簬杩唬鍜屽閲忎氦浠橈紝浠ュ強璺ㄥ姛鑳借亴璐h鑹蹭箣闂寸殑鍗 浣溿345椤碉細Scrum鏄竴绉嶈凯浠e紡澧為噺杞欢寮鍙戣繃绋嬶紝閫氬父鐢ㄤ簬鏁忔嵎杞欢寮鍙戙傚寘鎷竴绯诲垪 瀹炶返鍜岄瀹氫箟瑙掕壊鐨勮繃绋嬫鏋躲347椤 寮鍙戜笌鍙戝竷锛氭垜浠帹鑽愪互杩唬澧為噺寮忚繃绋嬭繘琛岃蒋浠 鐨勫紑鍙戜笌鍙戝竷銆 + +绗3绔 鎸佺画闆嗘垚 44椤 楂樻晥浣跨敤鎸佺画闆嗘垚 鐨勯偅浜涘洟闃熻兘澶熸瘮閭d簺娌℃湁浣跨敤瀹冪殑鍥㈤槦鏇 蹇湴浜や粯杞欢锛屼笖缂洪櫡鏇村皯銆傚湪浜や粯杩囩▼ 涓紝缂洪櫡琚彂鐜板緱瓒婃棭锛屼慨澶嶅畠鐨勬垚鏈氨瓒婁綆锛 鍥犳涔熷氨澶уぇ鑺傜渷浜嗘垚鏈拰鏃堕棿銆傚洜 姝ゆ垜浠涓猴紝瀵逛簬涓撲笟鐨勮蒋浠朵氦浠樺洟闃熸潵璇达紝鎸佺画闆嗘垚涓庣増鏈帶鍒跺悓绛夐噸瑕併 + +鎸佺画浜や粯 3.7 绔犺妭 60 椤典粠鎶鏈搴︿笂鐪嬶紝鏈涓虹畝鍗曠殑鏂规硶锛堜篃鏄粠娴佺▼瑙掑害涓婅鏈鏈夋晥鐨勬柟娉曪級灏辨槸浣 鐢ㄥ叡浜殑鐗堟湰鎺у埗绯荤粺鍜屾寔缁泦鎴愮郴缁熴 63 椤 3.8 绔犺妭锛氾紝dVcS 寮曞叆浜嗕竴涓腑闂村眰锛氬湪鏈湴宸ヤ綔鍖虹殑淇敼蹇呴』鍏堟彁浜ゅ埌鏈湴搴擄紝鐒跺悗鎵嶈兘 鎺ㄩ佸埌鍏朵粬浠撳簱锛岃屾洿鏂版湰鍦板伐浣滃尯鏃讹紝蹇呴』鍏堜粠鍏朵粬浠撳簱涓皢浠g爜鏇存柊鍒版湰鍦板簱銆備互鍙 14.4 绔犺妭 + +鎸佺画浜や粯绗簲绔犮備粈涔堜笉鏄儴缃茬閬撶殑涓閮ㄥ垎锛88椤 + +6.2 绔犺妭 鏋勫缓宸ュ叿锛117 椤 鍚勬瀯寤哄伐鍏风殑涓嶅悓鐐瑰湪浜庡畠鏄换鍔″鍚戠殑锛岃繕鏄骇鍝佸鍚戠殑銆備换鍔″鍚戠殑 鏋勫缓宸ュ叿锛堟瘮濡 ant銆丯ant 鍜 MSbuild锛変細渚濇嵁涓绯诲垪鐨勪换鍔℃弿杩颁緷璧栫綉缁滐紝 鑰屼骇鍝佸 鍚戠殑宸ュ叿锛屾瘮濡 Make锛堝垱寤哄彲鎵ц鏂囦欢锛夛紝鏄牴鎹畠浠敓鎴愮殑浜х墿锛堟瘮濡備竴涓彲鎵ц鏂囦欢锛夋潵鎻忚堪銆 + +椤圭洰澶辫触锛氳浆鍚戞寔缁儴缃叉ā寮忕殑鏈浣崇涓姝ユ槸浠涔堬紵寮鍙戝簲闈炴寮忓湴娑夊強鏁翠釜椤圭洰鐨勮繍缁达紝骞跺悎浣滃叡鍚屽垱寤洪儴缃茶剼鏈 + +鍝鍋氭硶鏈夊姪浜庡湪涓嶅奖鍝嶈川閲忕殑鎯呭喌涓嬫彁楂橀熷害锛烵ne-piece-flow + +鎵嬪姩杞欢鍙戝竷杩囩▼鐨勪紭鐐规槸浠涔堬紵榧撳姳鍗忎綔锛屽洟闃熸垚鍛樺垯瀹℃煡褰兼鐨勫伐浣溿 + +绗叓绔狅細鑷姩鍖栭獙鏀舵祴璇 154 椤碉細棣栧厛锛岀敱浜庡弽棣堢幆灏 澶уぇ缂╃煭锛岀己闄疯鍙戠幇寰楁洿蹇紝涔熷氨鏇村鏄撲慨澶嶃傚叾娆★紝鐢变簬娴嬭瘯浜哄憳銆佸紑鍙戜汉鍛樺拰 瀹㈡埛闇瑕佺揣瀵嗗悎浣滄墠鑳藉垱寤轰竴涓壇濂界殑鑷姩鍖栨祴璇曞浠讹紝杩欎細淇冭繘浠栦滑涔嬮棿鐨勮壇濂藉悎 浣滐紝鑰屼笖姣忎釜浜洪兘灏嗗叧娉ㄨ蒋浠跺簲璇ヤ氦浠樼殑涓氬姟浠峰笺 + +绗 3 绔狅紝3.5.1 52 椤点53 椤 浣犵殑鍚屼簨璇达細鈥滃嵆浣挎瀯寤轰腑鏂紝浣犱篃搴旇check In銆 + +鑰佹澘闂疄鏂絛evOps锛學hat would not be a good reason? 鍥㈤槦瑙i噴浜嗘柊瀹炶返鍦ㄥ彟涓瀹跺叕鍙镐腑鐨勮繍浣滄柟寮忋 + +8.5.1 楠屾敹娴嬭瘯涓殑鐘舵 p167棣栧厛锛岃鎶靛埗浣跨敤鐢熶骇鏁版嵁鐨勫浠戒綔涓洪獙鏀舵祴璇曠殑娴嬭瘯鏁版嵁搴撶殑璇辨儜锛堝敖绠℃湁鏃 瀹冨鍚炲悙閲忔祴璇曟槸鏈夌敤鐨勶級銆傜浉鍙嶏紝鎴戜滑瑕佺淮鎶や竴涓彈鎺х殑鏁版嵁鏈灏忛泦銆傛祴璇曠殑涓涓叧 閿柟闈㈡槸寤虹珛涓涓‘鐭ョ殑璧峰鐐广傞氳繃鐢熶骇鏁版嵁鐨勫壇鏈互杩涜娴嬭瘯銆 + +12.4 绔犺妭 鏁版嵁搴撳洖婊氬拰鏃犲仠鏈哄彂甯 P268 + +11.9 鍩虹璁炬柦鍜屽簲鐢ㄧ▼搴忕殑鐩戞帶 p257 鏀堕泦鏁版嵁銆佽褰曟棩蹇椼佸缓绔嬩俊鎭睍绀烘澘銆佽涓洪┍鍔ㄧ洃鎺с傛彁鍑轰簡鍥涚鍙兘鐨勬搷浣滄潵鎺掗櫎搴旂敤绋嬪簭鏁呴殰 1,2&4 + +13.5.5 寰幆渚濊禆銆 P302 寰幆渚濊禆鏋勫缓闃舵 + +13.3 渚濊禆 P286 鏋勫缓鏃朵緷璧栦笌杩愯鏃朵緷璧栦箣闂寸殑鍖哄埆濡備笅锛氭瀯寤烘椂渚濊禆浼氬嚭鐜板湪搴旂敤绋嬪簭缂栬瘧鍜岄摼鎺ユ椂锛堝鏋滈渶瑕佺紪璇戝拰閾炬帴鐨勮瘽锛夛紱鑰岃繍琛屾椂渚濊禆浼氬嚭鐜板湪搴旂敤绋嬪簭杩愯骞跺畬鎴愬畠鐨勬煇浜涙搷浣滄椂銆 + +绗 2 绔 閰嶇疆绠$悊 P24 杩涜澧為噺鏇存敼锛屾弧瓒虫垜鎵鍦ㄧ粍缁囩殑鎵鏈夊悎瑙勬ц瀹 + +绗 11 绔 鍩虹璁炬柦绠$悊 P224 绗 11 绔 鍩虹璁炬柦绠$悊 P224 +鍑嗗閮ㄧ讲鐜鐨勮繃绋嬩互鍙婇儴缃蹭箣鍚庡鐜鐨勭鐞嗘槸鏈珷鐨勪富瑕佸唴瀹广傜劧鑰屼负浜嗚兘 澶熷仛鍒拌繖涓鐐癸紝灏辫鍩轰簬涓嬮潰杩欎簺鍘熷垯锛岀敤涓涓暣浣撴柟娉曟潵绠$悊鎵鏈夊熀纭璁炬柦銆 鈶 浣跨敤淇濆瓨浜庣増鏈帶鍒跺簱涓殑閰嶇疆淇℃伅鏉ユ寚瀹氬熀纭璁炬柦鎵澶勭殑鐘舵併 鍩虹璁炬柦搴旇鍏锋湁鑷不鐗规э紝鍗冲畠搴旇鑷姩鍦板皢鑷繁璁惧畾涓烘墍闇鐘舵併 閫氳繃娴嬭瘯璁惧鍜岀洃鎺ф墜娈碉紝搴旇姣忔椂姣忓埢閮借兘鎺屾彙鍩虹璁炬柦鐨勫疄鏃剁姸鍐点 浠涔堜笉鏄鐞嗗熀纭璁炬柦鐨勫師鍒欙紵缂栧啓鏂扮殑閫氱敤鍩虹绠$悊鑴氭湰銆 + +2.2 绔犵増鏈帶鍒 P27 浠涔堜笉琚涓烘槸瀹炵幇閰嶇疆绠$悊杩欎竴鐩爣鐨勬湁鏁堢瓥鐣ワ紵濮嬬粓灏嗕簩杩涘埗鏂囦欢鍜岄厤缃俊鎭繚瀛樺湪涓璧枫 + +11.8.1 P254 cloud 瀹夊叏鍜屾湇鍔℃按骞 + +11.8.2 浜戜腑骞冲彴 P255 灏嗗簲鐢ㄩ儴缃插埌瀹屽叏鏍囧噯鍖栫殑搴旂敤鏍堜笂锛屽氨鎰忓懗鐫涓嶉渶瑕佹媴蹇冩祴璇曠幆澧冦佽瘯杩愯 鐜鍜岀敓浜х幆澧冪殑閰嶇疆鍜岀淮鎶わ紝涔熶笉闇瑕佹媴蹇冭櫄鎷熸満鏄犲儚鐨勭鐞嗐傛渶鍚庝竴鐐瑰挨鍏舵槸闈╁懡鎬х殑銆傚湪鏈功涓紝鐢ㄤ簡澶ч噺鐨勭瘒骞呮潵璁ㄨ濡備綍鑷姩鍖栦綘鐨勯儴 缃层佹祴璇曞拰鍙戝竷娴佺▼锛屼互鍙婂浣曟惌寤哄拰绠$悊娴嬭瘯鍜岄儴缃茬幆澧冦備簯涓殑鍝釜骞冲彴鐗规ф渶鑳藉疄鐜拌嚜鍔ㄩ儴缃诧紵 Standardized stack + +10.5 绱фヤ慨澶 P216 浠讳綍鎯呭喌涓嬶紝閮戒笉鑳界牬鍧忔祦绋嬨傜揣鎬ヤ慨澶嶇増鏈 涔熻璧板悓鏍风殑鏋勫缓銆侀儴缃层佹祴璇曞拰鍙戝竷娴佺▼锛屼笌鍏朵粬浠g爜鍙樻洿娌′粈涔堝尯鍒傚彂甯 RFc 浣滀负绱фヨˉ涓佸苟閫氱煡鎵鏈夊埄鐩婄浉鍏宠呫 鐒跺悗鏍规嵁 SLa 搴旂敤绱фヨˉ涓併侾216 + +--- +楂樻晥鐨 devOps 鏂囧寲闇瑕佸叿澶囷細楂樻晥娌熼氾紝鍏辫瘑涓庝俊浠伙紝浜烘у寲鐨勫憳宸ラ厤缃拰璧勬簮 +鍐欎竴浠介」鐩珷绋嬪緢閲嶈锛屼竴璧峰啓椤圭洰鑼冨洿鏈濂界殑鐞嗙敱鏄粈涔堬細纭繚鎵鏈夊洟闃熷鎴愬姛鏈夌潃鐩稿悓鐨勫畾涔 +琛¢噺宸叉壘鍒扮▼搴忛敊璇殑鎬绘暟鏄窡韪」鐩川閲忔渶濂界殑鏂规硶鍚楋細鍏ㄥ眬鑼冨洿鍐呰岄潪灞閮ㄨ繘琛屼紭鍖 +鏈嶅姟绾у埆鍗忚瀵逛笓娉ㄤ簬澧楀姞鍟嗕笟浠峰兼湁鎵甯姪 + +--- +1. 鍦烘櫙锛5 涓湀 h 鍚庘︹︼紝寮鍙戝畬鎴愬悗鎵嶅悜绫荤敓浜х幆澧冮儴缃诧紙鑰冪偣锛屽弽妯″紡锛 +2. 鍦ㄥ彂甯冩祦绋嬩负杞欢鍙戝竷鍒涘缓涓涓彲閲嶅涓斿彲闈犵殑杩囩▼銆傦紙鑰冪偣锛岃蒋浠朵氦浠樺師鍒欙級 +3. dEVOPS 搴旇寤虹珛涓涓 Pull System銆丱ne Piece Flow 鐨 IT Super chain +4. 寤虹珛 dEVOPS New Mind of all People锛屾祦绋 One Piece Flow +5. 鍦烘櫙锛氫竴瀹跺叕鍙哥敱浜庝緵搴斿晢鐨勮姹傦紝鍙墿涓 5 涓湀鐨勬椂闂村缓绔 dEVOPS 鐨勫洟闃燂紝浠 浠浣曞喅瀹氫粬浠殑杩唬鏃堕棿鍜岄娆★紵 鏍规嵁绗﹀悎涓氬姟瑕佹眰鏉ョ‘瀹 +6. dEVOPS 鍥涗釜鏀煴 collaboration锛孧ultiple People +7. 瑕佽繘琛 dEVOPS 杞瀷锛宑oach Team 涓殑姣忎竴涓汉锛屽缓绔 blameless 鐨勬枃鍖 +8. devOps 杞瀷锛氭矡閫氥佸悓鐞嗗績銆佷汉鍛樺拰璧勬簮 +9. 鍦烘櫙锛歝EO 浠ュ墠鎬绘槸楠備笅闈㈢殑浜猴紝鐜板湪閲囩敤浜 dEVOPS 鏂瑰紡锛屾儏鍐垫湁鎵濂借浆锛屼絾鏄 娌℃湁杈惧埌鐞嗘兂鏁堟灉锛屽簲璇ワ細Trust each Other锛屽缓绔 blameless 鏂囧寲 +10. 涓涓汉鎶辨ㄥ彟涓涓汉锛岄氳繃閭欢鍒板瀹f壃瀵瑰彟涓涓汉鐨勪笉婊★紝avoidance +11. Gatekeeper 鐨勮亴璐o細Security銆乧ompliance銆丷egulatory Requirements +12. 娴垂鐨勭被鍨嬶細Extra Feature +13. 鍦 dEVOPS 椤圭洰璁″垝鏃讹紝SLR 鍖呭惈閭d簺鍐呭銆佸畨鍏ㄣ佽繛缁х瓑鍐呭 +14. dEVOPS 椤圭洰寮濮嬫椂瑕佸仛閭d簺宸ヤ綔锛烿ision銆丟oal 绛 +15. SOR 閫傜敤鏈堥偅绉 dEVOPS 鏂瑰紡锛宑ollaboration +16. Obeya锛屼俊鎭叡浜紝鍋氬喅瀹 +17. auto Provisioning auto maintenance +18. VM 妯℃澘 +19. SLa 鐨勯噸瑕佹э紝涓氬姟杩炵画鎬 +20. 鍦ㄧǔ瀹氭病鏈夋椂闂寸殑鎯呭喌涓嬭繘琛岋細Happy Path 娴嬭瘯 +21. 鍦烘櫙锛氶攢鍞汉鍛樻彁鍑轰簡涓浜涘垪閿鍞棶棰橈紝杩欎釜鐢ㄦ埛鏁呬簨绗﹀悎 INVEST 鍘熷垯锛熼棶閫夊摢 涓涓細鍙祴璇曟 +22. development Pipeline 瀵规不鐞嗙殑浣滅敤 +23. 鎻愪氦闃舵闇瑕佸仛浠涔堝伐浣滐紵 +24. 涓涓洟闃熶笁涓湀杩涜涓娆℃柊鐗堟湰鐨勯儴缃诧紝鑰屼笖鏄寜鐓фā鍧楀紑鍙戝拰閮ㄧ讲锛屽洜姝や粬浠 涓轰粬浠殑閲囩敤鐨勬槸 dEVOPS 鐨勬柟娉曪紝閫夐」闂傚悎鍚 +25. 鎸佺画闆嗘垚鐨勪紭鍔 fewer bug銆乧heaper +26. check In polices +27. Run time build time +28. 瀹夊叏闂鍑虹幇鍚庯紝濡備綍杩涜绱фュ彉鏇 +29. 璋佸彲浠ュ喅瀹氭湇鍔$粓姝 +30. 鏁版嵁搴撶鐞嗭紝姝ら鏄妧鏈锛屽ぇ姒傚唴瀹规槸瑕佸仛涓涓洖閫鑴氭湰锛屼笖瑕佷繚璇佸師鏈夋暟鎹笉 鑳藉垹闄わ紝浣嗗彲鑳介噸鏋勮〃鍐呭銆 +31. 涓嶄笂浜戠殑鐞嗙敱锛屽畨鍏紝SLa +32. Standardized stack +33. 鎵嬪伐鍙戝竷杞欢鐨勪紭鍔 +34. 鎵嬪伐娴嬭瘯鐨勭被鍨 +35. 鍦烘櫙锛氭煇浜鸿鎻愪氦鏈夐棶棰樼殑浠g爜锛屼笖鎸尟鏈夎瘝璁插埌鎻愪氦鍚庡彲鑳介氳繃鍙樻洿杩涜鏇存銆 +36. 寰幆渚濊禆 +37. Ensures performance (fast delivery) and conformance (to requirements +38. 涓嶈灏嗙敓浜ф暟鎹簱鎷垮埌娴嬭瘯鐜 +39. JKK 100%璐ㄩ噺瑕嗙洊 +40. 鐗堟湰鎺у埗锛屽反榛庯紝浼︽暒锛屾倝灏硷紝杩樻湁鍏朵粬鍦版柟瀛樺湪鏃跺樊锛屽浣曡繘琛岀増鏈帶鍒 +41. 鍩虹鏋舵瀯鐜鍑嗗 +42. cross Function 鐨 6-8 浜 +43. 涓嶈鎶婁簩杩涘埗鏂囦欢鏀捐繘鏋勪欢搴撲腑 +44. Make such as an Executable +45. Product Oriented +46. Process Master 鐨勮亴璐o紝寤虹珛鍙鍖栫湅鏉匡紝鍗曚欢娴佺瓑 +47. 閰嶇疆绠$悊绛栫暐锛屽閲忥紝鍚堣 +48. Increase speed without compromising quality + + diff --git a/devopstest_v2.md b/devopstest_v2.md new file mode 100644 index 0000000..cafe851 --- /dev/null +++ b/devopstest_v2.md @@ -0,0 +1,283 @@ +# DevOps/CD/CI棰樼洰 + +## 涓銆侀夋嫨棰橈紙20锛 + +### 1. 楠屾敹娴嬭瘯鐨勬渶浣抽夋嫨? + a. Happy Path + b. 鍥炲綊娴嬭瘯 + c. alternate Path + d. Sad Path + +a. happy path 鐩稿綋浜庡仛涓绘祦绋 + +### 2. 浜戣绠楃殑鍝釜鐗规ц兘瀹炵幇鑷姩閮ㄧ讲? + a. 鏍囧噯鏍 + b. 瑙勬ā鍖 + c. 铏氭嫙鍖 + d. 閫氱敤鎬 + +a. 鏍囧噯鏍堜娇寰楄嚜鍔ㄩ儴缃叉垚涓哄彲鑳 + +### 3. 杞欢浜や粯杩囩▼涓紝璁╂暣涓繃绋嬭嚜鍔ㄥ寲锛屽苟鑳藉鍙婃椂鍙戠幇闂鍜屼慨澶嶉棶棰橈紝鍦ㄦ杩囩▼涓,浠ヤ笅瀹炶返涓嶆槸鍙嶆ā寮忛夐」鏄細 + a锛岃姹備竴浠借灏芥枃妗o紝璇ユ枃妗f弿杩颁簡姣忎釜姝ラ涓鏄撳嚭閿欑殑鍦版柟 + b锛屽紑鍙戝畬鎴愬悗鎵嶅悜绫荤敓浜х幆澧冮儴缃 + c锛屾彁鍓嶉绻佺殑鍋氳浣犳劅鍒扮棝鑻︾殑浜 + d锛屾墜宸ヨ繘琛岀敓浜х幆澧冪殑閰嶇疆 + +c. 鐥涜嫤鐨勪簨鎯呴绻佸仛 + +### 4. 鑹ソ鐨勯厤缃鐞嗚繃绋嬶紝鏄疄鐜板紑鍙戝拰閮ㄧ讲杩囩▼鍙帶鍜屽彲閲嶅鐨勫熀纭锛屼互涓嬪摢涓唴瀹逛笉鏄壇濂介厤缃鐞嗙瓥鐣ワ細 + a. 鑳藉鍐嶇幇鎵闇鐨勪换浣曠幆澧冦 + b. 涓轰簡杈惧埌绯荤粺杩愯绋冲畾鐨勭洰鏍囷紝鍥哄寲閰嶇疆锛屼换浣曚慨鏀归兘鍋氱櫥璁般 + c. 鑳藉杩借釜鏌愪釜鍏蜂綋鐜鐨勬煇娆′慨鏀癸紝骞惰兘澶熻拷婧慨鏀规簮锛屼互鍙婁粈涔堟椂闂磋皝鍋氫簡淇敼銆 + d. 澧為噺寮忎慨鏀癸紝骞跺彲灏嗕慨鏀归儴缃插埌浠绘剰涓绉嶇幆澧冧腑銆 + +b. 涓嶆槸鏁忔嵎绛栫暐銆傚奖鍝嶈凯浠c + +### 5. 姣忎釜搴旂敤绋嬪簭閮戒緷璧栦簬杞欢銆佺‖浠躲佸熀纭璁炬柦绛夋墠鍙互姝e父宸ヤ綔锛岃繖浜涘唴瀹圭О浣滃簲鐢ㄧ▼搴忕殑鐜锛岀幆澧冪鐞嗕笌閰嶇疆绠$悊鍚屾牱閲嶈銆備互涓嬪摢绉嶄笉鏄壇濂界殑鐜绠$悊瀹炶返锛 + a. 鐜绠$悊鐨勫叧閿槸閫氳繃涓涓嚜鍔ㄥ寲杩囩▼鏉ュ垱寤虹幆澧冦 + b. 鍥犱负鐜绠$悊鐨勯噸瑕佹э紝涓鏃︾郴缁熷嚭闂锛屾淳閬h祫娣变笓瀹惰姳璐逛笉纭畾鐨勬椂闂存潵鎵惧埌闂锛屽苟淇瀹冦 + c. 淇鏌愪釜鐜鍙兘闇瑕佸ぇ閲忔椂闂达紝鍥犳锛屾渶濂藉湪鍙瑙佺殑鏃堕棿閲岄噸寤虹幆澧冿紝骞跺皢鍏舵仮澶嶅埌鏌愪釜宸茬煡鐨勬甯哥姸鎬併 + d. 鍒涘缓涓涓被鐢熶骇鐜锛岄厤缃棶棰樺彲鍦ㄦ棭鏈熸祴璇曚腑鍙戠幇銆 + +b. 鑷姩鍖栥佺畝鍗曞寲銆佸彲閲忎骇銆佸彲閲嶇幇锛屼笉鏄緷璧栬祫娣变笓瀹 + +### 6. 鍏徃鎵撶畻鏋勫缓涓鏉¢儴缃叉祦姘寸嚎锛屽叕鍙搁瀵煎笇鏈涘疄鐜伴绻佸彂甯冦 鏈夊洟闃熸垚鍛樿涓猴細杩欐潯閮ㄧ讲娴佹按绾挎渶閲嶈鐨勬槸鑷姩鍖栥傚洟闃熼鍏堣璁╁畠鑷姩鍖栬捣鏉ャ 杩欑璇存硶瀵瑰悧锛 + a. 鏄殑锛岃繖鏄纭殑銆傞儴缃叉祦姘寸嚎鑷姩鍖栨槸鎻愬崌鏁堢巼鐨勬渶閲嶈鍥犵礌銆 + b. 鏄殑锛岃繖鏄纭殑銆傚叧娉ㄨ嚜鍔ㄥ寲閮ㄧ讲娴佹按绾跨殑鍒涘缓锛屽厠鏈嶄箣鍚庡彲鑳介亣鍒扮殑娼滃湪闂銆 + c. 涓嶏紝杩欐槸閿欒鐨勩傚畬鎴愬崟浠舵祦鍙婁竴涓彲闈犵殑閮ㄧ讲娴佺▼鏄紭鍏堢骇鏈楂樼殑浠诲姟銆傝娴佺▼鐨勮嚜鍔ㄥ寲鍙互鏆傜紦瀹炴柦銆 + d. 涓嶏紝杩欐槸閿欒鐨勩傞鍏堝簲褰撹嚜鍔ㄥ寲鐨勬槸娴嬭瘯娴佺▼鑰岄潪閮ㄧ讲娴佹按绾裤 + +c, 鏃犺浣曟椂锛屾墍鏈夐儴缃叉祦姘寸嚎棣栧厛搴斿綋鏄崟浠舵祦绋嬬殑閮ㄧ讲娴佹按绾匡紝鏃犻渶鑷姩鍖栧氨鍙珮鏁堣繍琛屻備竴鏃﹁娴佹按绾跨ǔ瀹氱‘绔嬶紝灏辨湁鏈轰細閫夋嫨鍙鐨勬祦绋嬪疄鏂借嚜鍔ㄥ寲銆備絾鏄紝鏋勫缓绋冲畾鐨勯儴缃叉祦姘寸嚎姘歌繙姣旇嚜鍔ㄥ寲鏇撮噸瑕併 + +### 7. 鏈夊緢澶氭柟娉曞彲浠ヤ娇缁勭粐瓒嬪悜鎴愮啛锛屼笅鍒楀摢绉嶆柟娉曚笉浼氫娇浣犵殑devOps缁勭粐鏇磋秼鎴愮啛锛 + a. 鏄庣‘瀹氫箟鐩爣瀹氬拰閲岀▼纰戯紝甯姪鍥㈤槦鎴愬憳鍒ゆ柇鍏舵棩甯告椿鍔ㄦ槸鍚︽湁浠峰笺 + b. 鏄庣‘瀹氫箟娴佺▼锛屾敮鎸佸苟淇冧娇鍥㈤槦鎴愬憳閫愭棩鏀硅繘娴佺▼銆 + c. 瀵逛細璁殑鎵鏈夊唴瀹硅繘琛岃褰曪紝浣夸綘鐨勫洟闃熸垚鍛樺彲浠ュ緢鏂逛究鐨勪簡瑙e埌姣忔娌熼氱殑鍐呭淇℃伅銆 + d. 鐩戞帶骞惰褰曟瘡澶╃殑娲诲姩锛屼互鎵惧嚭灏忚寖鍥村唴姣忓ぉ鍙栧緱鐨勮繘姝ュ苟浜堜互璧炴壃銆 + +c, 杩欐棤鍔╀簬devOps缁勭粐鐨勬垚鐔熴傛槸鍚﹁瀵逛細璁繘琛屽叏绋嬭褰曞苟鍐嶆瀹℃煡锛屽苟娌℃湁涓ユ牸鐨勮姹傘傛湁蹇呰璁板綍杈炬垚鍏辫瘑鐨勫唴瀹癸紝鑰屼笉鏄褰曟暣 鍦轰細璁 + +### 8. 浣犺涓鸿嚜宸辩殑寮鍙戝洟闃熸槸涓鏀湡姝g殑鍥㈤槦銆 浣犺寰楁湁浠涔堢‘鍒囩殑鐗瑰緛琛ㄦ槑杩欐槸涓鏀洟闃熻屼笉鍙槸涓涓皬缁勫憿锛 + a. 璇ュ洟闃熼伒瀹堝湪鍥㈤槦浼氳涓叡鍚屽埗瀹氱殑瑙勫垯銆 + b. 鍥㈤槦鍙紑鑷繁涓绘寔鐨勯珮鏁堜細璁 + c. 鍥㈤槦浠ョǔ瀹氱殑宸ヤ綔鑺傚锛屾湞鐫鍏卞悓鐨勭洰鏍囨帹杩涖 + d. 璇ュ洟闃熼氳繃璐ㄨ璐熻矗鏌愰」宸ヤ綔鐨勫洟闃熸垚鍛樼殑鏂瑰紡鏉ヨВ鍐抽棶棰樸 + +d 涓鏀湡姝g殑鍥㈤槦鑳藉缁存寔绋冲畾鐨勫伐浣滆妭濂忥紝骞惰兘澶熷缁堝悜鐫鍏卞悓鐨勭洰鏍囧姫鍔涖 + +### 9. 涓洪噰鐢ㄦ暣浣撴柟娉曞鐞嗘墍鏈夊熀纭璁炬柦锛屽簲褰撻伒寰摢涓ゆ潯鍘熷垯? + a. + 1 浣犵殑鍩虹璁炬柦搴斿叿澶囩殑鐘舵侀渶瑕侀氳繃鍙樻洿鎺у埗閰嶇疆鏉ョ‘瀹氥 + 2 浣犲簲褰撻氳繃鐩戞帶涓庝簨浠剁鐞嗭紝鍙婃椂浜嗚В鍩虹璁炬柦鐨勫噯纭姸鎬併 + b. + 1 闇瑕侀氳繃鍙樻洿鎺у埗閰嶇疆鏉ョ‘瀹氫綘鐨勫熀纭璁炬柦搴斿叿澶囩殑鐘舵併 + 2 浣犲簲褰撻氳繃浠櫒浠〃鍙婁簨浠剁鐞嗭紝濮嬬粓浜嗚В鍩虹璁炬柦鐨勭‘鍒囩姸鎬併 + c. + 1 浣犵殑鍩虹璁炬柦搴斿叿澶囩殑鐘舵侀渶瑕侀氳繃鐗堟湰鎺у埗閰嶇疆鏉ョ‘瀹氥 + 2 浣犲簲褰撻氳繃褰撳墠浜嬩欢涓庝簨浠剁鐞嗭紝濮嬬粓浜嗚В鍩虹璁炬柦鐨勭‘鍒囩姸鎬併 + d. + 1 浣犵殑鍩虹璁炬柦搴斿叿澶囩殑鐘舵侀渶瑕侀氳繃鐗堟湰鎺у埗閰嶇疆鏉ョ‘瀹氥 + 2 浣犲簲褰撻氳繃浠〃鐩樹笌鐩戞帶濮嬬粓浜嗚В鍩虹璁炬柦鐨勭‘鍒囩姸鎬併 + +d, 涓洪噰鐢ㄦ暣浣撴柟娉曞鐞嗘墍鏈夊熀纭璁炬柦锛屽簲褰撻伒寰繖涓ゆ潯鏍稿績鍘熷垯銆 + +### 10. 鍦ㄦ晱鎹峰拰devops涓惛鏀朵簡寰堝绮剧泭鏍稿績姒傚康銆傚疄鏂絛evOps鏃讹紝灏嗙簿鐩婄殑鐩稿叧姒傚康搴旂敤鍦╠evOps杩囩▼涓紝鏈夊姪浜庢垚鍔熷疄鏂絛evops銆 鍦ㄦ杩囩▼涓紝绮剧泭绠$悊鐨勫摢浜涘師鍒欐垨瀹炶返鏂规硶鏈鏈夋晥? + a. Kaizen(涓撴湁璇嶏紝鎰忎负灏忕殑銆佷笉鑺遍挶鐨勬寔缁敼鍠) + b. 5S - 鏁寸悊锛圫HIRI锛夈佹暣椤匡紙SEITON锛夈佹竻鎵紙SEISO锛夈佹竻娲侊紙SEIKETSU锛夈佺礌鍏伙紙SHITSUKE锛 + c. Obeya绯荤粺(鍙鍖栫鐞) + d. 鍗曚欢娴佷笌璐ㄩ噺妫鏌 + +d, 鍒涘缓涓涓彲琛岀殑銆佸崟浠堕儴缃叉祦姘寸嚎灏嗘湁鍔╀簬鎴愬姛瀹炴柦devOps銆俤evOps涓渶閲嶈鐨勫伐浣滃湪浜庢瀯寤轰粠寮鍙戦儴闂ㄥ埌杩愮淮閮ㄩ棬鐨勪笂娓告祦绋嬶紝灏ゅ叾鏄拡瀵瑰崟涓閮ㄧ讲娴佹按绾裤傝川閲忔鏌ワ紙JKK锛夋槸鑳藉杈炬垚杩欎竴鐩爣鐨勬渶鏈夋晥鐨勫伐浣滆涓恒 + +### 11. 鎸佺画闆嗘垚涓嶄細鍗曠嫭鐨勫府浣犱慨澶嶆瀯寤鸿繃绋嬶紝鍦ㄤ腑鍚庢湡寮灞曟寔缁泦鎴愶紝鎰忓懗鐫鍦ㄦ瀯寤鸿繃绋嬮渶瑕佽楄垂澶ч噺宸ヤ綔銆 涓轰簡浣挎寔缁泦鎴愭洿楂樻晥锛屾棭鏈熼樁娈碉紝涓鑸笉浼氭秹鍙婄殑宸ヤ綔鏄紵 + a. 棰戠箒鎻愪氦浠g爜鍒扮増鏈帶鍒跺簱 + b. 鍒涘缓鍒嗘敮锛屽苟灏芥棭鎻愪氦浠g爜鍒板垎鏀 + c. 鍒涘缓鑷姩鍖栨祴璇曞浠 + d. 淇濇寔杈冪煭鐨勬瀯寤哄拰娴嬭瘯杩囩▼ + +b. 搴旀彁浜ゅ埌涓诲共锛屽垎鏀鏄撶牬鍧忓嵆鏃堕泦鎴 +鎸佺画浜や粯 P46 + +### 12. 鍏充簬鐗堟湰鎺у埗锛屼互涓嬭娉曚笉姝g‘鐨勬槸锛 + a. 婧愪唬鐮佸繀椤荤撼鍏ョ増鏈帶鍒躲 + b. 閰嶇疆淇℃伅蹇呴』绾冲叆鐗堟湰鎺у埗銆 + c. 涓轰簡鍔犲揩鍙戝竷鍛ㄦ湡鍜屾彁楂樿蒋浠惰川閲忥紝灏嗙紪璇戝櫒鎴栧叾浠栫浉鍏冲伐鍏风殑浜岃繘鍒堕暅鍍忕撼鍏ョ増鏈帶鍒躲 + d. 涓轰簡鍔犻熸墦鍖咃紝灏嗘簮浠g爜缂栬瘧鍚庣殑浜岃繘鍒舵枃浠剁撼鍏ョ増鏈帶鍒躲 + +d. 涓嶆帹鑽 + 1. 姣旇緝澶э紝 + 2. 姣忔閲嶆柊鏋勫缓閮戒細閲嶆柊鐢熸垚浜岃繘鍒舵枃浠讹紝鏃犲繀瑕 + +### 13. 涓涓紑鍙戝洟闃熷devOps鎰熷叴瓒c備粬浠富瑕佹劅鍏磋叮鐨勫璞℃槸鎸佺画闆嗘垚锛坈I锛夈備粬浠洰鍓嶅紑鍙戝苟缁存姢鐫涓夌涓昏瑙e喅鏂规鍙婂洓绉嶆瑕佽В鍐虫柟妗堛備粬浠噰鐢⊿crum瀹炶返鏂规硶銆傛瘡娆″啿鍒洪兘闇瑕佸洓鍛ㄦ椂闂达紝骞冲潎姣忓崄澶╁埌鍗佷簲澶╁娴嬭瘯鐜閮芥湁涓娆℃彁浜ゅ彂甯冿紝骞冲潎姣忎釜鏈堝鐢熶骇鐜鏈変竴娆″彂甯冦備粬浠兂涓虹鐞嗗眰鍒跺畾涓涓畾鎬х殑鍟嗕笟璁鸿瘉锛屾潵鏀寔浠栦滑涓哄垱寤烘寔缁泦鎴愬疄璺垫ā寮忚屼粯鍑虹殑鎶曡祫涓庡姫鍔涖 鎸佺画闆嗘垚鏈夊摢浜涙樉鎬ф敹鐩婂璇ュ晢涓氳璇佹渶涓烘湁鍒╋紵 + a. 姣忓ぉ瀵规祴璇曠幆澧冭繘琛屼竴娆¢儴缃茶兘鏋佸ぇ鐨勬彁楂樺晢涓氭晥鐩婂苟涓斿ぇ澶х缉鍑忓紑鍙戞垚鏈 + b. 杩欐湁鍔╀簬鎻愬崌鍥㈤槦绮剧銆傜敱浜庡叕鍙稿凡缁忓湪浣跨敤Scrum锛屾寔缁泦鎴愬皢涓哄叕鍙镐笟鍔″甫鏉ユ樉钁楃殑鐩婂銆 + c. 瀹冮氳繃鏇村ソ鐨勯泦鎴愭祴璇曟彁楂樹簡涓氬姟绋冲畾鎬э紝鍚屾椂缁存寔鍙戝竷閫熷害浠ラ槻姝骇鐢熼澶栨垚鏈 + d. 鍦ㄧ敓浜х幆澧冧腑锛屾瘡澶╄繘琛屼竴娆′俊鎭彂甯冭兘澶熸彁鍗囦笟鍔℃敹鐩婏紝骞跺ぇ澶у噺灏戝紑鍙戞垚鏈 + +d, 鏇村揩閫熺殑鍚戠敓浜х幆澧冨彂甯冩槸鎸佺画闆嗘垚鐨勪竴澶т富瑕佺泭澶勶紝姝ゅ杩樺寘鎷洿蹇熷湴鍙戠幇鏁呴殰浠ュ噺灏戝紑鍙戞垚鏈拰鏁呴殰淇鎴愭湰銆 + +### 14. 鍏充簬浣跨敤鑴氭湰鍘绘瀯寤哄拰閮ㄧ讲娴佺▼鑷姩鍖栵紝浠ヤ笅璇存硶姝g‘鐨勬槸锛 + a. 姣忕鐜閲囩敤涓涓剼鏈紝骞跺皢鍏朵綔涓虹増鏈帶鍒剁郴缁熺殑涓閮ㄥ垎鍔犱互缁存姢銆 + b. 涓嶅悓鐜浣跨敤涓嶅悓鐨勭壒瀹氳剼鏈紝浠ヨВ鍐崇幆澧冧箣闂寸殑宸紓闂銆 + c. 涓嶅悓鐜閲囩敤鍚屾牱鐨勮剼鏈紝瀵圭壒瀹氱殑閰嶇疆閲囩敤鎵嬪姩鍙傛暟銆 + d. 閲囩敤鍚屼竴鑴氭湰鍦ㄤ笉鍚岀幆澧冧腑杩涜閮ㄧ讲锛屽苟鍗曠嫭绠$悊閰嶇疆淇℃伅銆 + +d, 鑴氭湰搴斿綋淇濇寔涓鑷达紝鎵嶈兘淇濊瘉鏋勫缓鍜屼氦浠樻祦绋嬪緱鍒版湁鏁堟祴璇曘傜幆澧冧箣闂达紙濡俇RI鍜孖P绛夛級鐨勫樊寮傚簲褰撲綔涓洪厤缃鐞嗘祦绋嬬殑涓閮ㄥ垎浜堜互澶勭悊銆 + +### 15. 褰撴湁杩愮淮渚у彉鏇存椂锛岃繍缁撮儴闂ㄥ憡鐭ュ紑鍙戦儴闂ㄧ殑鏈浣虫椂闂存槸浣曟椂锛 + a. 鏃犻渶鍛婄煡寮鍙戝洟闃熴傝繍缁翠晶鐨勫彉鏇翠粎杩愮淮鍥㈤槦鐭ユ檽鍗冲彲銆 + b. 绔嬪埢鎵ц銆傚簲褰撳敖蹇氱煡寮鍙戦儴闂ㄣ + c. 娆℃棩鏃╂櫒鐨凷crum浼氳涓 + d. 褰撹繍缁村洟闃熷凡缁忓畬鎴愰獙鏀舵祴璇曟椂銆 + +b, 搴斿綋绔嬪嵆鍛婄煡寮鍙戦儴闂紝璁╀粬浠兘澶熼瑙佹綔鍦ㄧ殑椋庨櫓鍜岄棶棰樸 + +### 16. 鑰冭檻瀵瑰熀鏈儴缃叉祦姘寸嚎杩涜鍏蜂綋瑙f瀽銆 鍝釜闃舵琛ㄦ槑璇ョ郴缁熷湪鍔熻兘鎬т笌闈炲姛鑳芥у眰闈㈠潎鍙戞尌浣滅敤锛 + a. 鑷姩鍖栭獙鏀舵祴璇 + b. 鏋勫缓涓庡崟鍏冩祴璇 + c. 鎵嬪姩楠屾敹娴嬭瘯 + d. 鐗堟湰鎺у埗 + +a. 鑷姩鍖栭獙鏀舵祴璇曢樁娈佃〃鏄庯紝绯荤粺鍦ㄥ姛鑳芥т笌闈炲姛鑳芥у眰闈笂宸ヤ綔姝e父锛屽湪琛屼负涓婂畠鑳芥弧瓒崇敤鎴风殑闇姹傚拰瀹㈡埛鐨勮鏍艰姹傘 + +### 17. 寮鍙戝洟闃熷綋鍓嶅湪娴嬭瘯涓亣鍒拌澶氭寫鎴樸傜洰鍓嶄粬浠娇鐢ㄤ汉宸ラ獙鏀舵祴璇曟祦绋嬨 寮鍙戣呰涓轰粬浠墍鍒涘缓鐨勫崟鍏冩祴璇曟槸鍗佸垎鍛ㄥ瘑鐨勶紝鍙互閬垮厤鍥為銆 鍦ㄦ瘡娆″彂甯冩椂锛屽紑鍙戝洟闃熼兘闇瑕佽姳璐100涓囧湪浜哄伐楠屾敹娴嬭瘯鐜妭銆 棰嗗灞傝姹傚紑鍙戝洟闃熷疄鏂借嚜鍔ㄥ寲楠屾敹娴嬭瘯锛屼互闄嶄綆娴嬭瘯鐨勬绘垚鏈苟灏藉彲鑳藉噺灏戝紩鍏ョ敓浜х幆澧冧腑鐨勪唬鐮佺己闄锋暟閲忓拰鍥為娆℃暟銆 鍦ㄤ緷鐓ц嚜鍔ㄥ寲闇姹傜‘瀹氬簲鐢ㄧ▼搴忕殑楠屾敹鏍囧噯鏃讹紝搴斿綋閬靛惊浠涔堝師鍒欙紵 + a. agile锛堟晱鎹凤級鍘熷垯 + b. aTaM锛堟灦鏋勬潈琛″垎鏋愭硶锛夊師鍒 + c. dIVEST鍘熷垯 + d. INVEST鍘熷垯 + +d, 楠屾敹娴嬭瘯婧愯嚜楠屾敹鏍囧噯锛屽洜姝や綘鐨勫簲鐢ㄧ▼搴忕殑楠屾敹鏍囧噯鐨勫埗瀹氬簲褰撹冭檻鑷姩鍖栧洜绱狅紝閬靛惊INVEST鍘熷垯锛 + - Independent(鐙珛鎬) + - Negotiable(鍙崗鍟) + - Valuable(鏈変环鍊) + - Estimatable(鍙及璁) + - Small(灏忚屽皯) + - Testable(鍙祴璇) + +### 18. 鑷姩鍖栨祴璇曟槸楂樻晥杞欢鍙戝竷鍜屽疄鐜版寔缁氦浠樼殑鍩虹锛屼互涓嬮偅涓绫绘祴璇曚笉瀹滃叏闈㈣嚜鍔ㄥ寲銆 + a. 瀹归噺娴嬭瘯 + b. GUI娴嬭瘯 + c. 鍗曞厓娴嬭瘯 + d. 鎺㈢储鎬ф祴璇 + +d. 鎺㈢储鎬ф祴璇曚竴鑸渶缁撳悎浜哄伐娴嬭瘯 + +### 19. 鍏徃姝e湪浣跨敤devOps銆傝鍏徃瀹炴柦浜嗘寔缁儴缃诧紝骞跺叿澶囬珮搴﹁嚜鍔ㄥ寲楠屾敹娴嬭瘯鍜屾瘡鏃ュ悜鐢熶骇閮ㄤ氦浠樻柊杞欢鐨勭ǔ瀹氶儴缃叉祦姘寸嚎銆傚叕鍙告湁涓涓法澶х殑鏁版嵁搴撳強浼楀鐢ㄦ埛銆傝鍏徃鍏峰鍏ㄩ潰鍙潬鐨勫閲忔祴璇曠瓥鐣ャ傜敱浜庤鍏徃鐜骞垮ぇ鑰屽鏉傦紝闅忕潃姣忎釜鏂扮増鏈殑鍙戝竷锛岀敓浜ч儴灏变細鍑虹幇涓浜涘皬鏁呴殰銆 浠涔堢瓥鐣ヨ兘澶熸渶鏈夋晥鍦板府鍔╄鍏徃棰勯槻杩欎簺鏁呴殰锛 + a. 閲囩敤閲戜笣闆鍙戝竷 + b. 鑷姩鍖栧閲忔祴璇 + c. 闄嶄綆浜や粯鐜 + d. 閲囩敤钃濈豢閮ㄧ讲 + +a. + - 閲戜笣闆鍙戝竷: + 鍖呮嫭鍚戠敓浜ф湇鍔″晢涓殑涓灏忛儴鍒嗘帹鍑烘柊鐗堟湰鐨勫簲鐢ㄧ▼搴忥紝浠ュ揩閫熸敹闆嗗弽棣堛傝繖鑳藉蹇熷彂鐜版柊鐗堟湰涓嚭鐜扮殑鎵鏈夐棶棰橈紝鑰屼笉浼氬澶у鏁扮敤鎴蜂骇鐢熷奖鍝嶏紝鍥犱负宸ヤ綔閲忔槸閫愭笎澧為暱鐨勶紱鍚屾椂杩欎竴鍋氭硶杩樿兘纭畾鍝嶅簲鏃堕棿鍙婂叾浠栧伐浣滆〃鐜拌 閲忔爣鍑嗭紝鍑忓皯鏂扮増鏈彂甯冪殑椋庨櫓锛屽苟甯姪灏藉揩鍙戠幇涓庝慨澶嶆紡娲炪 + - 钃濈豢閮ㄧ讲 + 闇瑕佸ぇ閲忚祫婧愶紝鍥犺屽湪璇ユ儏澧冧腑浠d环楂樻槀銆傛澶栵紝鑻ラ渶瑕佸洖閫锛屽湪澶у瀷鏁版嵁搴撲腑閲囩敤杩欎竴绛栫暐鍙兘瀵艰嚧鏁呴殰鎴栧彧璇绘儏鍐靛彂鐢熴傚彟澶栵紝杩欎篃鏃犲姪浜庡閲忔祴璇曟晥鐜囩殑鎻愰珮銆 + +### 20. 鍏徃姝e湪灏濊瘯杞彉锛屽苟寮濮嬩娇鐢╠evOps鐨勬柟寮忓紑灞曞伐浣溿備綘鐨勫洟闃熶篃鍦ㄧ粡鍘嗚繖涓杞彉銆 浣犳鍦ㄥ弬涓庤璁轰唬鐮佹彁浜ら樁娈电殑鏈浣冲疄璺点 鏌愬悓浜嬭锛氣滃綋鏌愪竴鏋勫缓閬埌鐮村潖涓旀棤浜烘媴璐f椂锛屾垜浠簲褰撴壘鍑洪犳垚鐮村潖鐨勪汉骞惰姹備粬浠睍寮宸ヤ綔锛屼互淇濊瘉浠栦滑鑳戒慨澶嶈繖涓鏋勫缓銆傗 杩欐牱鍋氬悎閫傚悧锛 + a. 鏄殑銆傚彧鏈夌牬鍧忔瀯寤虹殑浜烘墠鑳藉淇瀹冿紝鍥犳浣犲簲褰撴壘鍒拌礋璐d汉锛屽嵆浣胯繖鏍峰彲鑳戒細璁╀汉鎰熻涓嶈垝鏈嶃 + b. 鏄殑銆備綘搴斿綋濮嬬粓涓虹牬鍧忔瀯寤鸿礋璐c傚鏋滀綘涓嶈礋璐o紝浣犵殑鍚屼簨灏嗗彲鑳藉己鍒舵墽琛岃繖椤硅瀹氥 + c. 涓嶏紝devOps鐜涓笉瀛樺湪杩借矗銆傝嫢鍚屼簨涓嶆壙鎷呰矗浠伙紝涓嶈寮鸿揩浠栦滑銆 + d. 涓嶏紝浣犲簲褰撻鍏堜慨澶嶆瀯寤恒傜劧鍚庢娊鍑烘椂闂达紝纭畾鐩稿叧璐熻矗浜哄苟杩涜澶勭綒銆 + +c, Devops鏂囧寲涓嶆彁鍊″己杩换浣曚汉鍋氫换浣曚簨銆傜姱閿欐槸鍙互鎺ュ彈鐨勩傚洟闃熸垚鍛樺叡鍚屽崗浣滀互鍏嬫湇鍚勭閿欒鎴栨寫鎴樸 + + +## 浜屻佺畝绛旈锛5锛 +### 1. 绠杩癲evops鑳藉甫鏉ュ摢浜涙晥鏋滐紵 + - 蹇熷彂甯 + - 闄嶄綆鎴愭湰 + - 鎸佺画鍙嶉锛屾彁楂樿蒋浠惰川閲 + - 鏇村叧娉ㄤ笟鍔′骇鍑猴紝缁欏鎴峰甫鏉ヤ环鍊 + +### 2. 姣忎釜绯荤粺閮戒細閬囧埌杩欑鎯呭喌锛氬彂鐜颁竴涓弗閲嶇己闄凤紝蹇呴』灏藉揩淇銆傜畝杩扮揣鎬ュ彉鏇磋繃绋? + 闇鐗㈣锛氫换浣曟儏鍐典笅锛岄兘涓嶈兘鐮村潖娴佺▼锛岀揣鎬ヤ慨澶嶇増鏈悓鏍疯蛋鏋勫缓銆侀儴缃层佹祴璇曘佸彂甯冩祦绋嬶紝涓庡叾浠栦唬鐮佸彉鏇存病鏈夊尯鍒 + - 鐢宠鍙樻洿(Request for change,RFc) + - 鍒嗘瀽褰卞搷 + - 閫氱煡鍒╃泭鐩稿叧鏂 + +### 3. devops鏂囧寲杞彉鍖呭惈鍝簺? + - 楂樻晥 + - 浜插拰 + - 鍗忎綔 + - 楂樺害淇′换 + - 鍚岀悊蹇 + - 闈炶按璐 + - 鍗曚欢娴 + +### 4. 鎸佺画闆嗘垚涓嶅厜鏄竴浜涘伐鍏风粍鍚堬紝鏇存槸涓绉嶅疄璺碉紝瀹冪殑鏈夋晥鎬т篃渚濊禆浜庡洟闃熺邯寰嬨傜畝杩癱I(鎸佺画闆嗘垚)鐨勫ソ澶勶紝鍙婁负浜嗗疄鐜版寔缁泦鎴愮洰鏍囷紝鏈夊摢浜涜壇濂界殑瀹炶返? + 濂藉锛 + - 杞欢鍦ㄤ换浣曟椂鍊欏彲宸ヤ綔 + - 鏇村皯鐨刡ug + - 鏇翠綆鐨勬垚鏈 + - 鏇村揩鍙戠幇bug + 鑹ソ瀹炶返鎴栫邯寰嬶細 + - 鏋勫缓澶辫触鍚庝笉瑕佸悜鐗堟湰搴撴彁浜ゆ柊浠g爜, 纭繚杞欢涓鐩村彲宸ヤ綔 + - 鏈湴鏋勫缓骞惰繍琛屾彁浜ゆ祴璇曪紝娴嬭瘯閫氳繃鎵嶇户缁伐浣 + - 涓嶈灏嗗け璐ョ殑鏋勫缓娉ㄩ噴鎺 + - 涓鸿嚜宸卞鑷寸殑闂璐熻矗 + - 鎵鏈変汉涓鸿川閲忚礋璐 + ... + +### 5. 鍦ㄨ嚜鍔ㄥ寲杩愮淮涓紝瑕佸疄鐜板熀纭璁炬柦鍜屽簲鐢ㄧ▼搴忕殑鐩戞帶绛栫暐锛岄氬父瑕佽冭檻鍝簺鏂归潰鍐呭鎴栦粠鍝簺鏂归潰鐫鎵嬶紵 + - 閲囬泦鏁版嵁锛岃蒋纭欢杩愯鎯呭喌锛屽仴搴峰害锛岀粺璁′俊鎭瓑, 閫氳繃SNMP/TR069绛 + - 璁板綍鏃ュ織锛岃В鏋愩佸垎鏋愩佺粺璁℃棩蹇楁枃浠讹紝骞跺叧娉ㄦ棩蹇楃瓑绾 + - 寤虹珛淇℃伅灞曠ず鏉(dashborad),鍙鍖 + - 寤虹珛鑷姩閫氱煡/鍛婅鏈哄埗 + +## 涓夈佽杩伴锛2锛 +### 1. 鍦ㄨ蒋浠跺彂甯冭繃绋嬪叡锛屾垜浠父甯哥湅鍒版祴璇曘佽繍缁淬佸紑鍙戝洟闃熷崗浣滀笉鐣呭鑷寸殑娴佺▼鍙楅樆锛岄儴缃叉祦姘寸嚎浠庣鍒扮鏉ヨ疮绌挎祦绋嬶紝瀹炵幇鑷姩鍖栨瀯寤恒侀儴缃层佹祴璇曞拰鍙戝竷銆傚叕鍙告帹杩涙晱鎹/devops锛岃缁撳悎瀹炶返锛岃杩板浣曟瀯寤轰竴濂楅儴缃叉祦姘寸嚎锛屼互鍙婅繖濂楅儴缃叉祦姘寸嚎濡備綍鍦ㄥ疄璺典腑鏇村ソ鐨勫疄鐜版寔缁氦浠樸 + +#### 鍐呭瑕佺偣锛 缁撳悎瀹炶返鏉ラ槓杩 + 1. 閮ㄧ讲娴佹按绾挎祦绋 + - 鎻愪氦,鐗堟湰鎺у埗搴 + - 鑷姩鏋勫缓鍜屽崟鍏冩祴璇曪紙鍙兘娑夊強鑷姩閰嶇疆绠$悊锛 + - 閮ㄧ讲浜岃繘鍒跺寘 + - 鑷姩鍖栭獙鏀舵祴璇(涓鑸仛鍐掔儫娴嬭瘯锛屼篃鍙兘鍖呮嫭鑷姩鍖栧閲忋佸畨鍏ㄧ瓑闈炲姛鑳芥ф祴璇) + + - 杩愮淮涓閿儴缃插埌鐢熶骇鐜锛堝鍣ㄥ寲,鐢熶骇鐜閰嶇疆锛岄儴缃蹭簩杩涘埗鍖咃級 + 娴佺▼鐨勮捣鐐规槸寮鍙戜汉鍛樺悜鐗堟湰鎺у埗搴撴彁浜や唬鐮侊紝娴佹按绾垮鎻愪氦浣滃嚭鍝嶅簲锛岃Е鍙戞祦姘寸嚎鐨勪竴涓疄渚嬶紝缂栬瘧浠g爜锛岃繍琛屽崟鍏冩祴璇曪紝鎵ц浠g爜鍒嗘瀽锛屽垱寤鸿蒋浠剁殑浜岃繘鍒跺寘锛涘鏋滄墍鏈夊崟鍏冩祴璇曢氳繃锛屼唬鐮佺鍚堟爣鍑嗭紝瀹屾垚杞欢鎵撳寘锛涗箣鍚庤Е鍙戣嚜鍔ㄥ寲楠屾敹銆 + + 2. 鏋勫缓娴佹按绾胯繃绋 + - 瀵逛环鍊兼祦寤烘ā骞跺垱寤虹畝鍗曠殑鍙伐浣滄鏋讹紙姣斿娴佽鐨刯enkins锛 + - 灏嗘瀯寤哄拰閮ㄧ讲娴佺▼鑷姩鍖 + - 灏嗗崟鍏冩祴璇曞拰浠g爜鍒嗘瀽鑷姩鍖 + - 灏嗗姛鑳斤紙楠屾敹锛夋祴璇曡嚜鍔ㄥ寲 + - 灏嗗彂甯冭嚜鍔ㄥ寲 + + 3. 涓浜涜壇濂藉疄璺 + - 閮ㄧ讲娴佹按绾跨殑鎴愬姛鐨勫叧閿箣涓鏄悇涓幆鑺傝兘澶熷敖蹇緱鍒板弽棣 + - 椤圭洰杈冨ぇ鎯呭喌涓嬶紝鍏ㄩ噺鎴栧洖褰掓祴璇曞彲鑳借楄垂澶ч噺鐨勬椂闂达紝鍙兘鎵撴柇鎸佺画闆嗘垚鏁堢巼锛屽湪娴佹按绾夸腑寰寰鍙仛鍐掔儫娴嬭瘯锛岄氬父瑕佸湪涓涓や釜灏忔椂鍐呭畬鎴愯杩囩▼銆 + - 纭繚鐢熶骇涓儴缃茬殑鍖呬笌娴佹按绾跨敓鎴愮殑浜岃繘鍒跺寘鏄悓涓涓紝鎴栬呭鍖呭仛HaSH楠岃瘉銆傞噸鏂板垱寤轰簩杩涘埗鍖呭皢甯︽潵涓嶄竴鑷撮闄┿ + - 濡傛灉鏌愪釜鐜妭澶辫触锛屽簲鍋滄鏁翠釜娴佹按绾裤傛暣涓洟闃熷澶辫触璐熻矗銆 + - 璞″叾浠栦氦浠樼殑搴旂敤涓鏍凤紝瀵归儴缃叉祦姘寸嚎杩涜澧為噺寮忓疄鐜帮紝涓嶆柇鏀瑰杽鍜岄噸鏋勩 + - 璁╂瘡涓幆鑺傚彲瑙嗗寲锛岃澶у鑳藉娓呮櫚鐨勭湅鍒板摢涓幆鑺傛湁浠涔堥棶棰樸 + + +鍙傝<鎸佺画浜や粯>绗簲绔犵浉鍏冲唴瀹 + +### 2. 涓涓數淇$骇搴旂敤閮ㄧ讲鍦ㄤ簯涓婏紝闅忕潃涓氬姟涓嶆柇婕旇繘锛岀郴缁熺敤鎴峰拰鏁版嵁閲忎笉鏂鍔狅紝浜戣祫婧愮殑绋冲畾鎬у拰绯荤粺鐨勫鏉傛у甫鏉ョ殑绯荤粺鏈嶅姟涓柇鐨勯闄╄秺鏉ヨ秺澶э紝绯荤粺涓柇鐨勫奖鍝嶄篃闅忎箣澧炲姞銆傝缁撳悎瀹炶返锛岃杩颁粠鍝簺鏂归潰鏉ユ彁鍗囩郴缁熷彲鐢ㄦф垨鎻愬崌绯荤粺瀹圭伨鑳藉姏銆 浠庝互涓嬭鐐圭粨鍚堝疄璺靛睍寮璁鸿堪锛 + +#### 浠庝互涓嬭搴︾粨鍚堝簲鐢ㄨ繘琛屽垎鏋愶細 + 鏋舵瀯鎵嬫锛 + - 鍐枫佺儹澶囦唤锛屽績璺虫娴嬩繚娲 + 濡傞氳繃LVS銆乭aproxy銆乲eepalive绛夋柟寮 + - 闆嗙兢 & 璐熻浇鍧囪  & 鍒嗗竷寮 + 璐熻浇鍧囪 鏋舵瀯鏄涓湇鍔″仛涓鍫嗗悓绫荤殑浜嬫儏锛屾瘡浠朵簨鎯呯浉浜掔嫭绔嬶紱 + 鍒嗗竷寮忕殑鏋舵瀯鍒欐槸灏嗕竴浠跺鏉傜殑浜嬫儏鍒嗚В鍑哄涓儴浠斤紝鐢卞涓湇鍔″幓鍋氾紝鍐嶉氳繃鏋舵瀯瀹炵幇澶氫釜鍒嗚В浜嬫儏澶勭悊缁撴灉鐨勫悎骞躲 + - 澶氫腑蹇冿紝寮傚湴寮傛満鎴匡紝娑夊強璐熻浇鍒嗘媴鍜屾暟鎹悓姝ョ瓑闂鐨勮冭檻 + - 绾靛悜鎵╁锛屽鍔犳湇鍔″櫒璧勬簮锛屾崲鎬ц兘鏇村己鐨勬湇鍔″櫒鎻愬崌鏈嶅姟鑳藉姏 + - 妯悜鎵╁锛屽涓氬姟銆佹暟鎹簱銆佸尯鍩熺瓑杩涜鍒掑垎 + - 涓氬姟鏈嶅姟鐨勬媶鍒 + - 鏁版嵁搴撶殑璇诲啓鍒嗙 + ... + + 杩愮淮鎵嬫锛 + - 铏氭嫙鍖栥佸鍣ㄥ寲 + - 鐩戞帶鎵嬫锛屽彂鐜版満鍒跺拰鍔犻熷鐞嗘満鍒剁瓑 + - 婕旂粌鍜屼竴浜涢楗ㄥ宸ュ叿鏁呴殰妯℃嫙 + - 鑷姩鍖栬繍缁达紝鐩戞帶棰勮绛夋墜娈 + - 搴旀ラ妗 + ... + diff --git a/digit.md b/digit.md new file mode 100644 index 0000000..0d5eabf --- /dev/null +++ b/digit.md @@ -0,0 +1,73 @@ + +## 鎶鏈繚闅滈儴鏁板瓧鍖栬浆鍨嬫姤鍛 + +History + +鏃堕棿 | 鍐呭 | 浣滆 +--- | --- | --- +2019/9/8 | 鍒濈ǹ | CG +2019/9/9 | 澧炲姞涓嶅悓鍥㈤槦鏁板瓧鍖栬浆鍨嬭緭鍑 | CG + +--- + +### 鎶鏈繚闅滈儴鏁板瓧鍖栬浆鍨嬫庝箞杞紝鍏堝紕娓呮涓轰粈涔堝拰鎬庝箞鍋氶棶棰 + +杞瀷鍓嶄簨鍔¢┍鍔ㄦ垨娴佺▼椹卞姩宸ヤ綔锛屼簨鍔″彲鑳芥槸涓鎻藉瓙璁″垝锛屼篃鍙兘鏄竴浜涢浂鏁g殑浠诲姟锛屼簨鍔¢┍鍔ㄥ氨鏄畬鎴愯鍒掓垨浠诲姟锛涙祦绋嬮┍鍔ㄦ槸涓氬姟娴佺▼鍥哄寲锛屼綔涓氭槸鍦ㄤ竴绯诲垪鐨勬祦绋嬪拰瑙勫垯涓嬪畬鎴愶紝娴佺▼椹卞姩鏄師鏉ヤ俊鎭寲鐨勬牳蹇冨唴瀹广傛暟瀛楀寲鍒欒姹傛暟瀛楅┍鍔紝鏁板瓧鑳藉鍑嗙‘鍙嶆槧褰撳墠涓嶅悓鍒囬潰鐨勫仴搴风姸鍐碉紝杩涜屾帹鍔ㄥ伐浣滅敓浜ф敼鍠勩 + +**鏁板瓧鍖栬浆鍨嬭鐐癸細** + +> - 鏁板瓧椹卞姩 +
鏁板瓧鍖栬浆鍨嬭浠庝簨鍔°佹祦绋嬮┍鍔ㄨ浆鍙樹负鏁板瓧椹卞姩銆 +> - 閲忓寲銆佸垎鏋 +
鏁版嵁鍙兘鏄捣閲忓拰鏃犲簭鐨勶紝閫氳繃閲忓寲鑳芥帉鎻¤繘搴︼紝閫氳繃鍒嗘瀽鍙戠幇闂, 杩涜屽紑灞曠簿鍑嗘敼杩涖 +> - 鏁忔嵎锛岄熷害 +
鏁板瓧鍖栨渶缁堜负浜嗚兘澶熸洿濂芥湇鍔″鎴锋垨鏈嶅姟鐢熶骇锛屾暟瀛楄兘鍙嶆槧褰撲笅锛屽洜姝わ紝鏁板瓧鏈韩灏辨湁鏁忔嵎鐨勭壒鐐癸紝瑕佹眰缁勭粐鑳藉蹇熻窡杩涖備篃鍗虫晱鎹峰瀷缁勭粐鎵嶈兘鍖归厤鏁板瓧鍖栬浆鍨嬬殑瑕佹眰銆 +> - 杩唬锛岃繛缁 +
浜嬪姟鎴栨祦绋嬮┍鍔ㄥぇ澶氬睘浜庤鍒掓ф垨澶栭儴椹卞姩锛屾暟瀛楀嵈鍙嶆槧鎸佺画鐨勫彉鍖栵紝鏁板瓧椹卞姩鎺ㄥ姩蹇熻凯浠o紝浠庤屾寔缁敼杩涳紝杩欐槸鏁忔嵎鎬х粍缁囩殑瑕佹眰锛 闈炴晱鎹风粍缁囪窡涓嶄笂鏁板瓧鍖栬姹傘 +> - 鑷姩鍖 +
鑷姩鍖栨槸鏁板瓧鍖栬浆鍨嬬殑鍩烘湰瑕佹眰锛屽湪鑷姩鍖栧熀纭涓婏紝鎵嶅叿澶囨晱鎹风殑瑕佹眰銆 +> - 鍏变韩銆佸崗浣 +
鍘熸潵淇℃伅鍖栦笅锛屽悇閮ㄩ棬銆佸悇绯荤粺涔嬮棿寰寰鏄嫭绔嬬殑锛屽悇閮ㄥ垎閮芥槸淇℃伅瀛ゅ矝锛屽姛鑳戒篃鏄瀭鐩寸儫鍥卞紡鐨勫彂灞曪紝鏂扮殑椤圭洰灏辨槸涓鏉℃柊鐨勭儫鍥憋紝杩欑鐘跺喌鏁版嵁閮芥槸澶ц薄鐨勪竴鍙吙锛屼笉鏄叏璨岋紝鏁板瓧鍖栧緢闅惧疄鐜帮紝鏁板瓧鍖栬姹傛暟鎹殑娴佸姩锛屾暟鎹槸浜掔浉鍙傜収锛屽舰鎴愮敾鍍忥紝杩欐牱鍒嗘瀽鍙婄粨鏋滄墠鏈変环鍊硷紝鎵嶈兘鎸囧鐢熶骇锛岄┍鍔ㄦ晥鐜囨彁鍗囥 +> - 瀹夊叏 +
鏁版嵁鎴愪负鐢熶骇璧勬枡锛屾暟鎹彂鎸ユ洿澶т环鍊硷紝涔熸壙鎷呮洿澶氶闄╋紝鏁版嵁寮鏀句笅鐨勫畨鍏ㄤ繚闅滃挨鍏堕噸瑕併 + +**鍏蜂綋鍒拌繍缁存敮鎾戞祴璇曟暟瀛楀寲杞瀷宸ヤ綔** +- 鏀拺宸ヤ綔灏辨槸鍏稿瀷鐨勪簨鍔¢┍鍔紝杩欎釜浜嬪姟灏辨槸鏁呴殰銆佹姇璇夋垨椤圭洰鏀拺宸ヤ綔銆傛暟瀛楀寲杞瀷鏈夊繀瑕佹⒊鐞嗗拰璁剧珛涓浜涙暟瀛楁瑙嗙偣锛岄氳繃杩欎簺妫瑙嗙偣鏁版嵁鍒嗘瀽锛屽垽鏂仴搴峰害锛屽強鏃╅璀︼紝鏃╀簬鎶曡瘔鍙戠幇闂锛岃В鍐抽棶棰樸傚湪鏁版嵁鐨勯噰闆嗐佸垎鏋愮敱杩愮淮鍥㈤槦浠嬪叆锛屽紩鍏ヨ嚜鍔ㄥ寲鎵嬫锛岀敋鑷冲彲浠ヨ繘琛屽仴搴峰害鎵撳垎銆傜洃鎺т汉鍛樹粠鍘熸潵涓诲姩瀹氭椂鏌ョ湅锛屽鍔犻偖浠躲佺煭淇$瓑鎺ㄩ佹柟寮忕殑鍛婅鎺ュ彈鍜岄澶勭悊銆 瀵逛簬椤圭洰鏀拺锛岃冭檻鍒伴」鐩殑涓у寲锛岄浂鏁e寲锛屾槸涓嶆槸涓嶈兘寮灞曟暟瀛楀寲杞瀷鍛紵鍏抽敭鍦ㄤ簬鏍囧噯鍖栧熀纭涓婄殑鏁板瓧鍖栨敮鎾戯紝 鏍囧噯鍖栦究浜庡舰鎴愮粺涓鏂囬氾紝缁熶竴FAQ鍙e緞锛岃繕鍙嚜鍔ㄥ寲澶勭悊锛岄伩鍏嶇柌浜庡簲浠樺鎴疯姹傦紝杩涜屽疄鐜版洿澶氱殑杩滅▼鏀拺锛屽噺灏戠幇鍦烘敮鎾戦噺锛岄檷浣庢垚鏈 + +- 杩愮淮宸ヤ綔鐨勬暟瀛楀寲杞瀷锛屼富瑕佽杞彉琚姩鐨勨滄晳鐏紡鈥濊繍缁存ā寮忥紝杩欑妯″紡鍑虹幇闂鍚庣潃鎵嬪鐞嗭紝琚棶棰樼壍鐫榧诲瓙璧帮紝杩愮淮浜哄憳鐪嬩技蹇欑锛屾晥鐜囧嵈涓嶄竴瀹氶珮锛岃繍缁磋川閲忎篃寰堥毦鎻愰珮锛岃繍缁村紑鍙戝鏋滆鍥板湪杩欑浣庤川閲忕殑搴斾粯浜嬪姟涓紝灏卞緢闅捐吘鍑虹簿鍔涗粠鏇撮珮鐨勫眰闈紭鍖栫郴缁燂紝閬垮厤闂浜庢湭鍙戠敓鍓嶏紝杩欑琚姩澶勭悊鏂瑰紡锛岀敤鎴锋弧鎰忓害蹇呭畾涔熶細涓嬮檷銆 杞彉杩欑妯″紡锛岃鏈変竴濂楁柟娉曡鏉ユ寚寮曪紝濡俤evops锛屽苟杈呬箣浠ョ浉搴旂殑宸ュ叿鎵嬫锛 鐢ㄦ嫢鎶卞彉鍖栫殑鎬佸害鏉ュ尮閰嶆晱鎹锋х粍缁囩殑瑕佹眰銆

devops鏁忔嵎鍜屽揩閫熻凯浠f剰鍛崇潃鏇撮绻佺殑鍙戝竷鍜岄儴缃诧紝 杩愮淮鑷姩鍖栧拰鐮旇繍娴嬬殑鍏ㄦ祦绋嬭疮閫氭槸鍐呯敓瑕佹眰锛 姝ゅ锛 鍝嶅簲鍙樺寲鍜屽揩閫熻凯浠d篃瑕佹眰杩愮淮銆佹祴璇曘佹敮鎾戝洟闃熸垚鍛樿兘澶熷揩閫熶簡瑙e拰璺熻繘椤圭洰鐜扮姸锛 纭繚娴嬭瘯銆佷笂绾裤佹敮鎾戦『鐣呬笉鑴辫妭锛屾墍浠evops閲嶈Dev寮鍙戜笌Ops杩愮淮涔嬮棿娌熼氬悎浣滐紝骞堕渶璁╁畠鎴愪负鍏徃鏂囧寲鎯緥锛屽綋鐒讹紝娌熼氱殑褰㈠紡澶氭牱锛屼細璁垨闈㈠闈㈡槸涓绉嶏紝鏁板瓧鍖栬浆鍨嬫洿瑕佹眰閲囩敤鏁板瓧鍖栨墜娈垫潵纭繚dev鍒皁ps鐨勬秷鎭祦杞紝灏遍伩鍏嶅淇敼閰嶇疆杩愮淮涓嶇煡鎮夊鑷撮儴缃插悗绯荤粺涓嶈兘杩愯锛屾洿鏂扮殑闇姹傛病鏈夊悓姝ュ埌娴嬭瘯瀵艰嚧鏂扮敤渚嬫湭瑕嗙洊鏂伴渶姹傜瓑闂銆傜洰鍓嶅凡鍏ㄩ潰浣跨敤鑷姩鍖栬繍缁村钩鍙板疄鐜版湇鍔″櫒銆佸簲鐢ㄣ佷笟鍔$殑缁熶竴鐩戞帶绾崇锛屽強杩涜鐜閮ㄧ讲銆佷笂绾裤佺洃鎺с佸憡璀︺ + +- 娴嬭瘯宸ヤ綔鏁板瓧鍖栵紝鑷姩鍖栨祴璇曢娆℃垚鏈細楂樹簬鎵嬪伐娴嬭瘯锛屼絾鑷姩鍖栨祴璇曠殑鏀剁泭鏄殢鐫娴嬭瘯娆℃暟鍜岄噸澶嶆鏁扮殑澧炲姞鑰岀浉搴斿鍔狅紝姝ゅ鑷姩鍖栨祴璇曡繕瀛樺湪缁存姢宸ュ叿鍜岃嚜鍔ㄥ寲鐢ㄤ緥缂栧啓鐨勭淮鎶ゆ垚鏈紝鏁板瓧鍖栬浆鍨嬭鐢ㄦ暟鎹潵鍏呭垎鍒嗘瀽鑷姩鍖栨祴璇曡妭绾︾殑鎴愭湰鎯呭喌锛屾垚鏋滃彲閲忓寲锛岃繃绋嬪彲閲忓寲銆傛祴璇曞伐浣滃儚鏉ユ枡鍔犲伐鍘傦紝 宸ヤ綔閲忕殑宄拌胺鐗规ф槑鏄撅紝 绠$悊涓婃嫙寮曞叆OKR娉曟潵鎺ㄨ繘鍥㈤槦宸ヤ綔锛 缁撴灉浜у嚭鍙噺鍖栵紝 鐩爣鍙拷韪紝 鏇村ソ鎺ㄨ繘缁勭粐缁╂晥 銆 + +- 鏁板瓧鍖栫敋鑷虫櫤鑳藉寲瀵瑰伐鍏风殑瑕佹眰涔熼殢涔嬫彁楂橈紝寮婧愮ぞ鍖哄揩閫熷彂灞曪紝宸ュ叿鍙夊緢澶氾紝 浣嗗伐鍏峰簲鑷富鍙帶锛 搴斿叿鏈夊紑鏀炬э紝 鑷富鍙帶鎵嶈兘寰垱鏂颁互鏇村ソ鏈嶅姟浜庝笟鍔★紝 宸ュ叿搴斾笌涓氬姟缁撳悎鎵嶆湁鎰忎箟锛 鎵嶆湁姣旇緝浼樺娍銆 鏀拺杩愮淮閮藉簲鎳備笟鍔★紝 鍙堟噦鎶鏈 鑷富鍙帶骞朵笉鏄嚜宸遍犺疆瀛愶紝 浣嗚鑳藉鏁村悎杩欎簺宸ュ叿褰㈡垚鏈夋満鏁翠綋鏈嶅姟浜庝笟鍔★紝 鑰屼笉鏄儫鍥卞紡鐨勶紝 杩欎笉绗﹀悎鏁板瓧鍖栫殑鑷姩鍖栥佷俊鎭祦鍔ㄥ拰鏁忔嵎鐨勭壒鐐癸紝 姣斿鑷姩鍖栨祴璇曞ぇ瀹堕兘鍦ㄧ敤selenium锛屾槸鎴愮啛妗嗘灦锛 浣嗗湪姝ゅ熀纭涓婄粨鍚堜笟鍔¤繘琛岃剼鏈皝瑁呭氨鏄檷浣庢墜宸ヨ繃绋嬶紝鎻愪緵澶嶇敤鏁堢巼鐨勬墜娈碉紝 鎶妔elenium鍐呭祵鍦ㄥ钩鍙颁腑锛屾墦閫氭祴璇曢」鐩鐞嗐佹祴璇曠敤渚嬬鐞嗐丟UI褰曞埗骞惰剼鏈寲銆佽嚜鍔ㄥ寲鐢ㄤ緥缂栧啓銆佽嚜鍔ㄥ寲鑴氭湰鐨勫弬鏁板寲銆佹祴璇曟姤鍛婅緭鍑哄拰缁熻绛夎兘鍔涳紝 鐢氳嚦缁撳悎postman绛夋帴鍙f祴璇曞伐鍏凤紝 杩欎簺闇瑕佽嚜宸辨潵鏁村悎銆備綔涓烘祴璇曞洟闃燂紝瑕佽冭檻瑕佹洿澶氾紝姣斿鎬庝箞鍋氬畨鍏ㄦ祴璇曪紵 瀹夊叏娴嬭瘯瀹屾垚鍚庡浣曡嚜鍔ㄥ寲淇婕忔礊锛 鎬庝箞鍋氭ц兘娴嬭瘯锛 鐩墠瀹夊叏娴嬭瘯杩樼嫭绔嬪湪鍋氾紝 杩樻病鏈夊姙娉曞祵鍏ュ埌鑷姩鍖栨祴璇曞钩鍙颁腑锛 鎬ц兘娴嬭瘯宸茬粡鑳藉鍦ㄨ嚜鍔ㄥ寲娴嬭瘯骞冲彴涓繘琛岋紝 浣嗘讳綋浣跨敤杩樻瘮杈冨皯锛 杩欎簺閮ㄥ垎鍦ㄦ暟瀛楀寲杞瀷涓鍔犲己銆 + +- 鏁板瓧鍖栬浆鍨嬫渶缁堟槸鏈嶅姟浜庡鎴蜂綋楠岀殑鎸佺画鏀硅繘锛 鎶鏈繚闅滈儴涓嶉潰鍚戞渶缁堝鎴烽渶姹傦紝 浣嗕笉鍚屽洟闃熻緭鍑烘垚鏋滅殑浣跨敤鏂逛究鏄鎴凤紝 鏀拺鐩殑鏄В鍐崇敤鎴蜂娇鐢ㄩ棶棰橈紝 鐢ㄦ埛闂鐨勯噺鍖栨槸鏈夌殑锛屼絾鏁板瓧鍖栫殑鏂瑰紡鐨勭粺璁″垎鏋愯繕鏄笉澶燂紝 姣斿鍓嶈堪鐨勮窡鐢ㄤ緥鐨勫姣旓紝 妫瑙嗙偣鏁版嵁/璐﹀崟瀵规瘮鍒嗘瀽绛夐渶瑕佸姞寮恒傝嚜鍔ㄥ寲娴嬭瘯骞冲彴鐨勪娇鐢ㄥ璞℃槸鑷姩鍖栨祴璇曞洟闃燂紝鑷姩鍖栨祴璇曞洟闃熷氨闇瑕佸畾鏈熸彁渚涢噺鍖栫殑鍙嶉缁欒繍缁村紑鍙戝洟闃熴 杩愮淮閮ㄧ讲涓婄嚎鏈嶅姟浜巇evops锛屼笂绾挎儏鍐靛簲閲忓寲鐨勫弽棣堢粰dev銆 +
+ +### 鎶鏈繚闅滈儴鏁板瓧鍖栬浆鍨嬭緭鍑 +
+ +鍔熻兘鍧 | 杞瀷瑕佺偣 | 鏁板瓧鍖栬緭鍑 +---- | ---- | ---- +鏀拺 | 鏍囧噯鍖栵紝鏀拺浜嬪姟褰㈡垚鏍囧噯鍖栵紝涓嶅悓闃舵閲忓寲杈撳叆杈撳嚭銆佷粙鍏ユ柟寮忓拰绋嬪害 | 瀹夊鏀拺鏍囧噯鍖栨枃妗f祦绋 +鏀拺 | 鏁板瓧鍖栫洃鎺,瀵规棩甯哥洃鎺ф寚鏍囪繘琛屾彁鐐硷紝閲嶇偣鎸囨爣閭欢鐭俊绛夋柟寮忓嵆鏃堕氱煡鍒颁汉 | 鍒嗙瓑绾с佸垎绫诲瀷鐩戞帶鎸囨爣鎶ュ憡 +鏀拺 | 鏁板瓧鍖栨瑙嗙偣锛屾⒊鐞嗕笟鍔℃祦绋嬶紝鎻掑叆妫瑙嗙偣鑷姩瀵规帴鍙f暟鎹拰娑堣垂鎯呭喌杩涜姣斿鏍告煡锛岀‘淇濅竴鑷达紝涓嶄竴鑷存彁渚涘憡璀 | 鏁版嵁鎺ュ彛鎶ュ憡锛堝鐭俊銆佸璁°佽瘽鍗...锛 +鏀拺 | 鏁板瓧鍖栨晠闅滈闃诧紝姊崇悊鍘嗗彶鎶ラ殰銆佹姇璇夊伐鍗曪紝閲囩敤鏁板瓧鍖栨墜娈碉紝鍙樿鍔ㄤ汉宸ヤ繚闅滀负涓诲姩鑷姩宸℃ | 鏁呴殰鍘嗗彶鏁板瓧鍖栨姤鍛婏紙鍖呭惈鏀硅繘鐐规⒊鐞嗭級 +杩愮淮 | 鏁忔嵎锛屽伐鍏枫佹柟娉曡 | 浣撶幇鏁忔嵎鎬濈淮宸ュ叿鎶ュ憡锛堜綋鐜板伐鍏峰悕绉般侀夊瀷銆佷綔鐢ㄣ佷娇鐢ㄤ綋楠岋級 +杩愮淮 | 杩愮淮鏈嶅姟璐ㄩ噺鏁板瓧鍖 | +杩愮淮 | 楂樺彲鐢ㄦф寚鏍囷紝姊崇悊鏁呴殰鐐癸紝閮ㄧ讲HA | 鍗曠偣鏁板瓧鍖 +杩愮淮 | 鍗忓姪娌熼氾紝浼氳娌熼氬閫氳繃鏁板瓧鍖栨墜娈电矘鍚坉ev鍜宱ps鐨勪俊鎭祦鍔 | *钀藉疄鍔ㄤ綔* +杩愮淮 | 宸ュ叿鐨勫叡浜紑鏀剧▼搴︼紝宸ュ叿琚閮ㄤ娇鐢ㄦ儏鍐 | 鑷姩鍖栬繍缁淬佽嚜鍔ㄥ寲娴嬭瘯骞冲彴浣跨敤鎯呭喌鎶ュ憡 +杩愮淮 | 鑷姩鍖栬繍缁达紝鏈嶅姟鍣ㄣ佸簲鐢ㄣ佷笟鍔$粺涓绾崇锛屾晠闅滈殧绂讳笌鑷剤 | 鑷姩鍖栬繍缁存暟瀛楀寲鎶ュ憡 锛堟湇鍔″櫒銆佸簲鐢ㄣ佷笟鍔℃儏鍐垫姤鍛婏級 +杩愮淮 | 鏁版嵁鍙鍖栵紝缃戠粶鍙鍖 | 鑷姩鍖栬繍缁存暟瀛楀寲鎶ュ憡 +娴嬭瘯 | 璇曡OKR | *钀藉疄鍔ㄤ綔* +娴嬭瘯 | 鑷姩鍖栫敤渚嬮噺锛岃嚜鍔ㄥ寲鐢ㄤ緥瑕嗙洊鐜 | 娴嬭瘯鏁板瓧鍖栨姤鍛 锛堟寜椤圭洰锛岃繘搴︺佽嚜鍔ㄥ寲瑕嗙洊鐜囷級 +娴嬭瘯 | 鍏ㄩ潰鑷姩鍖栧強鑷姩鍖栨垚鏈噺鍖栨祴绠 | 娴嬭瘯鏁板瓧鍖栨姤鍛 锛堟垚鏈祴绠楋級 +娴嬭瘯 | 鎶ラ殰鎶曡瘔涓庢祴璇曠殑鍏宠仈鍒嗘瀽 | 娴嬭瘯鏁板瓧鍖栨姤鍛 +娴嬭瘯 | 鑷姩鍖栨祴璇曞伐鍏蜂娇鐢ㄥ姣旀墦鍒嗗弽棣堬紝鎺ㄥ姩宸ュ叿鏀硅繘 | 鑷姩鍖栨祴璇曞伐鍏枫佸钩鍙伴夊瀷鎶ュ憡 +娴嬭瘯 | 椤圭洰鑷姩鍖栨ц兘娴嬭瘯娓呭崟銆佹瘮渚 | 娴嬭瘯鏁板瓧鍖栨姤鍛 +瀹夊叏 | 瀹夊叏鍐呭閮ㄥ伐浣滈噺鍖栵紝瀹夋壂鍙婁慨澶嶆儏鍐甸噺鍖栵紝鍒嗛」鐩畨鍏ㄤ繚闅滄⒊鐞 | 瀹夊叏鏁板瓧鍖栨姤鍛 +瀹夊叏 | 瀹夊叏宸ュ叿閫夊瀷鐮旂┒ | 瀹夊叏鏁板瓧鍖栨姤鍛 +瀹夊叏 | 瀹夊叏鑷姩鍖栵紝瀹夊叏宓屽叆娴嬭瘯涓 | 瀹夊叏鏁板瓧鍖栨姤鍛 +
+ + diff --git a/digit_dd.md b/digit_dd.md new file mode 100644 index 0000000..82b5ec6 --- /dev/null +++ b/digit_dd.md @@ -0,0 +1,119 @@ + +## 鎶鏈繚闅滈儴鏁板瓧鍖栬浆鍨嬫姤鍛 + +History + +鏃堕棿 | 鍐呭 | 浣滆 +--- | --- | --- +2019/9/8 | 鍒濈ǹ | CG +2019/9/9 | 澧炲姞涓嶅悓鍥㈤槦鏁板瓧鍖栬浆鍨嬭緭鍑 | CG + +--- + +### 鎶鏈繚闅滈儴鏁板瓧鍖栬浆鍨嬫庝箞杞紝鍏堝紕娓呮涓轰粈涔堝拰鎬庝箞鍋氶棶棰 + +杞瀷鍓嶄簨鍔¢┍鍔ㄦ垨娴佺▼椹卞姩宸ヤ綔锛屼簨鍔″彲鑳芥槸涓鎻藉瓙璁″垝锛屼篃鍙兘鏄竴浜涢浂鏁g殑浠诲姟锛屼簨鍔¢┍鍔ㄥ氨鏄畬鎴愯鍒掓垨浠诲姟锛涙祦绋嬮┍鍔ㄦ槸涓氬姟娴佺▼鍥哄寲锛屼綔涓氭槸鍦ㄤ竴绯诲垪鐨勬祦绋嬪拰瑙勫垯涓嬪畬鎴愶紝娴佺▼椹卞姩鏄師鏉ヤ俊鎭寲鐨勬牳蹇冨唴瀹广傛暟瀛楀寲鍒欒姹傛暟瀛楅┍鍔紝鏁板瓧鑳藉鍑嗙‘鍙嶆槧褰撳墠涓嶅悓鍒囬潰鐨勫仴搴风姸鍐碉紝杩涜屾帹鍔ㄥ伐浣滅敓浜ф敼鍠勩 + +**缁撳悎鏀拺杩愮淮娴嬭瘯鐨勫伐浣滄潵璋堣皥鏁板瓧鍖栬浆鍨嬬殑鎶撴墜锛** + +> - 鏁板瓧椹卞姩 +
鏁板瓧鍖栬浆鍨嬭浠庝簨鍔°佹祦绋嬮┍鍔ㄨ浆鍙樹负鏁板瓧椹卞姩銆 +> - 閲忓寲銆佸垎鏋 +
鏁版嵁鍙兘鏄捣閲忓拰鏃犲簭鐨勶紝閫氳繃閲忓寲鑳芥帉鎻¤繘搴︼紝閫氳繃鍒嗘瀽鍙戠幇闂, 杩涜屽紑灞曠簿鍑嗘敼杩涖 +> - 鏁忔嵎锛岄熷害 +
鏁板瓧鍖栨渶缁堜负浜嗚兘澶熸洿濂芥湇鍔″鎴锋垨鏈嶅姟鐢熶骇锛屾暟瀛楄兘鍙嶆槧褰撲笅锛屽洜姝わ紝鏁板瓧鏈韩灏辨湁鏁忔嵎鐨勭壒鐐癸紝瑕佹眰缁勭粐鑳藉蹇熻窡杩涖備篃鍗虫晱鎹峰瀷缁勭粐鎵嶈兘鍖归厤鏁板瓧鍖栬浆鍨嬬殑瑕佹眰銆 +> - 杩唬锛岃繛缁 +
浜嬪姟鎴栨祦绋嬮┍鍔ㄥぇ澶氬睘浜庤鍒掓ф垨澶栭儴椹卞姩锛屾暟瀛楀嵈鍙嶆槧鎸佺画鐨勫彉鍖栵紝鏁板瓧椹卞姩鎺ㄥ姩蹇熻凯浠o紝浠庤屾寔缁敼杩涳紝杩欐槸鏁忔嵎鎬х粍缁囩殑瑕佹眰锛 闈炴晱鎹风粍缁囪窡涓嶄笂鏁板瓧鍖栬姹傘 +> - 鑷姩鍖 +
鑷姩鍖栨槸鏁板瓧鍖栬浆鍨嬬殑鍩烘湰瑕佹眰锛屽湪鑷姩鍖栧熀纭涓婏紝鎵嶅叿澶囨晱鎹风殑瑕佹眰銆 +> - 鍏变韩銆佸崗浣 +
鍘熸潵淇℃伅鍖栦笅锛屽悇閮ㄩ棬銆佸悇绯荤粺涔嬮棿寰寰鏄嫭绔嬬殑锛屽悇閮ㄥ垎閮芥槸淇℃伅瀛ゅ矝锛屽姛鑳戒篃鏄瀭鐩寸儫鍥卞紡鐨勫彂灞曪紝鏂扮殑椤圭洰灏辨槸涓鏉℃柊鐨勭儫鍥憋紝杩欑鐘跺喌鏁版嵁閮芥槸澶ц薄鐨勪竴鍙吙锛屼笉鏄叏璨岋紝鏁板瓧鍖栧緢闅惧疄鐜帮紝鏁板瓧鍖栬姹傛暟鎹殑娴佸姩锛屾暟鎹槸浜掔浉鍙傜収锛屽舰鎴愮敾鍍忥紝杩欐牱鍒嗘瀽鍙婄粨鏋滄墠鏈変环鍊硷紝鎵嶈兘鎸囧鐢熶骇锛岄┍鍔ㄦ晥鐜囨彁鍗囥 +> - 瀹夊叏 +
鏁版嵁鎴愪负鐢熶骇璧勬枡锛屾暟鎹彂鎸ユ洿澶т环鍊硷紝涔熸壙鎷呮洿澶氶闄╋紝鏁版嵁寮鏀句笅鐨勫畨鍏ㄤ繚闅滃挨鍏堕噸瑕併 + +**鍏蜂綋鍒拌繍缁存敮鎾戞祴璇曟暟瀛楀寲杞瀷宸ヤ綔濡備笅** +- 鏀拺宸ヤ綔灏辨槸鍏稿瀷鐨勪簨鍔¢┍鍔紝杩欎釜浜嬪姟灏辨槸鏁呴殰銆佹姇璇夋垨椤圭洰鏀拺宸ヤ綔銆傛暟瀛楀寲杞瀷鏈夊繀瑕佹⒊鐞嗗拰璁剧珛涓浜涙暟瀛楁瑙嗙偣锛岄氳繃杩欎簺妫瑙嗙偣鏁版嵁鍒嗘瀽锛屽垽鏂仴搴峰害锛屽強鏃╅璀︼紝鏃╀簬鎶曡瘔鍙戠幇闂锛岃В鍐抽棶棰樸傚湪鏁版嵁鐨勯噰闆嗐佸垎鏋愮敱杩愮淮鍥㈤槦浠嬪叆锛屽紩鍏ヨ嚜鍔ㄥ寲鎵嬫锛岀敋鑷冲彲浠ヨ繘琛屽仴搴峰害鎵撳垎銆傜洃鎺т汉鍛樹粠鍘熸潵涓诲姩瀹氭椂鏌ョ湅锛屽鍔犻偖浠躲佺煭淇$瓑鎺ㄩ佹柟寮忕殑鍛婅鎺ュ彈鍜岄澶勭悊銆 瀵逛簬椤圭洰鏀拺锛岃冭檻鍒伴」鐩殑涓у寲锛岄浂鏁e寲锛屾槸涓嶆槸涓嶈兘寮灞曟暟瀛楀寲杞瀷鍛紵鍏抽敭鍦ㄤ簬鏍囧噯鍖栧熀纭涓婄殑鏁板瓧鍖栨敮鎾戯紝 鏍囧噯鍖栦究浜庡舰鎴愮粺涓鏂囬氾紝缁熶竴FAQ鍙e緞锛岃繕鍙嚜鍔ㄥ寲澶勭悊锛岄伩鍏嶇柌浜庡簲浠樺鎴疯姹傦紝杩涜屽疄鐜版洿澶氱殑杩滅▼鏀拺锛屽噺灏戠幇鍦烘敮鎾戦噺锛岄檷浣庢垚鏈 + +- 杩愮淮宸ヤ綔鐨勬暟瀛楀寲杞瀷锛屼富瑕佽杞彉琚姩鐨勨滄晳鐏紡鈥濊繍缁存ā寮忥紝杩欑妯″紡鍑虹幇闂鍚庣潃鎵嬪鐞嗭紝琚棶棰樼壍鐫榧诲瓙璧帮紝杩愮淮浜哄憳鐪嬩技蹇欑锛屾晥鐜囧嵈涓嶄竴瀹氶珮锛岃繍缁磋川閲忎篃寰堥毦鎻愰珮锛岃繍缁村紑鍙戝鏋滆鍥板湪杩欑浣庤川閲忕殑搴斾粯浜嬪姟涓紝灏卞緢闅捐吘鍑虹簿鍔涗粠鏇撮珮鐨勫眰闈紭鍖栫郴缁燂紝閬垮厤闂浜庢湭鍙戠敓鍓嶏紝杩欑琚姩澶勭悊鏂瑰紡锛岀敤鎴锋弧鎰忓害蹇呭畾涔熶細涓嬮檷銆 杞彉杩欑妯″紡锛岃鏈変竴濂楁柟娉曡鏉ユ寚寮曪紝濡俤evops锛屽苟杈呬箣浠ョ浉搴旂殑宸ュ叿鎵嬫锛 鐢ㄦ嫢鎶卞彉鍖栫殑鎬佸害鏉ュ尮閰嶆晱鎹锋х粍缁囩殑瑕佹眰銆

devops鏁忔嵎鍜屽揩閫熻凯浠f剰鍛崇潃鏇撮绻佺殑鍙戝竷鍜岄儴缃诧紝 杩愮淮鑷姩鍖栧拰鐮旇繍娴嬬殑鍏ㄦ祦绋嬭疮閫氭槸鍐呯敓瑕佹眰锛 姝ゅ锛 鍝嶅簲鍙樺寲鍜屽揩閫熻凯浠d篃瑕佹眰杩愮淮銆佹祴璇曘佹敮鎾戝洟闃熸垚鍛樿兘澶熷揩閫熶簡瑙e拰璺熻繘椤圭洰鐜扮姸锛 纭繚娴嬭瘯銆佷笂绾裤佹敮鎾戦『鐣呬笉鑴辫妭锛屾墍浠evops閲嶈Dev寮鍙戜笌Ops杩愮淮涔嬮棿娌熼氬悎浣滐紝骞堕渶璁╁畠鎴愪负鍏徃鏂囧寲鎯緥锛屽綋鐒讹紝娌熼氱殑褰㈠紡澶氭牱锛屼細璁垨闈㈠闈㈡槸涓绉嶏紝鏁板瓧鍖栬浆鍨嬫洿瑕佹眰閲囩敤鏁板瓧鍖栨墜娈垫潵纭繚dev鍒皁ps鐨勬秷鎭祦杞紝灏遍伩鍏嶅淇敼閰嶇疆杩愮淮涓嶇煡鎮夊鑷撮儴缃插悗绯荤粺涓嶈兘杩愯锛屾洿鏂扮殑闇姹傛病鏈夊悓姝ュ埌娴嬭瘯瀵艰嚧鏂扮敤渚嬫湭瑕嗙洊鏂伴渶姹傜瓑闂銆傜洰鍓嶅凡鍏ㄩ潰浣跨敤鑷姩鍖栬繍缁村钩鍙板疄鐜版湇鍔″櫒銆佸簲鐢ㄣ佷笟鍔$殑缁熶竴鐩戞帶绾崇锛屽強杩涜鐜閮ㄧ讲銆佷笂绾裤佺洃鎺с佸憡璀︺ + +- 娴嬭瘯宸ヤ綔鏁板瓧鍖栵紝鑷姩鍖栨祴璇曢娆℃垚鏈細楂樹簬鎵嬪伐娴嬭瘯锛屼絾鑷姩鍖栨祴璇曠殑鏀剁泭鏄殢鐫娴嬭瘯娆℃暟鍜岄噸澶嶆鏁扮殑澧炲姞鑰岀浉搴斿鍔狅紝姝ゅ鑷姩鍖栨祴璇曡繕瀛樺湪缁存姢宸ュ叿鍜岃嚜鍔ㄥ寲鐢ㄤ緥缂栧啓鐨勭淮鎶ゆ垚鏈紝鏁板瓧鍖栬浆鍨嬭鐢ㄦ暟鎹潵鍏呭垎鍒嗘瀽鑷姩鍖栨祴璇曡妭绾︾殑鎴愭湰鎯呭喌锛屾垚鏋滃彲閲忓寲锛岃繃绋嬪彲閲忓寲銆傛祴璇曞伐浣滃儚鏉ユ枡鍔犲伐鍘傦紝 宸ヤ綔閲忕殑宄拌胺鐗规ф槑鏄撅紝 绠$悊涓婃嫙寮曞叆OKR娉曟潵鎺ㄨ繘鍥㈤槦宸ヤ綔锛 缁撴灉浜у嚭鍙噺鍖栵紝 鐩爣鍙拷韪紝 鏇村ソ鎺ㄨ繘缁勭粐缁╂晥 銆 + +- 鏁板瓧鍖栫敋鑷虫櫤鑳藉寲瀵瑰伐鍏风殑瑕佹眰涔熼殢涔嬫彁楂橈紝寮婧愮ぞ鍖哄揩閫熷彂灞曪紝宸ュ叿鍙夊緢澶氾紝 浣嗗伐鍏峰簲鑷富鍙帶锛 搴斿叿鏈夊紑鏀炬э紝 鑷富鍙帶鎵嶈兘寰垱鏂颁互鏇村ソ鏈嶅姟浜庝笟鍔★紝 宸ュ叿搴斾笌涓氬姟缁撳悎鎵嶆湁鎰忎箟锛 鎵嶆湁姣旇緝浼樺娍銆 鏀拺杩愮淮閮藉簲鎳備笟鍔★紝 鍙堟噦鎶鏈 鑷富鍙帶骞朵笉鏄嚜宸遍犺疆瀛愶紝 浣嗚鑳藉鏁村悎杩欎簺宸ュ叿褰㈡垚鏈夋満鏁翠綋鏈嶅姟浜庝笟鍔★紝 鑰屼笉鏄儫鍥卞紡鐨勶紝 杩欎笉绗﹀悎鏁板瓧鍖栫殑鑷姩鍖栥佷俊鎭祦鍔ㄥ拰鏁忔嵎鐨勭壒鐐癸紝 姣斿鑷姩鍖栨祴璇曞ぇ瀹堕兘鍦ㄧ敤selenium锛屾槸鎴愮啛妗嗘灦锛 浣嗗湪姝ゅ熀纭涓婄粨鍚堜笟鍔¤繘琛岃剼鏈皝瑁呭氨鏄檷浣庢墜宸ヨ繃绋嬶紝鎻愪緵澶嶇敤鏁堢巼鐨勬墜娈碉紝 鎶妔elenium鍐呭祵鍦ㄥ钩鍙颁腑锛屾墦閫氭祴璇曢」鐩鐞嗐佹祴璇曠敤渚嬬鐞嗐丟UI褰曞埗骞惰剼鏈寲銆佽嚜鍔ㄥ寲鐢ㄤ緥缂栧啓銆佽嚜鍔ㄥ寲鑴氭湰鐨勫弬鏁板寲銆佹祴璇曟姤鍛婅緭鍑哄拰缁熻绛夎兘鍔涳紝 鐢氳嚦缁撳悎postman绛夋帴鍙f祴璇曞伐鍏凤紝 杩欎簺闇瑕佽嚜宸辨潵鏁村悎銆備綔涓烘祴璇曞洟闃燂紝瑕佽冭檻瑕佹洿澶氾紝姣斿鎬庝箞鍋氬畨鍏ㄦ祴璇曪紵 瀹夊叏娴嬭瘯瀹屾垚鍚庡浣曡嚜鍔ㄥ寲淇婕忔礊锛 鎬庝箞鍋氭ц兘娴嬭瘯锛 鐩墠瀹夊叏娴嬭瘯杩樼嫭绔嬪湪鍋氾紝 杩樻病鏈夊姙娉曞祵鍏ュ埌鑷姩鍖栨祴璇曞钩鍙颁腑锛 鎬ц兘娴嬭瘯宸茬粡鑳藉鍦ㄨ嚜鍔ㄥ寲娴嬭瘯骞冲彴涓繘琛岋紝 浣嗘讳綋浣跨敤杩樻瘮杈冨皯锛 杩欎簺閮ㄥ垎鍦ㄦ暟瀛楀寲杞瀷涓鍔犲己銆 + +- 鏁板瓧鍖栬浆鍨嬫渶缁堟槸鏈嶅姟浜庡鎴蜂綋楠岀殑鎸佺画鏀硅繘锛 鎶鏈繚闅滈儴涓嶉潰鍚戞渶缁堝鎴烽渶姹傦紝 浣嗕笉鍚屽洟闃熻緭鍑烘垚鏋滅殑浣跨敤鏂逛究鏄鎴凤紝 鏀拺鐩殑鏄В鍐崇敤鎴蜂娇鐢ㄩ棶棰橈紝 鐢ㄦ埛闂鐨勯噺鍖栨槸鏈夌殑锛屼絾鏁板瓧鍖栫殑鏂瑰紡鐨勭粺璁″垎鏋愯繕鏄笉澶燂紝 姣斿鍓嶈堪鐨勮窡鐢ㄤ緥鐨勫姣旓紝 妫瑙嗙偣鏁版嵁/璐﹀崟瀵规瘮鍒嗘瀽绛夐渶瑕佸姞寮恒傝嚜鍔ㄥ寲娴嬭瘯骞冲彴鐨勪娇鐢ㄥ璞℃槸鑷姩鍖栨祴璇曞洟闃燂紝鑷姩鍖栨祴璇曞洟闃熷氨闇瑕佸畾鏈熸彁渚涢噺鍖栫殑鍙嶉缁欒繍缁村紑鍙戝洟闃熴 杩愮淮閮ㄧ讲涓婄嚎鏈嶅姟浜巇evops锛屼笂绾挎儏鍐靛簲閲忓寲鐨勫弽棣堢粰dev銆 +
+ +~~### 鎶鏈繚闅滈儴鏁板瓧鍖栬浆鍨嬫濊矾涓瑙堣〃~~ +
+ +鍔熻兘鍧 | 杞瀷瑕佺偣 | 鏁板瓧鍖栨爣鍑(杩戞湡琛ュ厖涓) +---- | ---- | ---- +鏀拺 | 鏍囧噯鍖栵紝鏀拺浜嬪姟褰㈡垚鏍囧噯鍖栵紝涓嶅悓闃舵閲忓寲杈撳叆杈撳嚭銆佷粙鍏ユ柟寮忓拰绋嬪害 | +鏀拺 | 鏁板瓧鍖栫洃鎺,瀵规棩甯哥洃鎺ф寚鏍囪繘琛屾彁鐐硷紝閲嶇偣鎸囨爣閭欢鐭俊绛夋柟寮忓嵆鏃堕氱煡鍒颁汉 | +鏀拺 | 鏁板瓧鍖栨瑙嗙偣锛屾⒊鐞嗕笟鍔℃祦绋嬶紝鎻掑叆妫瑙嗙偣鑷姩瀵规帴鍙f暟鎹拰娑堣垂鎯呭喌杩涜姣斿鏍告煡锛岀‘淇濅竴鑷达紝涓嶄竴鑷存彁渚涘憡璀 | +鏀拺 | 鏁板瓧鍖栨晠闅滈闃诧紝姊崇悊鍘嗗彶鎶ラ殰銆佹姇璇夊伐鍗曪紝閲囩敤鏁板瓧鍖栨墜娈碉紝鍙樿鍔ㄤ汉宸ヤ繚闅滀负涓诲姩鑷姩宸℃ | +杩愮淮 | 鏁忔嵎锛屽伐鍏枫佹柟娉曡 | +杩愮淮 | 鏈嶅姟璐ㄩ噺鏁板瓧鍖 | +杩愮淮 | 楂樺彲鐢ㄦф寚鏍囷紝姊崇悊鏁呴殰鐐癸紝閮ㄧ讲HA | +杩愮淮 | 鍗忓姪娌熼氾紝浼氳娌熼氬閫氳繃鏁板瓧鍖栨墜娈电矘鍚坉ev鍜宱ps鐨勪俊鎭祦鍔 | +杩愮淮 | 宸ュ叿鐨勫叡浜紑鏀剧▼搴︼紝宸ュ叿琚閮ㄤ娇鐢ㄦ儏鍐 | +杩愮淮 | 鑷姩鍖栬繍缁达紝鏈嶅姟鍣ㄣ佸簲鐢ㄣ佷笟鍔$粺涓绾崇锛屾晠闅滈殧绂讳笌鑷剤 | +杩愮淮 | 鏁版嵁鍙鍖栵紝缃戠粶鍙鍖 | +娴嬭瘯 | 璇曡OKR | +娴嬭瘯 | 鍏ㄩ潰鑷姩鍖栧強鑷姩鍖栨垚鏈噺鍖栨祴绠 | +娴嬭瘯 | 鎶ラ殰鎶曡瘔涓庢祴璇曠殑鍏宠仈鍒嗘瀽 | +娴嬭瘯 | 鑷姩鍖栨祴璇曞伐鍏蜂娇鐢ㄥ姣旀墦鍒嗗弽棣堬紝鎺ㄥ姩宸ュ叿鏀硅繘 | +娴嬭瘯 | 鑷姩鍖栫敤渚嬮噺锛岃嚜鍔ㄥ寲鐢ㄤ緥瑕嗙洊鐜 | +瀹夊叏 | 瀹夊叏鑷姩鍖 | +
+ +### 鎶鏈繚闅滈儴鏁板瓧鍖栬浆鍨嬪懆鎶ユā鏉(2019/8/31~2019/9/6) +
+ +鍔熻兘鍧 | 宸ヤ綔鍐呭 | 鏁板瓧鍖栬浆鍨嬩綋鐜 +--- | --- | --- +杩愮淮 | 铏氭嫙鍖栧鍣ㄥ寲涓閿儴缃插墠绔紑鍙 | 涓閿儴缃诧紝鍔犻熼儴缃叉晥鐜 +杩愮淮 | 缃戠粶鎷撴墤鍥剧殑缃戝叧灞/涓绘満灞/鏈嶅姟灞傚疄鐜伴噰闆嗙粯鍒 | 缃戠粶鍙鍖栵紝瀹屾垚80% +杩愮淮 | 瑙嗛浜戦儴缃
閲戝崕銆佸畞娉㈠凡瀹屾垚
瀹佹尝瀹屾垚鏂板3涓鐞嗗钩鍙伴儴缃诧紝杩涜鍩虹嚎鍜屾紡娲炵殑淇,棰勮9/14鍓嶅彲瀹屾垚淇鍚庤浆noc杩涜鍏綉鐨勫紑閫
琛㈠窞璧勬簮鍙戣捣鐢宠锛岃惤鍦板悗2澶╁唴瀹屾垚閮ㄧ讲 | 涓閿儴缃诧紝鏁堢巼鎻愬崌 +杩愮淮 | 瀹瑰櫒鍖栨柟妗堜笌鐮斿彂鑱斿悎鍔炲叕1鍛 | devops瑕佹眰dev & ops娌熼 +杩愮淮 | 鍒嗘瀽浜戙佹帴鍏ユ湇鍔$瓑涓婄嚎 | >20娆 +娴嬭瘯 | SDN缃戝叧娴嬭瘯绾冲叆鑷姩鍖栨祴璇曞钩鍙 | 鎺ュ彛鑷姩鍖栫敤渚嬫暟43涓, 鏁忔嵎銆佽嚜鍔ㄥ寲 +娴嬭瘯 | 瑙嗛浜戝钩鍙扮敓浜х幆澧冩帴鍙f祴璇 | 鎺ュ彛72涓紝鑷姩鍖栫敤渚481涓紝BUG 20涓 +娴嬭瘯 | 鑳藉姏寮鏀惧钩鍙扮鍥涜疆娴嬭瘯锛宐eta鐜鏀圭敤Docker閮ㄧ讲锛9/14鍓嶈緭鍑烘姤鍛 | 232涓敤渚嬶紝閫氳繃122涓紝澶辫触26涓紝闃诲8涓

娴嬭瘯閮ㄧ讲鏁堢巼鎻愬崌 +娴嬭瘯 | 鑷姩鍖栨祴璇曞钩鍙版帴鍙g敤渚嬪弬鏁板寲锛屾洿鍔犵伒娲伙紝鑷姩鍖栬剼鏈紪鍐欐晥鐜囨彁鍗 | 娴嬭瘯鏁堢巼鎻愬崌 +娴嬭瘯 | 鑷姩鍖栨祴璇曞钩鍙版墽琛屾満鏁堢巼浼樺寲锛9/11~14 | 鏁忔嵎 +娴嬭瘯 | 娴峰崡IPV6娴嬭瘯 | 鏁板瓧鍖栫▼搴︿綆锛岄渶鏀硅繘 +娴嬭瘯 | 鏅烘収妤煎畤椤圭洰娴嬭瘯锛9/5娴嬭瘯鍥㈤槦涓庢嫇灞曢儴娌熼氾紝浜嗚В涓氬姟鍜岄渶姹傦紝鍙婃棭鎺ュ叆 | 寮灞曡嚜鍔ㄥ寲娴嬭瘯 +鏀拺 | 瀹夊鏀拺鏍囧噯鍖 | 渚夸簬杩滅▼鏀拺锛屾晥鐜囨彁鍗囷紝鑺傜渷浜哄姏鎴愭湰 +瀹夊叏 | 鐗╄仈缃憈omcat绫诲熀绾夸慨澶嶅畬姣,nginx瀹屾垚7缁勫熀绾夸慨澶 | +瀹夊叏 | 闆嗗洟缃戜俊瀹変腑鏈熸鏌ワ紝闆嗙害鍖栧伐浣滄鏌ユ暣鏀癸紝鍚勭鎶ヨ〃 | +
+ +### 鎶鏈繚闅滈儴鏁板瓧鍖栬浆鍨嬭緭鍑 +
+ +鍔熻兘鍧 | 杞瀷瑕佺偣 | 鏁板瓧鍖栬緭鍑 +---- | ---- | ---- +鏀拺 | 鏍囧噯鍖栵紝鏀拺浜嬪姟褰㈡垚鏍囧噯鍖栵紝涓嶅悓闃舵閲忓寲杈撳叆杈撳嚭銆佷粙鍏ユ柟寮忓拰绋嬪害 | 瀹夊鏀拺鏍囧噯鍖栨枃妗f祦绋 +鏀拺 | 鏁板瓧鍖栫洃鎺,瀵规棩甯哥洃鎺ф寚鏍囪繘琛屾彁鐐硷紝閲嶇偣鎸囨爣閭欢鐭俊绛夋柟寮忓嵆鏃堕氱煡鍒颁汉 | 鍒嗙瓑绾с佸垎绫诲瀷鐩戞帶鎸囨爣鎶ュ憡 +鏀拺 | 鏁板瓧鍖栨瑙嗙偣锛屾⒊鐞嗕笟鍔℃祦绋嬶紝鎻掑叆妫瑙嗙偣鑷姩瀵规帴鍙f暟鎹拰娑堣垂鎯呭喌杩涜姣斿鏍告煡锛岀‘淇濅竴鑷达紝涓嶄竴鑷存彁渚涘憡璀 | 鏁版嵁鎺ュ彛鎶ュ憡锛堝鐭俊銆佸璁°佽瘽鍗...锛 +鏀拺 | 鏁板瓧鍖栨晠闅滈闃诧紝姊崇悊鍘嗗彶鎶ラ殰銆佹姇璇夊伐鍗曪紝閲囩敤鏁板瓧鍖栨墜娈碉紝鍙樿鍔ㄤ汉宸ヤ繚闅滀负涓诲姩鑷姩宸℃ | 鏁呴殰鍘嗗彶鏁板瓧鍖栨姤鍛婏紙鍖呭惈鏀硅繘鐐规⒊鐞嗭級 +杩愮淮 | 鏁忔嵎锛屽伐鍏枫佹柟娉曡 | 浣撶幇鏁忔嵎鎬濈淮宸ュ叿鎶ュ憡锛堜綋鐜板伐鍏峰悕绉般侀夊瀷銆佷綔鐢ㄣ佷娇鐢ㄤ綋楠岋級 +杩愮淮 | 杩愮淮鏈嶅姟璐ㄩ噺鏁板瓧鍖 | +杩愮淮 | 楂樺彲鐢ㄦф寚鏍囷紝姊崇悊鏁呴殰鐐癸紝閮ㄧ讲HA | 鍗曠偣鏁板瓧鍖 +杩愮淮 | 鍗忓姪娌熼氾紝浼氳娌熼氬閫氳繃鏁板瓧鍖栨墜娈电矘鍚坉ev鍜宱ps鐨勪俊鎭祦鍔 | *钀藉疄鍔ㄤ綔* +杩愮淮 | 宸ュ叿鐨勫叡浜紑鏀剧▼搴︼紝宸ュ叿琚閮ㄤ娇鐢ㄦ儏鍐 | 鑷姩鍖栬繍缁淬佽嚜鍔ㄥ寲娴嬭瘯骞冲彴浣跨敤鎯呭喌鎶ュ憡 +杩愮淮 | 鑷姩鍖栬繍缁达紝鏈嶅姟鍣ㄣ佸簲鐢ㄣ佷笟鍔$粺涓绾崇锛屾晠闅滈殧绂讳笌鑷剤 | 鑷姩鍖栬繍缁存暟瀛楀寲鎶ュ憡 锛堟湇鍔″櫒銆佸簲鐢ㄣ佷笟鍔℃儏鍐垫姤鍛婏級 +杩愮淮 | 鏁版嵁鍙鍖栵紝缃戠粶鍙鍖 | 鑷姩鍖栬繍缁存暟瀛楀寲鎶ュ憡 +娴嬭瘯 | 璇曡OKR | *钀藉疄鍔ㄤ綔* +娴嬭瘯 | 鑷姩鍖栫敤渚嬮噺锛岃嚜鍔ㄥ寲鐢ㄤ緥瑕嗙洊鐜 | 娴嬭瘯鏁板瓧鍖栨姤鍛 锛堟寜椤圭洰锛岃繘搴︺佽嚜鍔ㄥ寲瑕嗙洊鐜囷級 +娴嬭瘯 | 鍏ㄩ潰鑷姩鍖栧強鑷姩鍖栨垚鏈噺鍖栨祴绠 | 娴嬭瘯鏁板瓧鍖栨姤鍛 锛堟垚鏈祴绠楋級 +娴嬭瘯 | 鎶ラ殰鎶曡瘔涓庢祴璇曠殑鍏宠仈鍒嗘瀽 | 娴嬭瘯鏁板瓧鍖栨姤鍛 +娴嬭瘯 | 鑷姩鍖栨祴璇曞伐鍏蜂娇鐢ㄥ姣旀墦鍒嗗弽棣堬紝鎺ㄥ姩宸ュ叿鏀硅繘 | 鑷姩鍖栨祴璇曞伐鍏枫佸钩鍙伴夊瀷鎶ュ憡 +娴嬭瘯 | 椤圭洰鑷姩鍖栨ц兘娴嬭瘯娓呭崟銆佹瘮渚 | 娴嬭瘯鏁板瓧鍖栨姤鍛 +瀹夊叏 | 瀹夊叏鍐呭閮ㄥ伐浣滈噺鍖栵紝瀹夋壂鍙婁慨澶嶆儏鍐甸噺鍖栵紝鍒嗛」鐩畨鍏ㄤ繚闅滄⒊鐞 | 瀹夊叏鏁板瓧鍖栨姤鍛 +瀹夊叏 | 瀹夊叏宸ュ叿閫夊瀷鐮旂┒ | 瀹夊叏鏁板瓧鍖栨姤鍛 +瀹夊叏 | 瀹夊叏鑷姩鍖栵紝瀹夊叏宓屽叆娴嬭瘯涓 | 瀹夊叏鏁板瓧鍖栨姤鍛 +
+ + diff --git a/disaster_recovery.md b/disaster_recovery.md new file mode 100644 index 0000000..0e5ec07 --- /dev/null +++ b/disaster_recovery.md @@ -0,0 +1,43 @@ + +# 瀹圭伨 + +鍩熷唴HA,鍙傝僛HA鏋舵瀯](hanote.md) + +### 寮傚湴瀹圭伨 + +- 鐩殑 :grey_question: +- 鐩爣 :grey_question: +- 鎬庝箞鍋 :grey_question: +- 搴旂敤鍦烘櫙 :grey_question: +- 璁块棶鑰楁椂闂 :grey_question: +- 鎵╁睍鑳藉姏 :grey_question: +- 鍒嗗竷寮忎簨鍔A闂 :grey_question: +- 鏋舵瀯 :grey_question: + +鐑鍜屽娲荤敤鎴蜂笉鎰熺煡娴侀噺鍒囨崲 +鐑鏄富鐢ㄨ礋杞斤紝澶氭椿鏄鐐硅礋杞斤紝璐熻浇鍒嗘媴 + + +### 鏁呴殰婕旂粌 + + 娣锋矊宸ョ▼ + chaos monkey + monkeyking + +鏈嶅姟娉ㄥ唽涓績 + +## TBC :clock1::clock2::clock3::clock4::clock5::clock6::clock7::clock8::clock9::clock10: + +* references +1. [娣锋矊宸ョ▼宸ュ叿ChaosBlade](https://www.cnblogs.com/pigpdong/p/10932415.html) +1. [娣锋矊宸ョ▼鍘熷垯](https://www.jianshu.com/p/5d13540b53c3) +1. [principles of chaos engineering](http://principlesofchaos.org/) +1. [楗夸簡涔堝紓鍦板娲绘妧鏈疄鐜1](https://zhuanlan.zhihu.com/p/32009822) +1. [楗夸簡涔堝紓鍦板娲绘妧鏈疄鐜2](https://zhuanlan.zhihu.com/p/32587960) +1. [楗夸簡涔堝紓鍦板娲绘妧鏈疄鐜3](https://zhuanlan.zhihu.com/p/33430869) +1. [楗夸簡涔堝紓鍦板娲绘妧鏈疄鐜4](https://zhuanlan.zhihu.com/p/34958596) +1. [ref](https://blog.csdn.net/hxpjava1/article/details/86592360) +1. [ref](https://www.sohu.com/a/158859741_444159) +1. [寮傚湴澶氭椿 IDC 鏈烘埧鏋舵瀯](https://www.upyun.com/opentalk/377.html) +1. [寮傚湴澶氭椿鍦烘櫙涓嬬殑鏁版嵁鍚屾涔嬮亾](http://www.tianshouzhi.com/api/tutorials/canal/404) + diff --git a/dock_trans.md b/dock_trans.md new file mode 100644 index 0000000..93999ad --- /dev/null +++ b/dock_trans.md @@ -0,0 +1,220 @@ +# 瀵逛紶缁熷簲鐢ㄨ繘琛屽鍣ㄥ寲鏀归 + +涓绔欏紡瀛︿範AI鍩虹鐭ヨ瘑+鏍稿績鎶鏈+瀹炴搷鏁欑▼+鍏嶈垂宸ュ叿闆 +9澶ц绋嬶紝杈瑰涔犺竟瀹炴搷锛屽甫浣犻氬叧璁$畻鏈鸿瑙夊簲鐢紝杩樻湁鍏嶈垂宸ュ叿闆嗗拰寮鏀惧钩鍙颁緵鎵鏈夊紑鍙戣呬娇鐢紒 +鏈枃鐢 闄堣鑺 缈昏瘧鑷 FP Complete 缃戠珯涓婄殑鏂囩珷 CONTAINERIZING A LEGACY APPLICATION: AN OVERVIEW锛屽師浣滆 Emanuel Borsboom銆 + +浠ヤ笅涓鸿瘧鏂囧叏鏂囷紝濡傞渶闃呰鑻辨枃鍘熸枃锛岃杞埌鏂囨湯鑾峰彇閾炬帴锛 + +鏈枃鎺ヤ笅鏉ョ畝瑕佷粙缁嶄粈涔堟槸瀹瑰櫒鍖栵紝瑕佸湪 Docker 瀹瑰櫒涓繍琛屼紶缁熷簲鐢ㄧ殑缂樼敱锛屽鍣ㄥ寲鐨勮繃绋嬶紝鍏堕棿鍙兘閬囧埌鐨勯棶棰橈紝鍦ㄧ敤瀹瑰櫒閮ㄧ讲涔嬪悗鐨勫叾浠栨楠ょ瓑銆傝繖灏嗘槑鏄惧噺杞婚儴缃插伐浣滅殑鍘嬪姏锛屽苟璁╁簲鐢ㄦ湞鐫闆跺仠鏈洪儴缃插拰妯悜缂╂斁鐨勬柟鍚戝墠杩涖 + + +娉細鏈枃涓撴敞鍦ㄧ畝鍖栧簲鐢ㄧ殑閮ㄧ讲杩囩▼锛屽苟涓嶅寘鍚渶瑕佸搴旂敤閲嶆柊璁捐鐨勫唴瀹癸紝姣斿楂樺彲鐢ㄥ拰妯悜鎵╁睍銆 + + +## 姒傚康 + +### 浠涔堟槸鈥滀紶缁熲濆簲鐢紵 +骞舵病鏈変竴涓壒瀹氱殑瀹氫箟鑳藉鎻忚堪鎵鏈夌殑浼犵粺搴旂敤锛屼絾瀹冧滑鏈変竴浜涘叡鍚岀殑鐗规э細 +浣跨敤鏈湴鏂囦欢绯荤粺鏉ユ寔涔呭寲瀛樺偍锛屾暟鎹枃浠跺拰搴旂敤鐨勬枃浠舵贩鍚堝湪涓璧枫 +鍦ㄥ悓涓涓湇鍔″櫒涓婅繍琛屽緢澶氭湇鍔★紝姣斿 MySQL 鏁版嵁搴擄紝Redis 鏈嶅姟鍣紝nginx web 鏈嶅姟鍣紝涓涓 Ruby on Rails 搴旂敤锛屼互鍙婁竴澶у爢瀹氭椂浠诲姟 +浣跨敤澶ф潅鐑╁紡鐨勮剼鏈拰鎵嬪伐娴佺▼杩涜瀹夎鍜屽崌绾э紙鏂囨。涔熷緢绠闄嬶級銆 +閰嶇疆鏄瓨鍌ㄥ湪鏂囦欢閲岀殑锛岄氬父鏁h惤鍦ㄥ涓綅缃紝骞朵笌搴旂敤鐨勬枃浠舵贩鍦ㄤ竴璧枫 +杩涚▼闂寸殑閫氫俊鏄熷姪鏈湴鏂囦欢绯荤粺杩涜鐨勶紙姣斿鍦ㄧ鐩樹笂鏀句竴涓枃浠讹紝鍙︿竴涓繘绋嬫潵璇诲彇锛夛紝鑰屼笉鏄疶CP/IP銆 +鎸夌収鍗曚釜鏈嶅姟鍣ㄤ笂鍙繍琛屼竴涓簲鐢ㄧ殑绀轰緥鐨勬柟寮忔潵璁捐鐨勩 + + +### 浼犵粺搴旂敤鐨勭己鐐 +鑷姩鍖栭儴缃插緢鍥伴毦銆 +濡傛灉闇瑕佽繍琛屽簲鐢ㄧ殑澶氫釜涓嶅悓鐨勫疄渚嬶紝寰堥毦璁╁涓疄渚嬪湪鍚屼竴涓湇鍔″櫒涓娾滃叡瀛樷濄 +濡傛灉鏈嶅姟鍣ㄥ仠鏈猴紝鐢变簬闇瑕佹墜宸ユ祦绋嬫墍浠ラ渶瑕佽緝闀跨殑鏃堕棿鏉ユ仮澶嶃 +閮ㄧ讲鏂扮増鏈殑杩囩▼鍩烘湰鏄墜鍔ㄧ殑锛屾垨鑰呭ぇ閮ㄥ垎鏄墜鍔ㄧ殑锛岄毦浠ュ洖婊氥 +寰堟湁鍙兘娴嬭瘯鐜涓庣敓浜х幆澧冩湁杈冨ぇ宸紓锛屽鑷翠竴浜涚敓浜х幆澧冮棶棰樹笉鑳藉湪娴嬭瘯鏈熼棿鍙戠幇銆 +寰堥毦閫氳繃澧炲姞鏂扮殑瀹炰緥鏉ヨ繘琛屾í鍚戞墿灞曘 + + +### 浠涔堟槸瀹瑰櫒鍖栵紵 +灏嗗簲鐢ㄢ滃鍣ㄥ寲鈥濈殑杩囩▼锛屽氨鏄搴旂敤鑳藉杩愯鍦 Docker 瀹瑰櫒鎴栫被浼兼妧鏈腑锛屽畠浠兘灏嗘搷浣滅郴缁熺幆澧冨拰搴旂敤灏佽鍦ㄤ竴璧凤紙瀹屾暣鐨勭郴缁熼暅鍍忥級銆傜敱浜庡鍣ㄨ兘缁欏簲鐢ㄦ彁渚涜繎浼间簬瀹屾暣绯荤粺鐨勭幆澧冿紝杩欏氨涓哄湪涓嶄慨鏀癸紝鎴栬呭皯閲忎慨鏀瑰簲鐢ㄧ殑鎯呭喌涓嬶紝瀵瑰簲鐢ㄧ殑閮ㄧ讲杩涜鐜颁唬鍖栨敼閫犳彁渚涗簡涓绉嶆濊矾銆傝繖涔熸槸搴旂敤鐨勬灦鏋勬寔缁兘淇濇寔鈥滀簯鍙嬪ソ鈥濈殑鍩虹銆 + + +## 瀹瑰櫒鍖栫殑濂藉 + +閮ㄧ讲瀹规槗澶氫簡锛氫娇鐢ㄦ柊鐨勫鍣ㄩ暅鍍忕洿鎺ユ浛鎹㈡暣涓佺増鏈 +鑷姩鍖栭儴缃蹭篃鐩稿瀹规槗锛岀敋鑷冲彲浠ュ畬鍏ㄧ敱 CI锛圕ontinuous Integration, 鎸佺画闆嗘垚锛夋潵椹卞姩銆 +閮ㄧ讲澶辫触鏃剁殑鍥炴粴鍙鍒囨崲鍒颁箣鍓嶇殑闀滃儚銆 +搴旂敤鍗囩骇闈炲父瀹规槗锛屽洜涓虹幇鍦ㄦ病鏈夊彲鑳藉嚭閿欑殑鈥滀腑闂存楠も濅簡锛堜笉绠″畠鏄惁褰卞搷鏁翠釜閮ㄧ讲杩囩▼鐨勬垚鍔燂級銆 +鐩稿悓鐨勫鍣ㄩ暅鍍忓彲浠ュ湪涓嶅悓鐨勭幆澧冧腑鍏呭垎娴嬭瘯锛屽啀鐩存帴閮ㄧ讲鍒扮敓浜х幆澧冦傝繖鍙互纭繚娴嬭瘯鎬佷笌鐢熶骇鎬佺殑浜у搧鏄畬鍏ㄤ竴鑷寸殑銆 +绯荤粺鏇村鏄撲粠瀹曟満涓仮澶嶏紝鍥犱负鍙互杩呴熷湪鏂扮‖浠惰祫婧愪笂鍚姩瑁呮湁杩欎釜搴旂敤鐨勬柊瀹瑰櫒锛屽苟闄勫姞鍒板悓涓鏁版嵁婧愪笂銆 +寮鍙戜汉鍛樿兘鍦ㄦ湰鍦颁互瀹瑰櫒鐨勫舰寮忥紝鍦ㄦ洿閫肩湡鐨勭幆澧冮噷娴嬭瘯鏂板姛鑳姐 +纭欢璧勬簮鐨勫埄鐢ㄦ洿楂樻晥锛屽湪鍗曚竴涓绘満涓婄幇鍦ㄥ彲浠ヨ繍琛屽涓鍣ㄥ簲鐢紝鑰屼互鍓嶄笉鑳姐 +瀹瑰櫒鍖栨槸鏀寔闆跺仠鏈哄崌绾с侀噾涓濋泙閮ㄧ讲銆侀珮鍙敤鍜屾í鍚戞墿灞曠殑鍧氬疄鍩虹銆 + +## 瀹瑰櫒鍖栦箣澶栫殑閫夋嫨 + +鐢 Puppet 鍜 Chef 涔嬬被鐨勯厤缃鐞嗗伐鍏凤紝鑳借В鍐充竴閮ㄥ垎鐨勨滀紶缁熲濋棶棰橈紝姣斿鐜涓鑷存х瓑銆備絾瀹冧滑涓嶈兘鏀寔鈥滃師瀛愨濋儴缃诧紝浠ュ強瀵瑰簲鐢+鐜鐨勫畬鏁村洖婊氥傝屼竴绉嶆棤娉曟柟渚垮洖婊氱殑閮ㄧ讲鏂规锛屼粛鐒朵細鍦ㄩ儴缃蹭腑閫斿厖婊¢闄┿ + +铏氭嫙鏈洪暅鍍忔槸鑳藉疄鐜伴儴鍒嗕笂杩拌兘鍔涚殑鍙︿竴绉嶆柟娉曪紝鑰屼笖鍦ㄦ湁浜涙儏褰腑锛岀浉瀵逛簬瀹瑰櫒锛屼娇鐢ㄥ畬鏁寸殑铏氭満杩涜鈥滃師瀛愬湴鈥濋儴缃蹭細鏇村悎閫傘備絾浣跨敤铏氭満鐨勪富瑕侀棶棰樻槸锛屽畠瀵圭‖浠剁殑鍒╃敤鐜囨洿浣庢晥銆傚洜涓鸿櫄鏈洪渶瑕佷竴浜涚嫭鍗犵殑璧勬簮锛圕PU銆佸唴瀛樺拰纾佺洏绛夛級锛岃屽鍣ㄤ箣闂村彲浠ュ叡浜富鏈虹殑璧勬簮銆 + + +## 濡備綍瀹瑰櫒鍖 + + +### 涓銆佸噯澶囧伐浣 + + +#### 鍒楀嚭瀛樺偍鏁版嵁鐨勬枃浠剁郴缁熶綅缃 + +鐢变簬閮ㄧ讲鏂扮増鏈簲鐢ㄦ槸閫氳繃鏇挎崲 Docker 闀滃儚瀹炵幇鐨勶紝鎵浠ヤ换浣曟寔涔呭寲鐨勬暟鎹兘搴旇瀛樺偍鍦ㄥ鍣ㄤ箣澶栥傚鏋滆繍姘斾笉閿欑殑璇濓紝鍙兘閬囧埌搴旂敤宸茬粡灏嗘墍鏈夋暟鎹兘鍐欏叆浜嗙壒瀹氫綅缃紝涓嶈繃澶氭暟浼犵粺搴旂敤甯稿皢瀹冧滑鐨勬暟鎹線纾佺洏涓婂埌澶勪贡鍐欙紝杩樻湁鍙兘涓庡簲鐢ㄦ湰韬殑鏂囦欢娣峰湪涓璧枫侱ocker 鐨勫彲鍔犺浇瀛樺偍鍗凤紙volume锛夎涓绘満鐨勬枃浠剁郴缁熻兘鏆撮湶缁欏鍣ㄧ敤浣滅壒瀹氳矾寰勶紝杩欐牱鏁版嵁鍙互鍦ㄥ鍣ㄤ箣闂寸暀瀛樸傛墍浠ワ紝鎴戜滑鏃犺鏄摢绉嶆儏鍐碉紝鎴戜滑閮介渶瑕佸垪鍑虹敤浜庡瓨鍌ㄦ暟鎹殑浣嶇疆銆 + +鐜板湪浣犲彲浠ヨ冭檻鑰冭檻璁╁簲鐢ㄩ噷鎵鏈夎緭鍑虹殑鏁版嵁鍐欏叆鍒版枃浠剁郴缁熺殑鍚屼竴鐩綍鍘讳簡锛岃繖鏍疯兘鏄庢樉绠鍖栧鍣ㄥ寲鐗堟湰鐨勯儴缃插伐浣溿備笉杩囷紝濡傛灉淇敼搴旂敤闅句互杈炬垚锛岃繖涔熷苟涓嶆槸蹇呴』鐨勩 + + +#### 鎵惧嚭浼氶殢閮ㄧ讲鐜鍙樺寲鐨勯厤缃暟鎹 + +涓轰簡纭繚涓鑷存э紝鍚屼竴涓暅鍍忚鍦ㄥ濂楃幆澧冧腑浣跨敤锛堟瘮濡傦紝娴嬭瘯鍜岀敓浜э級锛屽洜姝ゅ繀椤昏鍒楀嚭鎵鏈夊湪涓嶅悓鐜涓細鍙樺寲鐨勯厤缃硷紝鍦ㄥ惎鍔ㄥ鍣ㄧ殑鏃跺埢鍐嶈缃笺傚鍣ㄤ腑鐨勭▼搴忓埌鏃跺欏彲浠ヤ粠鐜鍙橀噺锛屾垨鑰呬粠閰嶇疆鏂囦欢涓幏鍙栬繖浜涢厤缃殑鍊笺 + +浣犲彲浠ョ幇鍦ㄥ氨鑰冭檻淇敼搴旂敤骞舵敮鎸佷粠鐜鍙橀噺涓鍙栭厤缃紝浠ヤ究绠鍖栧鍣ㄥ寲鐨勮繃绋嬨傚悓鏍风殑锛屽鏋滀笉濂戒慨鏀瑰簲鐢紝杩欎篃鏄笉涓瀹氭槸蹇呰鐨勩 + + +#### 鎵惧嚭瀹规槗绉诲嚭鍘荤殑鏈嶅姟 + +鍦ㄥ悓涓鏈哄櫒涓婏紝鎴戜滑鐨勫簲鐢ㄥ彲鑳借渚濊禆涓浜涘叾浠栨湇鍔★紝瀹冧滑濡傛灉鐙珛鎬ф瘮杈冮珮銆佷娇鐢 TCP/IP 閫氫俊锛屽氨寰堝鏄撹兘绉诲嚭鍘汇備妇渚嬫潵璇达紝濡傛灉鍦ㄥ悓涓鏈哄櫒涓婅繍琛 MySQL 鎴 PostgreSQL 鏁版嵁搴擄紝鎴栬呯被浼 Redis 鐨勭紦瀛橈紝閭e氨瀹规槗绉诲嚭鍘讳簡銆傚彲鑳藉悓鏃惰繕闇瑕佽皟鏁撮厤缃紝鎵嶈兘鏀寔鎸囧畾鏈哄櫒鍚嶏紙hostname锛夊拰绔彛锛坧ort锛夎屼笉鏄洿鎺ヨ涓哄簲鐢ㄨ繍琛屽湪 localhost銆 + + +### 浜屻佸垱寤哄鍣ㄩ暅鍍 + + +#### 鍒涘缓鐢ㄤ簬瀹夎搴旂敤鐨 Dockerfile + +濡傛灉宸茬粡鏈夊熀浜庤剼鏈垨鑰 Chef銆丳uppet 涔嬬被鐨勯厤缃鐞嗗伐鍏风殑鑷姩鍖栧畨瑁呰兘鍔涳紝閭h繖涓繃绋嬪氨寰堢畝鍗曚簡銆傛寫閫変竴涓枩娆㈢殑绯荤粺闀滃儚銆佸畨瑁呮墍鏈変緷璧栵紝鐒跺悗杩愯鑷姩鍖栬剼鏈氨琛屼簡銆 + +濡傛灉鐩墠鐨勫畨瑁呰繃绋嬫槸鎵嬪姩鐨勶紝灏遍渶瑕佸啓涓浜涜剼鏈簡銆備笉杩囷紝鐢变簬闀滃儚鐨勭姸鎬佹槸宸茬煡鐨勶紝鍦ㄨ繖鍎跨紪鍐欒剼鏈姣斿熀浜庡彲鑳藉瓨鍦ㄤ笉涓鑷存х殑鍘熺敓绯荤粺鏉ョ殑瀹规槗銆 + +濡傛灉鎻愬墠鎵惧嚭浜嗚绉诲嚭鍘荤殑鏈嶅姟锛岄偅涔堝湪鑴氭湰閲屽氨涓嶅簲璇ュ畨瑁呭畠浠簡銆 + +涓嬮潰鏄竴涓畝鍗曠殑绀轰緥 Dockerfile锛 + + +``` +# 鍩轰簬瀹樻柟 Ubuntu 16.04 Docker 闀滃儚 +FROM ubuntu:16.04 + +# 瀹夎鎵渚濊禆鐨 Ubuntu 杞欢鍖 +RUN apt-get install -y \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# 灏嗗簲鐢ㄧ殑鏂囦欢澶嶅埗鍒伴暅鍍忛噷 +ADD . /app + +# 杩愯瀹夎鑴氭湰 +RUN /app/setup.sh + +# 鍒囨崲鍒板簲鐢ㄧ殑鐩綍 +WORKDIR /app + +# 鎸囧畾搴旂敤鐨勫惎鍔ㄨ剼鏈 +COMMAND /app/start.sh +``` +#### 鍒朵綔鐢ㄤ簬閰嶇疆鐨勫惎鍔ㄨ剼鏈 + +濡傛灉搴旂敤宸茬粡鍦ㄤ娇鐢ㄧ幆澧冨彉閲忎腑璇诲彇閰嶇疆鍊间簡锛岄偅杩欎竴姝ュ彲浠ヨ烦杩囦簡銆傚鏋滆浠庢枃浠堕噷璇诲彇鐗瑰畾鐜鐩稿叧鐨勯厤缃硷紝閭e惎鍔ㄨ剼鏈氨瑕佽兘浠庣幆澧冨彉閲忛噷璇诲彇閰嶇疆鍊硷紝骞跺皢杩欎簺鍊兼洿鏂板埌閰嶇疆鏂囦欢涓幓銆 + +杩欓噷鏈変竴涓惎鍔ㄨ剼鏈殑渚嬪瓙锛 + +``` +#!/usr/bin/env bash +set -e + +# 鎶婄幆澧冨彉閲 $MYAPPCONFIG 鐨勫兼坊鍔犲埌閰嶇疆鏂囦欢涓 +cat >>/app/config.txt < +DAEMON_ARGS="$DAEMON_ARGS --allow-header-host=192.168.65.17" + +http://blog.51cto.com/linhong/2134910 + + +//鍒朵綔鏀惧埌绉佹湁浠撳簱 + + +docker login -u admin -p Harbor12345 harbor.51iwifi.com +docker push harbor.51iwifi.com/test/ubuntu:wr + +//浠庝粨搴撳彇鍑 +docker pull harbor.51awifi.com/test/jenkins-demo:716a813 + +docker run --name wr2 -d ubuntu:wr /bin/sh -c "while true; do echo hello world; sleep 2; done" + +--insecure-registry 鐨勪綔鐢ㄦ槸 www.monicacca.com 浣跨敤鐨勬槸http鑰岄潪https銆傚姞涓--insecure-registry 灏卞彲浠ュ拷鐣 + + +2018-9-10 +============================ +yum install docker + +[root@localhost ~]# docker search moodle +Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? + +service docker start +//https://hub.docker.com/r/jhardison/moodle/ +docker pull docker.io/jhardison/moodle +docker run -d --name DB -p 3306:3306 -e MYSQL_DATABASE=moodle -e MYSQL_ROOT_PASSWORD=moodle -e MYSQL_USER=moodle -e MYSQL_PASSWORD=moodle mysql:5 +//docker run -d -P --name moodle --link DB:DB -e MOODLE_URL=http://192.168.188.19 -p 80:80 -p 443:443 jhardison/moodle +docker run -d -P --name moodle --link DB:DB -e MOODLE_URL=https://192.168.188.19 -p 443:443 jhardison/moodle + + +? docker rm moodle 鍚庝慨鏀规槸鍚﹀氨涓嶄繚瀛樹簡 + +娓呯悊鎵鏈夊仠姝㈢殑瀹瑰櫒 +docker container prune +娓呯悊鎵鏈変笉鐢ㄦ暟鎹(鍋滄鐨勫鍣,涓嶄娇鐢ㄧ殑volume,涓嶄娇鐢ㄧ殑networks,鎮寕鐨勯暅鍍) +docker system prune -a + + +a, 鑾峰彇瀹瑰櫒ip +docker inspect $container_name | grep IPAddress +docker inspect moodle | grep IPAddress +b. 娣诲姞杞彂瑙勫垯 +iptables -t nat -A DOCKER -p tcp --dport $host_port -j DNAT --to-destination $docker_ip:$docker_port +iptables -t nat -A DOCKER -p tcp --dport 8080 -j DNAT --to-destination 172.17.0.3:8080 + +a. 鑾峰彇瑙勫垯缂栧彿 + iptables -t nat -nL --line-number +b. 鏍规嵁缂栧彿鍒犻櫎瑙勫垯 + iptables -t nat -D DOCKER $num + +ln -s ../sites-available/edusoho edusoho + + +2018-10-19 +============================ +docker harbor 浠撳簱 +docker login -u admin -p Harbor12345 https://hub.51iwifi.com + +docker tag hub.51iwifi.com/jhardison/moodle:v1 hub.51iwifi.com/chen.io/jhardison/moodle +docker push hub.51iwifi.com/chen.io/jhardison/moodle + +docker tag hub.51iwifi.com/mysql:v1 hub.51iwifi.com/chen.io/mysql:v1 +docker push hub.51iwifi.com/chen.io/mysql:v1 + + +2018-10-30 +============================ +yum install docker + +/etc/docker/daemon.json + { "insecure-registries": ["harbor.51awifi.com","hub.51iwifi.com","harbor.51iwifi.com","192.168.193.1"] } + + docker run -d --name DB -p 3306:3306 -e MYSQL_DATABASE=moodle -e MYSQL_ROOT_PASSWORD=moodle -e MYSQL_USER=moodle -e MYSQL_PASSWORD=moodle hub.51iwifi.com/chen.io/mysql:v1 + docker run -d -P --name moodle --link DB:DB -e MOODLE_URL=https://192.168.188.20 -p 443:443 hub.51iwifi.com/chen.io/jhardison/moodle + diff --git a/docs/.DS_Store b/docs/.DS_Store new file mode 100644 index 0000000..3008129 Binary files /dev/null and b/docs/.DS_Store differ diff --git a/docs/IT杩愮淮鏈嶅姟鎿嶄綔娴佺▼鍙婅鑼.pdf b/docs/IT杩愮淮鏈嶅姟鎿嶄綔娴佺▼鍙婅鑼.pdf new file mode 100755 index 0000000..ddd91b3 Binary files /dev/null and b/docs/IT杩愮淮鏈嶅姟鎿嶄綔娴佺▼鍙婅鑼.pdf differ diff --git a/docs/MyCat_In_Action_涓枃鐗.doc b/docs/MyCat_In_Action_涓枃鐗.doc new file mode 100644 index 0000000..ae7d385 Binary files /dev/null and b/docs/MyCat_In_Action_涓枃鐗.doc differ diff --git a/docs/SDN鎶鏈极璋(CG).pptx b/docs/SDN鎶鏈极璋(CG).pptx new file mode 100644 index 0000000..8a580f3 Binary files /dev/null and b/docs/SDN鎶鏈极璋(CG).pptx differ diff --git a/docs/internal/鎶鏈繚闅滈儴鍛ㄥ伐浣滆鍒掕〃锛9鏈2鏃-9鏈6鏃ワ級.xlsx b/docs/internal/鎶鏈繚闅滈儴鍛ㄥ伐浣滆鍒掕〃锛9鏈2鏃-9鏈6鏃ワ級.xlsx new file mode 100644 index 0000000..6a10a94 Binary files /dev/null and b/docs/internal/鎶鏈繚闅滈儴鍛ㄥ伐浣滆鍒掕〃锛9鏈2鏃-9鏈6鏃ワ級.xlsx differ diff --git a/docs/internal/鎶鏈繚闅滈儴鏁板瓧鍖栬浆鍨嬪伐浣.docx b/docs/internal/鎶鏈繚闅滈儴鏁板瓧鍖栬浆鍨嬪伐浣.docx new file mode 100644 index 0000000..2f12a76 Binary files /dev/null and b/docs/internal/鎶鏈繚闅滈儴鏁板瓧鍖栬浆鍨嬪伐浣.docx differ diff --git a/docs/internal/鏁板瓧鍖栬浆鍨嬪睍绀.pptx b/docs/internal/鏁板瓧鍖栬浆鍨嬪睍绀.pptx new file mode 100644 index 0000000..de7e695 Binary files /dev/null and b/docs/internal/鏁板瓧鍖栬浆鍨嬪睍绀.pptx differ diff --git a/docs/internal/姣忓懆璐ㄩ噺鎶ュ憡_2019骞9鏈堢1鍛(8.30-9.5) .pptx b/docs/internal/姣忓懆璐ㄩ噺鎶ュ憡_2019骞9鏈堢1鍛(8.30-9.5) .pptx new file mode 100644 index 0000000..bb7be8e Binary files /dev/null and b/docs/internal/姣忓懆璐ㄩ噺鎶ュ憡_2019骞9鏈堢1鍛(8.30-9.5) .pptx differ diff --git a/docs/kubernates/kubernetes鎵嬪唽2017鏈鏂扮増_寮虹儓鎺ㄨ崘_涔︾鐗.pdf b/docs/kubernates/kubernetes鎵嬪唽2017鏈鏂扮増_寮虹儓鎺ㄨ崘_涔︾鐗.pdf new file mode 100644 index 0000000..29a9b80 Binary files /dev/null and b/docs/kubernates/kubernetes鎵嬪唽2017鏈鏂扮増_寮虹儓鎺ㄨ崘_涔︾鐗.pdf differ diff --git a/docs/master/Effective DevOps_ Building a Cu - Jennifer Davis.pdf b/docs/master/Effective DevOps_ Building a Cu - Jennifer Davis.pdf new file mode 100644 index 0000000..cf4199b Binary files /dev/null and b/docs/master/Effective DevOps_ Building a Cu - Jennifer Davis.pdf differ diff --git a/docs/master/鎸佺画浜や粯-鍙戝竷鍙潬杞欢鐨勭郴缁熸柟娉.pdf b/docs/master/鎸佺画浜や粯-鍙戝竷鍙潬杞欢鐨勭郴缁熸柟娉.pdf new file mode 100644 index 0000000..81220b3 Binary files /dev/null and b/docs/master/鎸佺画浜や粯-鍙戝竷鍙潬杞欢鐨勭郴缁熸柟娉.pdf differ diff --git a/docs/mycat鍒嗙墖瑙勫垯 .docx b/docs/mycat鍒嗙墖瑙勫垯 .docx new file mode 100644 index 0000000..37026d7 Binary files /dev/null and b/docs/mycat鍒嗙墖瑙勫垯 .docx differ diff --git a/docs/浜戝師鐢熶笅瀹夊叏杩愮淮缁忛獙鍒嗕韩.pptx b/docs/浜戝師鐢熶笅瀹夊叏杩愮淮缁忛獙鍒嗕韩.pptx new file mode 100644 index 0000000..213081c Binary files /dev/null and b/docs/浜戝師鐢熶笅瀹夊叏杩愮淮缁忛獙鍒嗕韩.pptx differ diff --git a/docs/浜戝甯﹀涔(CG).pptx b/docs/浜戝甯﹀涔(CG).pptx new file mode 100644 index 0000000..11e038e Binary files /dev/null and b/docs/浜戝甯﹀涔(CG).pptx differ diff --git a/docs/浠庣粍浠跺埌寰湇鍔.pdf b/docs/浠庣粍浠跺埌寰湇鍔.pdf new file mode 100644 index 0000000..964657c Binary files /dev/null and b/docs/浠庣粍浠跺埌寰湇鍔.pdf differ diff --git a/docs/骞寸粓鎬荤粨寰堢墰鐨勮繍缁存姤鍛奝PT.ppt b/docs/骞寸粓鎬荤粨寰堢墰鐨勮繍缁存姤鍛奝PT.ppt new file mode 100755 index 0000000..2d2521b Binary files /dev/null and b/docs/骞寸粓鎬荤粨寰堢墰鐨勮繍缁存姤鍛奝PT.ppt differ diff --git a/docs/鏂版氮鑷姩鍖栬繍缁.ppt b/docs/鏂版氮鑷姩鍖栬繍缁.ppt new file mode 100755 index 0000000..6bd9f98 Binary files /dev/null and b/docs/鏂版氮鑷姩鍖栬繍缁.ppt differ diff --git a/docs/婊存淮鍑鸿鑷姩鍖栬繍缁村疄璺-淇炶繘绉.pdf b/docs/婊存淮鍑鸿鑷姩鍖栬繍缁村疄璺-淇炶繘绉.pdf new file mode 100755 index 0000000..814c96d Binary files /dev/null and b/docs/婊存淮鍑鸿鑷姩鍖栬繍缁村疄璺-淇炶繘绉.pdf differ diff --git a/docs/绯荤粺杩愮淮鏈嶅姟-缃戠粶鎶ヤ环.xls b/docs/绯荤粺杩愮淮鏈嶅姟-缃戠粶鎶ヤ环.xls new file mode 100755 index 0000000..4b87d4a Binary files /dev/null and b/docs/绯荤粺杩愮淮鏈嶅姟-缃戠粶鎶ヤ环.xls differ diff --git a/docs/鑵捐DevOps鑷姩鍖栬繍缁村钩鍙-缁囦簯.ppt b/docs/鑵捐DevOps鑷姩鍖栬繍缁村钩鍙-缁囦簯.ppt new file mode 100755 index 0000000..024767e Binary files /dev/null and b/docs/鑵捐DevOps鑷姩鍖栬繍缁村钩鍙-缁囦簯.ppt differ diff --git a/docs/鑷姩鍖栬繍缁村钩鍙.ppt b/docs/鑷姩鍖栬繍缁村钩鍙.ppt new file mode 100755 index 0000000..8670a1a Binary files /dev/null and b/docs/鑷姩鍖栬繍缁村钩鍙.ppt differ diff --git a/docs/鑷姩鍖栬繍缁村钩鍙拌鍒.pdf b/docs/鑷姩鍖栬繍缁村钩鍙拌鍒.pdf new file mode 100755 index 0000000..cf05d08 Binary files /dev/null and b/docs/鑷姩鍖栬繍缁村钩鍙拌鍒.pdf differ diff --git a/docs/鑷姩鍖栬繍缁村钩鍙拌涓囧彴鏈嶅姟鍣ㄥ叡鑸-鐧惧害浠樻檾.pdf b/docs/鑷姩鍖栬繍缁村钩鍙拌涓囧彴鏈嶅姟鍣ㄥ叡鑸-鐧惧害浠樻檾.pdf new file mode 100755 index 0000000..32a5918 Binary files /dev/null and b/docs/鑷姩鍖栬繍缁村钩鍙拌涓囧彴鏈嶅姟鍣ㄥ叡鑸-鐧惧害浠樻檾.pdf differ diff --git a/docs/璇佸埜鍩洪噾琛屼笟IT鑷姩鍖栬繍缁寸洃鎺у钩鍙版柟妗.ppt b/docs/璇佸埜鍩洪噾琛屼笟IT鑷姩鍖栬繍缁寸洃鎺у钩鍙版柟妗.ppt new file mode 100755 index 0000000..a7f62be Binary files /dev/null and b/docs/璇佸埜鍩洪噾琛屼笟IT鑷姩鍖栬繍缁寸洃鎺у钩鍙版柟妗.ppt differ diff --git a/docs/杩愮淮宸ョ▼甯堥潰璇曢.pdf b/docs/杩愮淮宸ョ▼甯堥潰璇曢.pdf new file mode 100755 index 0000000..0d9cca5 Binary files /dev/null and b/docs/杩愮淮宸ョ▼甯堥潰璇曢.pdf differ diff --git a/docs/杩愮淮鏈嶅姟鏂规(鍏)-10(妗嗘灦).doc b/docs/杩愮淮鏈嶅姟鏂规(鍏)-10(妗嗘灦).doc new file mode 100755 index 0000000..c93130f Binary files /dev/null and b/docs/杩愮淮鏈嶅姟鏂规(鍏)-10(妗嗘灦).doc differ diff --git a/docs/杩愮淮鑷姩鍖栧疄璺.docx b/docs/杩愮淮鑷姩鍖栧疄璺.docx new file mode 100755 index 0000000..f62d007 Binary files /dev/null and b/docs/杩愮淮鑷姩鍖栧疄璺.docx differ diff --git a/docs/杩愮淮鑷姩鍖栧疄璺典箣璺.pptx b/docs/杩愮淮鑷姩鍖栧疄璺典箣璺.pptx new file mode 100755 index 0000000..803beb2 Binary files /dev/null and b/docs/杩愮淮鑷姩鍖栧疄璺典箣璺.pptx differ diff --git a/feature_team.md b/feature_team.md new file mode 100644 index 0000000..0d9dbe5 --- /dev/null +++ b/feature_team.md @@ -0,0 +1,82 @@ + +# 铏氬疄缁撳悎鐨 Feature Team 瀹炶返 + +浣滆咃細楂樿幑 + +閮ㄩ棬锛氭晥鑳芥敼杩 + + +鑳屾櫙 +姣忎釜鍏徃涓嶅悓鐨勬垚闀垮巻鍙层佷笉鍚岀殑涓氬姟鏋舵瀯鍜岀鐞嗛鏍硷紝閫犲氨浜嗕笉鍚岀殑鍏徃缁勭粐鏋舵瀯銆傜粍缁囨灦鏋勬槸涓哄叕鍙稿彂灞曟湇鍔$殑锛屾墍璋撯滃畾鎴樼暐锛屾惌鐝瓙锛屽甫闃熶紞鈥濄備簰鑱旂綉鏃朵唬娉ㄩ噸蹇熷搷搴斿競鍦哄彉鍖栫殑鑳藉姏锛岀粍缁囨灦鏋勪篃闇瑕佹弧瓒虫洿鐏垫椿鐨勫崗浣滄ā寮忋傛湰绡囨枃绔犱富瑕佷粙缁嶆湁璧炵殑瀹炶返锛岃亴鑳藉瀷鍥㈤槦涓嶧eature Team锛堢畝绉癋T锛夋ā寮忕浉缁撳悎锛岄氳繃寤虹珛涓嶅悓灞傜骇鐨勮櫄鎷熺粍缁囷紝浣垮崗浣滄ā寮忔洿鍔犳晱鎹凤紝鏉ュ簲瀵规湭鏉ュ競鍦虹幆澧冨甫鏉ョ殑鏈洪亣鍜屾寫鎴樸 + + +涓銆佽亴鑳界粍缁囨灦鏋勭殑闂 +鑱岃兘鍨嬬粍缁囨灦鏋勬槸鎸夎亴鑳芥潵缁勭粐閮ㄩ棬鍒嗗伐锛屽嵆浠庨珮灞傚埌鍩哄眰锛屽潎鎶婃壙鎷呯浉鍚岃亴鑳界殑绠$悊涓氬姟鍙婂叾浜哄憳缁勭粐鍦ㄤ竴璧凤紝璁剧疆鐩稿簲鐨勭鐞嗛儴闂ㄥ拰绠$悊鑱屽姟銆傚叾濂藉鏄捐屾槗瑙侊細鍒嗗伐鏄庣‘銆佷汉鍛樿皟鍔ㄧ伒娲汇佺浉鍚屼笓涓氱殑缁勭粐鍒╀簬涓撲笟鑳藉姏鐨勬彁鍗囥傚鍥撅細 + +杩欑褰㈠紡杩愪綔浼氭湁鍑犵偣闂褰卞搷鍗忎綔鏁堢巼锛 + +1.1 鍥㈤槦涓嶆柇鎵╁紶锛岃鍒掑崗璋冩垚鏈珮锛屽搷搴斿彉鎱 +鍥㈤槦鎵╁ぇ锛岀粺涓鐨勫緟鍔炶鍒掑氨浼氬彉寰楀簽澶с傚崗璋冧笉鍚岃亴鑳借鑹茶繘琛岃鍒掕瘎浼版垚鏈潪甯搁珮锛屽嵆渚胯鍒掑仛鐨勯潪甯稿畬缇庯紝涔熼毦浠ラ伩鍏嶄釜鍒揣鎬ユ彃闃熺殑椤圭洰锛屽惎鍔ㄩ」鐩椂鍥犵己灏戞煇绔祫婧愶紝闇瑕佺瓑寰呮垨鍗忚皟鐨勬儏鍐靛薄瑙佷笉椴滐紝褰卞搷浜嗗搷搴斾笟鍔$殑閫熷害銆 + +1.2 涓存椂缁勫缓椤圭洰缁勫椤圭洰闀挎湡鐩爣鎰熺煡杈冨急 +褰撳墠椤圭洰缁勬垚鍛樿緝鍏虫敞鏈」鐩殑鐩爣锛岄」鐩畬鎴愬浜庢暣浣撲笟鍔℃潵璇翠粎鏄樁娈垫ф垚鏋溿傚欢缁х殑椤圭洰锛岄」鐩垚鍛樺彂鐢熶簡鍙樺寲銆傞暱姝や互寰锛屽浜庨」鐩儗鍚庣殑闀挎湡鐩爣锛岄」鐩粍鎴愬憳闅句互鎰熺煡銆 + +1.3 鐩稿涓氬姟鐩爣鏇村叧娉ㄩ儴闂ㄧ洰鏍 +鍚勮亴鑳介儴闂ㄩ兘鍚勬湁鍏跺唴閮ㄨ鍒掔殑鏃ュ父宸ヤ綔锛屾墍浠ヤ釜浜轰紭鍏堣冭檻鐨勫線寰涓嶆槸鏁翠釜鍏徃涓氬姟鐨勭洰鏍囷紝鑰屾槸閮ㄩ棬鐨勭洰鏍囥傝繖灏变細閫犳垚椤圭洰涓偅浜涘湪閮ㄩ棬鐩爣鑼冨洿涔嬪鐨勯棶棰樺緢鏈夊彲鑳借鍐疯惤锛屽鑷撮」鐩緱涓嶅埌瓒冲鐨勬敮鎸併 + +寰堝鍏徃閫氳繃缁勭粐鏋舵瀯璋冩暣鏉ヨВ鍐充笂杩伴棶棰橈紝渚嬪銆屽ぇ涓彴锛屽皬鍓嶅彴銆嶇殑缁勭粐鏋舵瀯銆丼potify鏉捐﹀悎绱у瘑鑱旂洘鐨勫皬鍒嗛槦squad,鏈川涓婇兘鏄皢澶ц妯$粍缁囩粏鍒嗘垚澶氫釜鍙互绔埌绔礋璐d笟鍔$殑灏忓洟闃熴傛湁璧炲湪鍚勪笟鍔″彂灞曡妭濂忎笉鍚岀殑鎯呭喌涓嬶紝鍦ㄩ渶瑕佸皬姝ュ揩璺戠殑鍓嶅彴涓氬姟涓皾璇曡櫄瀹炵粨鍚堢殑缁勭粐鏋舵瀯锛屽埄鐢ㄤ袱鑰呯殑鐗圭偣瓒嬪埄閬垮锛屾潵鎻愬崌閮ㄩ棬闂寸殑鍗忎綔鏁堢巼銆 + +浜屻佽櫄瀹炵粨鍚堢粍寤洪珮鏁堝洟闃 +2.1 閫傚悎FT鐨勫簲鐢ㄥ満鏅槸浠涔堬紵 +鍦ㄦ帹鍔‵T铏氱嚎缁勭粐涔嬪墠锛岄鍏堣鍒嗘瀽浠涔堟牱鐨勪笟鍔″洟闃熼傚悎FT鐨勫舰寮忋 +鍙互褰掔撼涓哄嚑涓壒鐐癸細 + +绔炰簤婵鐑堬紝闇瑕佸揩閫熷搷搴斿競鍦哄彉鍖 +鏈煡棰嗗煙锛岄渶瑕佸垱鏂版帰绱 +缁勭粐鎵╁睍, 璺ㄨ亴鑳藉崗浣滈摼璺暱锛屾暣浣撳喅绛栨満鍒跺瓨鍦ㄧ摱棰堢殑鍦烘櫙 +2.2 濡備綍鍒掑垎FT锛 +鍦ㄨ冭檻濡備綍鍒掑垎FT涔嬪墠涓嶅Θ鍏堝涔犱竴涓嬩粈涔堟槸FT锛 + +Feature Team 鏄竴涓 闀挎湡瀛樺湪鐨勩佽法鍔熻兘鐨勩佽法缁勪欢鐨勫洟闃燂紝浠栦滑涓涓帴涓涓湴瀹屾垚璁稿绔埌绔殑瀹㈡埛鍔熻兘銆 + +缁勫缓FT鐨勫垵琛锋槸涓轰簡鏈澶у寲鍝嶅簲閫熷害锛 鏈澶х▼搴﹀噺灏戜緷璧栵紝闄嶄綆鍗忎綔鎴愭湰銆傛兂瑕佹彁鍗囦笟鍔$殑鍝嶅簲閫熷害鍜屽崗浣滄晥鐜囷紝闄や簡浜у搧鐮斿彂浠ュ锛屽競鍦恒侀攢鍞佹湇鍔$瓑瑙掕壊鐨勫崗浣滃悓鏍疯嚦鍏抽噸瑕併傛湁璧炵殑瀹炶返杩囩▼涓垜浠粍寤轰簡涓嶅悓灞傜骇鐨凢T锛屼笟鍔$骇FT鍍忔槸涓涓垱涓氬皬鍥㈤槦銆備骇鐮擣T鏇磋仛鐒︿骇鍝佹湰韬紝鎸夌収浜у搧鐨勭敤鎴蜂娇鐢ㄩ摼璺佸姛鑳芥ā鍧楁潵鍨傜洿鍒掑垎锛屽苟鏁堣兘骞冲彴锛堣嚜鐮旈」鐩鐞嗙郴缁燂級涓婂仛FT閰嶇疆锛岀淮鎶や簡涓濂楄櫄绾跨粍缁囨灦鏋勶紝鏄庣‘浜嗗悇涓彲鐙珛浣滄垬鐨勫崟鍏冦 + + + +2.3 濡備綍铏氬疄缁撳悎锛 +2.3.1 瀵归綈涓氬姟鐩爣锛岃亴鑳藉洟闃熶綔涓哄悗鐩炬洿涓撴敞涓撲笟鑳藉姏鎻愬崌 +FT鐨凮KR瑕佸熀浜庢暣浣撲笟鍔KR杩涜鎷嗚В浠ヤ繚鎸佺洰鏍囦竴鑷存с侳T鎵鏈夋垚鍛樹负FT OKR璐熻矗锛岄伩鍏嶅悇鑱岃兘鍥㈤槦鍦ㄦ媶瑙d笟鍔$洰鏍囪繃绋嬩腑鐨勫瓨鍦ㄥ亸宸備骇鐮斻侀攢鍞佹湇鍔$瓑瀹炵嚎鑱岃兘閮ㄩ棬OKR浼氭洿涓撴敞浜庡浣曟彁鍗囧洟闃熶笓涓氶鍩熺殑鑳藉姏锛岄伩鍏嶅洜鏌愪釜涓撲笟棰嗗煙瀵逛笟鍔″彂灞曢犳垚鐡堕銆傚叿浣揙KR瀹炶返鏂瑰紡鍙傝銆婂浣曠敤OKR淇冭繘璺ㄥ洟闃熷崗鍚屻嬭繖绡囨枃绔犮傝繖鏍蜂竴鏉ワ紝鏃㈣В鍐充簡鑱岃兘缁勭粐璺ㄩ儴闂ㄥ崗璋冨搷搴旀參鐨勯棶棰橈紝鍙堣В鍐充簡FT鎴愬憳涓撲笟鎴愰暱涓嶈冻鐨勯棶棰樸 + + +2.3.2 鍥㈤槦鍗忎綔锛氬洟闃熻嚜缁勭粐 +FT缁勫唴鍦ㄨ凯浠h繃绋嬩腑浼氫笉鏂湴澶嶇洏鍜屾荤粨锛岀粡杩囬暱鏃堕棿鐨勭(鍚堬紝浼氶愭笎娌夋穩鍑篎T鍐呴儴鐨勭害瀹氾紝褰㈡垚FT鑷繁鐨勬枃鍖栥備竴浜涙渶浣冲疄璺电殑妗堜緥锛岃繕鍙互閫氳繃PM鎺ㄥ箍鍒板叾浠栧洟闃熶腑锛屼簰鐩稿熼壌鎴愰暱銆傝В鍐充簡鑱岃兘缁勭粐妯″紡涓存椂椤圭洰缁勫綊灞炴劅杈冨急鐨勯棶棰橈紝鍗忎綔娌熼氭垚鏈珮鐨勯棶棰樸 + +2.3.3 寤虹珛鍚凢T瑙勫垝娌熼氭満鍒讹紝鐏垫椿瀹夋帓璧勬簮 +涓轰簡鍑忓皯澶栭儴渚濊禆锛 FT瑕佹眰鎴愬憳淇濇寔鍏ㄨ亴涓撴敞銆備粠鍏ㄥ眬鏉ョ湅锛屽繀鐒堕犳垚浜哄憳鍒╃敤鐜囧彲鑳借揪涓嶅埌婊¤礋鑽枫傝繖鏄敱FT鐨勪环鍊艰鍐冲畾鐨勶細鍝嶅簲閫熷害楂樹簬浜哄憳鍒╃敤鐜囥傚叧娉ㄧ瓑寰呯殑浜嬶紝鑰屼笉鏄瓑寰呯殑浜恒傚湪鏈夎禐鐨勫疄璺典腑锛屾垜浠粛鐒朵繚鐣欎簡鏈堝害瑙勫垝鐨勫姩浣滐紝浣嗚寖鍥寸缉灏忓湪FT鍐呴儴锛屽皢鏈夊閮ㄤ緷璧栫殑椤圭洰鏍囪瘑鍑烘潵锛岀粺涓娌熼氬崗璋冦傚湪淇濋殰FT椤圭洰鍙弧瓒崇殑鎯呭喌涓嬶紝瑙嗕汉鍛樺畨鎺掓儏鍐垫敮鎸佸閮ㄩ」鐩備粠鑰岃В鍐矲T缁勭粐褰㈠紡涓紝浜哄憳鍒╃敤涓嶈冻鐨勯棶棰樸傚叿浣撳疄璺佃瑙併婂ぇ瑙勬ā浜у搧鎶鏈洟闃熼渶姹傜鐞嗗疄璺点嬨 + + +2.3.4 鍏叡璧勬簮濡備綍鍒嗛厤鍒癋T锛熸垚绔嬪喅绛栫粍 +FT浼氫簤澶洪偅浜涙湭琚垝鍒嗙殑鍏叡璧勬簮锛屽璁捐甯堛佷腑鍙版妧鏈傝繖绫婚棶棰樻棤娉曢氳繃FT鑷韩鏉ユ秷闄わ紝闇瑕佹洿楂樺眰闈㈢殑缁勭粐鏉ュ喅绛栵紝閫氬父鐨勫舰寮忔槸鎴愮珛鍐崇瓥缁勶紝鏉ュ崗璋冨悇涓氬姟鐨勮祫婧愬垎閰嶃傚浜庝笟鍔″眰闈㈡潵璁诧紝涔熷彲浠ユ垚绔嬭嚜宸辩殑鍐崇瓥缁勬潵鍗忚皟涓氬姟鍐呴儴鍚凢T鐨勯棶棰橈紝涓鑸敱涓氬姟璐熻矗浜哄拰鍚勮亴鑳絋L缁勬垚銆傞櫎姝ゆ満鍒朵箣澶栵紝杩橀渶瑕佷竴浜涙矡閫氭満鍒跺畾鏈熷榻愬悇涓氬姟鐨勮鍒掞紝鎻愬墠鍋氬ソ璧勬簮鍒嗛厤锛屽噺灏戝悗鏈熶复鏃跺崗璋冪殑鍙兘鎬с + +涓夈佹荤粨 +鏄滃仛浜嬬敤浜衡濊繕鏄滅敤浜哄仛浜嬧?绛旀鏄偗瀹氱殑锛屼竴鍒囬兘鏄叧浜庘滀汉鈥濓紝鍦ㄥ紩鍏ュ彉闈╂椂锛岄渶瑕佽冭檻缁勭粐鐨勬帴鍙楃▼搴︺傛湁璧炵殑瀹炶返缁撳悎浜嗕袱鑰呯殑鐗圭偣锛屽缓绔嬩簡FT铏氭嫙鍥㈤槦鍜岃亴鑳藉洟闃熷疄绾跨鐞嗙殑娣峰悎妯″紡锛岃亴鑳藉洟闃熸牴鎹笟鍔″悎鐞嗗垎閰嶄汉鍔涙姇鍏ワ紝骞舵垚涓轰笓涓氳兘鍔涙彁鍗囩殑缁勭粐锛岃孎T涓轰竴涓笟鍔″鍚戠殑鐙珛浣滄垬鍗曞厓銆傞渶瑕佺粨鍚堣嚜韬笟鍔℃儏鍐靛仛鍑烘渶閫傚悎鐨勭粍缁囦紭鍖栨柟鍚戙 + +### reference +- [铏氬疄缁撳悎鐨 Feature Team 瀹炶返](https://cloud.tencent.com/developer/article/1684562) + + + +鍓嶅彴鏃犲姏鎺ㄥ姩鎶鏈 +涓彴涓嶅缁撴灉璐熻矗 +鍒板悗闈㈠墠鍙拌寰楁病鎶鏈垚闀 +鍒板悗闈腑鍙拌寰楁病鏈夎窡鐫涓氬姟鎴愰暱 +涓彴鎬庝箞鍒嗛厤璧勬簮锛岄兘浼氭湁鍓嶅彴瑙夊緱闃荤鍙戝睍 +娌熼氭垚鏈楂 +鏈川涓奒PI涓嶄竴鑷达紝灏辨棤娉曢珮鏁堝湴鍋氫簨 +鍦ㄨ繖涓簨鍎夸笂锛屾垜鍙湅鍒拌妭绾︽垚鏈潵鐫锛屼笉鑰冭檻鎷涜仒闅惧甫鏉ョ殑鏁堢巼鎹熷け锛屾湰璐ㄤ笂鏄湪闄嶄綆鏁堢巼鐨 +鐒惰屼簨瀹炰笂锛岄樋閲屾兂鎺ㄥ姩鐨勶紝鍙兘鍙槸鑺傜害閮ㄥ垎鍏叡璧勬簮鐨勬垚鏈紝鐪熷仛鍒板ぇ涓彴锛屾槸闈炲父闅剧殑 + +澶т腑鍙帮細瀛愬脊鑳藉揩閫熻緭閫佸埌浣嶅悧 +灏忓墠鍙帮細鐗圭閮ㄩ槦鑳芥湁鏁堜綔鎴樺悧 + + diff --git a/fengbushi.md b/fengbushi.md new file mode 100644 index 0000000..785e5b1 --- /dev/null +++ b/fengbushi.md @@ -0,0 +1,8 @@ + +# 鍒嗗竷寮忔灦鏋 + + +- [reference](https://blog.csdn.net/IT1124/article/details/122384828) + + + diff --git a/gitrecord.md b/gitrecord.md new file mode 100644 index 0000000..fa3f1b7 --- /dev/null +++ b/gitrecord.md @@ -0,0 +1,284 @@ + +## git浣跨敤绗旇 + +#### 寤虹珛娴佺▼ +1. 鍦╣ithub.com閲岋紝new repository鍒涘缓杩滅▼浠撳簱 +2. 鏈湴鏂板缓鏂囦欢澶/宸插瓨鍦ㄩ」鐩枃浠跺す涓 +``` +git init +``` +3. 鍏宠仈杩滅▼浠撳簱 +``` +git remote add origin https://github.com/douboer/gt.git +``` +4. 灏嗘湰鍦颁粨搴撴帹閫佸埌杩滅▼浠撳簱 +``` +git push -u origin master +or: +git push origin master +``` +鎴栬呬粠杩滅▼鎷夎祫婧愬埌鏈湴 +``` +git pull origin master --allow-unrelated-histories +``` + +``` +git init +git add . + +git config --global core.excludesfile .gitignore +git config --global user.email "douboer@gmail.com" +git config --global user.name "douboer" + +git rm -r --cached . +git add . +``` + +#### 淇敼.gitignore鏂囦欢 涓嶇敓鏁 +鍘熷洜鏄.gitignore鍙兘蹇界暐閭d簺鍘熸潵娌℃湁琚玹rack鐨勬枃浠讹紝濡傛灉鏌愪簺鏂囦欢宸茬粡琚撼鍏ヤ簡鐗堟湰绠$悊涓紝鍒欎慨鏀.gitignore鏄棤鏁堢殑銆傞偅涔堣В鍐虫柟娉曞氨鏄厛鎶婃湰鍦扮紦瀛樺垹闄わ紙鏀瑰彉鎴愭湭track鐘舵侊級锛岀劧鍚庡啀鎻愪氦锛 +``` +git rm -r --cached . +git add . +git commit -m 'update .gitignore' +``` + +``` +> ssh-keygen -t rsa -C "douboer@gmail.com" +Generating public/private rsa key pair. +Enter file in which to save the key (C:\Users\admin/.ssh/id_rsa): yes +Enter passphrase (empty for no passphrase): +Enter same passphrase again: +Your identification has been saved in yes. +Your public key has been saved in yes.pub +``` + + +``` +// modify commend +git commit --amend + +//fatal: remote origin already exists. +git remote rm origin + +git remote add origin git@github.com:douboer/gt.git +``` + +``` +鈥r create a new repository on the command line +echo "# test" >> README.md +git init +git add README.md +git commit -m "first commit" +git remote add origin https://github.com/douboer/gt.git +git push -u origin master +``` + +``` +鈥r push an existing repository from the command line +git remote add origin https://github.com/douboer/gt.git +git push -u origin master + +git pull origin master --allow-unrelated-histories +``` + +``` +git remote add origin https://github.com/douboer/gt.git + +origin鐩稿綋浜庤繙绋嬩粨搴撶殑涓涓埆鍚 +鍙互閫氳繃鍒犻櫎 +git remote remove name + +鏌ョ湅璇 origin锛岃鍛戒护灏嗗垪鍑鸿繙绋嬩粨搴撶殑 URL +git remote -v +``` + + +#### 淇敼 .gitignore 鏂囦欢 绔嬪嵆鐢熸晥 +鏈夋椂鍊欓渶瑕佺獊鐒朵慨鏀 .gitignore 鏂囦欢锛岄殢鍚庤绔嬪嵆鐢熸晥 +``` +git rm -r --cached . #娓呴櫎缂撳瓨 +git add . #閲嶆柊trace file +git commit -m "update .gitignore" #鎻愪氦鍜屾敞閲 +git push origin master #鍙夛紝濡傛灉闇瑕佸悓姝ュ埌remote涓婄殑璇 +``` + + +#### 鏌ョ湅杩滅▼鍒嗘敮 +``` +git branch -a +``` +#### 鏌ョ湅鏈湴鍒嗘敮 +``` +git branch +``` +#### 鍒涘缓鍒嗘敮 +``` +git branch test +``` +#### 鎶婃湰鍦板垎鏀帹鍒拌繙绋嬪垎鏀 +``` +git push origin test +``` +#### 鍒囨崲鍒嗘敮鍒皌est +``` +git checkout 鍛戒护鍙互鍒囨崲鍒扮幇鏈夌殑鍒嗘敮銆傚彲浠ヤ娇鐢 git checkout -b 鍛戒护鍒涘缓涓涓柊鐨勫垎鏀苟绔嬪嵆鍒囨崲鍒板畠銆 +``` +#### 鍒犻櫎鍒嗘敮 +``` +git branch -r -d origin/branch-name +``` +#### 灏嗗垹闄ょ殑鍒嗘敮鎺ㄩ佸埌杩滅▼锛屽苟鍦ㄨ繙绋嬪垹闄よ繖涓垎鏀 +``` +git push origin :branch-name +``` + +#### 娣诲姞銆佹彁浜ゅ拰鎺ㄩ佹洿鏀瑰埌浣犵殑杩滅▼浠撳簱 +``` +git remote -v +git remote add origin +git remote set-url origin +``` + + +#### 鍑犱箮姣忎釜寮鍙戜汉鍛橀兘鍦ㄤ娇鐢 Git锛屽綋鐒跺緢鍙兘鏄 GitHub銆備絾澶у鏁板紑鍙戣呭ぇ姒傛湁 99锛 鐨勬椂闂村彧鏄娇鐢ㄨ繖涓変釜鍛戒护锛 +[-](https://linux.cn/article-8841-1.html) +``` +git add --all = git add . + git add -u +git add -A = git add . + git add -u +git add . +git commit -m "" +git push origin master +``` + +:warning: +``` +> git push origin master +::error: src refspec master does not match any. +error: failed to push some refs to 'git@github.com:douboer/wisim.git' +``` +==SOLVE: +``` +git commit -m "wisim" +``` + +:warning: +``` +> git add . +warning: LF will be replaced by CRLF in .gitattributes. +The file will have its original line endings in your working directory +warning: LF will be replaced by CRLF in WiSim.cpp. +``` +==SOLVE: +``` +git config --global core.autocrlf false +``` + +- 鍒涘缓dev鍒嗘敮 +``` +git branch dev +``` +- 鍒囨崲鍒癲ev鍒嗘敮 +``` +git checkout dev +``` +- 鏌ョ湅鏄惁鍒囨崲鍒癲ev +``` +git branch -a +git branch +``` +- 鏈湴push鍒癲ev鍒嗘敮 +``` +git push origin dev +``` +- dev鍒嗘敮寮哄埗瑕嗙洊master鍒嗘敮 +``` +git push origin dev:master -f +``` + +:warning: +``` +> git remote add origin https://github.com/douboer/wisim.git +fatal: remote origin already exists. +``` +==SOLVE: +``` +git remote rm origin +git remote add origin https://github.com/douboer/wisim.git +``` + +:warning: +``` +> git push origin master +To https://github.com/douboer/wisim.git + ! [rejected] master -> master (non-fast-forward) +``` +==SOLVE: +``` +#### 寮哄埗瑕嗙洊锛 +> git push -f +fatal: The current branch master has no upstream branch. +To push the current branch and set the remote as upstream, use + git push --set-upstream origin master +> git push --set-upstream origin master +To https://github.com/douboer/wisim.git + ! [rejected] master -> master (non-fast-forward) +> git push -f --set-upstream origin master +Total 0 (delta 0), reused 0 (delta 0) +``` + +:warning: +``` +> git push origin master +git: 'credential-cache' is not a git command. See 'git --help'. +Everything up-to-date +``` +==SOLVE: +``` +> git config --global credential.helper wincred +``` + +``` +$ git push origin +``` +*涓婇潰鍛戒护琛ㄧず锛屽皢褰撳墠鍒嗘敮鎺ㄩ佸埌origin涓绘満鐨勫搴斿垎鏀 +濡傛灉褰撳墠鍒嗘敮鍙湁涓涓拷韪垎鏀紝閭d箞涓绘満鍚嶉兘鍙互鐪佺暐銆* +``` +$ git push +``` +*濡傛灉褰撳墠鍒嗘敮涓庡涓富鏈哄瓨鍦ㄨ拷韪叧绯伙紝閭d箞杩欎釜鏃跺-u閫夐」浼氭寚瀹氫竴涓粯璁や富鏈猴紝杩欐牱鍚庨潰灏卞彲浠ヤ笉鍔犱换浣曞弬鏁颁娇鐢╣it push銆* +``` +$ git push -u origin master +``` +*涓婇潰鍛戒护灏嗘湰鍦扮殑master鍒嗘敮鎺ㄩ佸埌origin涓绘満锛屽悓鏃舵寚瀹歰rigin涓洪粯璁や富鏈猴紝鍚庨潰灏卞彲浠ヤ笉鍔犱换浣曞弬鏁颁娇鐢╣it push浜嗐 +涓嶅甫浠讳綍鍙傛暟鐨刧it push锛岄粯璁ゅ彧鎺ㄩ佸綋鍓嶅垎鏀紝杩欏彨鍋歴imple鏂瑰紡銆傛澶栵紝杩樻湁涓绉峬atching鏂瑰紡锛屼細鎺ㄩ佹墍鏈夋湁瀵瑰簲鐨勮繙绋嬪垎鏀殑鏈湴鍒嗘敮銆侴it 2.0鐗堟湰涔嬪墠锛岄粯璁ら噰鐢╩atching鏂规硶锛岀幇鍦ㄦ敼涓洪粯璁ら噰鐢╯imple鏂瑰紡銆* + + +#### 鏈湴宸叉湁鏂伴」鐩甮plot涓婁紶涓猤ithub +``` +1. login github, push "new repository" to Create a new repository + input repository name then save setting +2. locate project directory + $ git init + $ git add . + $ git commit -m "gplot" + $ git remote add origin https://github.com/douboer/gplot.git + $ git push -u origin master +3. 鏃ュ父淇敼涓婁紶 + $ git add . + $ git commit -m "gplot" + $ git push +``` + +#### 鍐茬獊瑙e喅 +1. 鏂规涓锛屽己鍒惰鐩栨湰鍦颁唬鐮 +鎶婁綘淇敼鐨勪唬鐮佽繘琛屽浠斤紝鐒跺悗鎵ц鍛戒护锛 +git reset --hard origin/master +git pull +浠庝綘澶囦唤濂界殑鏂囦欢褰撲腑鎶婁綘鍐欑殑浠g爜鎷胯繃鍘伙紝淇敼瀹屾垚鍐嶈繘琛実it push + + +#### 瓒呰繃100M鏂囦欢github涓婁紶澶辫触闂 +git lfs install +git lfs track xxx # xxx鏄ぇ浜100M鐨勬枃浠 + + diff --git a/guanli.md b/guanli.md new file mode 100644 index 0000000..076c1fd --- /dev/null +++ b/guanli.md @@ -0,0 +1,48 @@ + +# 绠$悊宸ヤ綔 + +## 杞矖鍒跺害 + +### 鐩殑 +- 杞矖鐩殑鏈夊埄浜庤繙绋嬫垚闀胯搴 + - 姣斿瀵硅繍缁寸煡璇嗙殑浜嗚В锛屽瀹夊叏杩愮淮鐨勪簡瑙o紝瀵硅嚜鍔ㄥ寲杩愮淮骞冲彴鐨勪簡瑙o紝瀵逛笟鍔$殑浜嗚В + - 澶氬矖閿荤偧锛屽煿鍏讳汉鎵嶏細閫氳繃鍐呴儴鐨勫矖浣嶈疆鎹紝寮鎷撲汉鎵嶅煿鍏绘満鍒讹紝灏藉揩鍩瑰吇鍛樺伐鎴愰暱涓涓撳鑳界殑澶嶅悎鍨嬩汉鎵嶏紱 + - 婵鍔卞憳宸ワ紝鎻愰珮绉瀬鎬э細浣垮憳宸ュ湪杞矖涓紑鎷撹閲庯紝閿婚犲鏂归潰鐨勮兘鍔涗笌缁忛獙锛岄伩鍏嶁滃矖浣嶇柌鍔斥; + +- 瑙勯伩椋庨櫓锛岄槻姝㈣厫璐ワ細閫氳繃瀹氭湡杞矖鍒跺害闃茶寖绠$悊椋庨櫓銆侀亾寰烽闄┿佹硶寰嬮闄╋紝浠ュ強褰㈡垚鑵愯触; +- 褰撲紒涓氬浜庢椇瀛f椂锛屽嚭鐜板憳宸ョ敓鐥呮垨鑰呮槸璇峰亣锛屽叾浠栦汉鍛樿兘寰堝揩椤朵笂锛屼笉鑷充簬褰卞搷浼佷笟姝e父杩愯浆锛屾垨鑰呮槸璇村綋鏈変汉鍛樼鑱屾椂锛屼紒涓氬彲浠ラ┈涓婃湁鍚堥傜殑浜哄憳椤朵笂銆 + +### 璇В +- 浼佷笟鏄笉鏄兂瑕佸共鎺夋垜锛屾墍浠ュ紑濮嬪煿鍏绘帴鏇挎垜鐨勪汉鍛樹簡锛熸墠瀹炶杞矖鍒躲 +- 濡傛灉浼佷笟瀹炶浜嗚疆宀楀埗锛岄偅涔堟垜宀備笉鏄彉鎴愪竴涓彲鏈夊彲鏃狅紝闅忔椂鏈夎鏇挎崲鎺夌殑浜猴紵 +- 骞虫椂鏈変汉缁欐垜鍙戝彂绾㈠寘浠涔堢殑锛屼竴鏃﹀疄琛岃疆宀楀埗锛岄偅涔堝鏂瑰矀涓嶆槸鐭ラ亾浜嗚繖涔堜竴鍥炰簨锛 + +### 娉ㄦ剰鐐 +- 蹇呴』瑕佸叿澶囦竴濂楀畬鏁寸殑绉戝绠$悊鍒跺害锛岀瀛︾殑杞矖绠$悊鍒跺害锛屾槸**杞矖鏈夊簭**锛屽悎鐞嗚繍琛岀殑淇濋殰锛岃繖閲岄潰娑夊強鍒拌缁嗙殑**杞矖璁″垝**锛岃杞矖宸ヤ綔椤哄埄鏈夊簭鐨勫紑灞曘 +- 鍒跺畾璇︾粏鐨勮疆宀楄鍒掞紝瑕佹牴鎹紒涓氱殑杞矖鐩爣锛屽埗瀹氳缁嗙殑杞矖璁″垝锛屽杞矖鐨**浜烘暟銆佹椂闂淬佸矖浣**绛夎鏈夎缁嗙殑璁″垝銆 +鏈夌洰鐨勶紝鏈夎鍒掞紝鍒嗘楠ゅ疄鏂藉悧锛屽仛鍒板矖浣嶅伐浣滀氦鎺ュソ锛屾湁浜虹锛屾湁浜鸿窡韪紝鏈変汉璇勪环銆 +- 鏄庣‘杞矖璧勬牸锛**杞矖宀椾綅銆佽疆宀楀璞**銆傚摢浜涘矖浣嶉渶瑕佽疆宀楋紝濡備綍杞矖锛屼负浠涔堣疆宀楋紝杞矖鍚庡仛浠涔堬紵閮借鏈夋槑纭殑**杞矖宀椾綅鍜岄儴闂**锛岄伩鍏嶆极鏃犵洰鐨勭殑杞矖銆 +- 鏄庣‘杞矖鐨勫幓鍚戯紝杞矖浜烘暟鐨勬瘮渚嬩互鍙婅疆宀楁湡闄愩**閬垮厤澶ч潰绉疆宀**锛岀‘淇濇甯稿伐浣滅殑寮灞曘 +- **瀹屽杽宸ヤ綔浜ゆ帴**锛岃疆宀楀墠瑕佸皢宸ヤ綔涓殑鐗╁搧浜ゆ帴銆佸埗搴︽枃浠朵氦鎺ワ紝宸ヤ綔浠诲姟璇︾粏鍐呭杩涜浜ゆ帴锛屼氦鎺ユ椂锛岃鏈変笂绾у弬涓庤绉讳氦鑰呭叏绋嬩氦鎺ワ紝骞跺湪浜ゆ帴宸ョ▼涓闂伐浣滆繘搴︼紝宸ヤ綔闇瑕佹敞鎰忎簨椤圭瓑锛屼竴涓缃楀垪鍑烘潵锛屼娇鎺ユ墜鑰呮湁鎬濇兂鍑嗗銆 +- 寮哄寲娌熼氥佽鑼冩祦绋嬨傚湪杞矖涓紝浼氬嚭鐜颁竴浜涢棶棰樹笌鍥伴毦锛屼汉鍔涜祫婧愰儴瑕佸叏绋嬭窡韪紝杩涜鍗忚皟涓庢矡閫氾紝鍚屾椂浜哄姏璧勬簮閮ㄤ笌閮ㄩ棬璐熻矗浜鸿涓庤疆宀椾汉鍛樿鏄庤疆宀楃殑鎰忎箟锛岃浠栦滑鐞嗚В杞矖鐨勬剰涔夛紝娑堥櫎鍐呭績鐨勯【铏戙 + +### 绠$悊鍒跺害 +- 杞矖鐢**璋佺粺绛**锛岃疆宀楀埗鎵ц銆佽惤瀹炪佺洃鐫c佽冩牳銆佺敱璋佽礋璐o紝杩欎簺灏辨槸瑕佹槑纭亴璐d笌鏉冮檺锛屽叿浣撹惤瀹炲埌浜 +- 杞矖娑夊強鍒扮殑**瀵硅薄**锛屽摢浜涘矖浣嶉渶瑕佽繘琛岃疆宀楋紝鎶婂矖浣嶅啓鍑烘潵 +- 杞矖娑夊強鍒扮殑**閮ㄩ棬**锛屽摢浜涢儴闂ㄩ渶瑕佽疆宀楋紝鎶婇儴闂ㄥ啓鍑烘潵 +- **杞矖鏈熼檺**锛屽锛氱瀹ゅ唴閮ㄨ疆宀楁湡闄1涓湀锛岄儴闂ㄥ唴閮ㄨ疆宀楁湡闄2涓湀锛岃法閮ㄩ棬杞矖鏈熼檺鍗婁釜鏈 +- 杞矖**璐熻矗浜** + - 缁勫唴杞矖锛岀敱缁勯暱棰嗗璐熻矗 + - 閮ㄩ棬鍐呴儴杞矖锛岀敱閮ㄩ棬璐熻矗浜鸿礋璐 + - 璺ㄩ儴闂ㄨ疆宀楋紝鐢辩粺绛归儴闂ㄧ粺涓瀹夋帓鍜屽疄鏂 +- 杞矖**璁″垝** + - 鍒濇涓骞2娆★紝鍒跺畾鍛樺伐杞矖璁″垝锛氳疆宀**浜哄憳鍚嶅崟锛岃疆宀楀矖浣嶏紝鏃堕棿瀹夋帓** +- 杞矖鍓嶅伐浣滅Щ浜わ紝鍦ㄨ疆宀楀墠涓鍛紝蹇呴』杩涜宸ヤ綔绉讳氦锛屽伐浣滅Щ浜ゅ唴瀹瑰寘鎷細 + - 瀹屾暣鐨勫伐浣滄枃浠剁Щ浜 + - 鐩墠宸ヤ綔杩涘睍绉讳氦锛屽寘鎷伐浣滆繘灞曠▼搴︼紝鐩爣缁撴灉浠ュ強宸ヤ綔瀛樺湪鐨勯殰纰 + - 宸ヤ綔璧勬簮绉讳氦锛屽鎴疯祫鏂欍佹妧鏈祫鏂欍侀噰璐祫鏂欑瓑 + +--- + +### 棰嗗瀹℃牳 + diff --git a/guzhangchuli.md b/guzhangchuli.md new file mode 100644 index 0000000..a2a18a4 --- /dev/null +++ b/guzhangchuli.md @@ -0,0 +1,72 @@ + +## 鏁呴殰澶勭悊 + +鏁呴殰鎶ュ憡锛 +- 鐢ㄦ埛鐢冲憡 +- 鐩戞帶鍛婅 + +鎺ュ埌鏁呴殰鎶ュ憡鏃跺簲璇ュ仛浠涔堬紵 +- 鏀拺浣滀负鍏ュ彛锛岀粺涓缁勭粐鏁呴殰澶勭悊灏忕粍锛屽彲浠ヨ皟鍔ㄨ繍缁淬佺爺鍙戣祫婧愩 +- 蹇熷缓绔嬫晠闅滅姸鎬佹姤鍛娿傚湪绾挎枃妗o紝娉ㄦ剰鏉冮檺鑼冨洿銆傛瘡15鍒嗛挓鏇存柊銆 + - 鏁呴殰鎽樿 + - 鏁呴殰鐘舵 + - 鏁呴殰澶勭悊浜 + - 鐗靛ご浜恒佽繍缁磋礋璐d汉銆佺爺鍙戣礋璐d汉 + - 寰呭姙鍒楄〃 + - 鍒囨崲澶囩敤璧勬簮锛堝凡瀹屾垚锛 + - 鎵цxxx鑴氭湰锛堝凡瀹屾垚锛 + - 鍊熺敤涓浜涚揣鎬ヨ祫婧愭彁楂榵xx瀹归噺锛堣繘琛屼腑锛 +- 鏁呴殰鏃堕棿绾 + +濡傛灉浠庢晠闅滄湇鍔℃潵鐪嬶紝杩愮淮鎭㈠涓氬姟鏈閲嶈鐨勪笁涓柟娉曟槸锛 閲嶅惎锛岄殧绂诲拰闄嶇骇銆 + +浠ヤ粖澶╃殑 RabbitMQ 鏁呴殰涓轰緥锛氬綋宸茬粡鐭ラ亾 RabbitMQ 鍙戦佹秷鎭け璐ョ殑鏃跺欙紝閭d箞灏辫瀵瑰畠杩涜閲嶅惎锛屽鏋滆繕娌$敓鏁堬紝閭d箞鍒欏浠栦笂娓革紙娑堟伅鐢熶骇鑰咃級杩涜閲嶅惎锛岃繕涓嶈灏卞涓嬫父锛屾秷鎭秷璐规柟杩涜閲嶅惎銆 + +杩欓噷闇瑕佹敞鎰忕殑鏄紝鍗冧竾鍗冧竾涓嶈鎯崇潃鍘诲畾浣嶏紝姣斿鍙戠幇閲嶅惎鐨勫璞℃寚鏍囬兘姝e父锛屽垯涓嶈繘琛岄噸鍚紝鏃跺埢璋ㄨ锛屾槸鍦ㄦ仮澶嶄笟鍔★紝涓嶆槸鍦ㄥ畾浣嶆晠闅溿 + +鍩烘湰鍘熷垯锛 鍦ㄦ晠闅滃鐞嗚繃绋嬩腑閲囧彇鐨勬墍鏈夋墜娈靛拰琛屽姩锛屼竴鍒囦互鎭㈠涓氬姟涓烘渶楂樹紭鍏堢骇銆 +1. 鏁呴殰鍙戠幇鍚庯紝On-Call 鐨 SRE 鎴 杩愮淮锛屾晠闅滄寚鎸ュ畼鏈夋潈鍙泦鐩稿簲鐨勪笟鍔″紑鍙戞垨鍏跺畠蹇呰璧勬簮锛屽揩閫熺粍缁囦簨鏁呭鐞嗗皬缁勩 +1. 濡傛灉闂鍜屾仮澶嶈繃绋嬮潪甯告槑纭紝鏁呴殰鎸囨尌瀹 浠嶇劧鏄 SRE 鎴 杩愮淮锛屽氨涓嶅仛杞Щ锛岀敱浠栨潵鎸囨尌姣忎釜浜鸿鍋氱殑鍏蜂綋浜嬫儏锛屼互浼樺厛鎭㈠涓氬姟浼樺厛銆 +1. 濡傛灉闂鐤戦毦锛屽奖鍝嶈寖鍥村緢澶э紝杩欐椂 SRE 鍙互瑕佹眰鏇撮珮绾у埆鐨勪富绠′粙鍏ワ紝姣斿 SRE 涓荤鎴栨荤洃绛夛紝涓鑸殑鍘熷垯鏄皝鐨勪笟鍔″彈褰卞搷鏈澶э紝璋佹潵鐗靛ご缁勭粐銆傝繖鏃 SRE 瑕佸皢 鏁呴殰鎸囨尌瀹 鐨勮亴璐h浆绉荤粰鏇撮珮绾у埆鐨勪富绠★紝濡傛灉鏄叏绔欒寖鍥寸殑褰卞搷锛屽繀瑕佹椂鎶鏈 VP 鎴 CTO 涔熷彲浠ユ壙鎷 鏁呴殰鎸囨尌瀹 鑱岃矗锛屾垨鑰呮巿鏉冪粰鏌愪綅鎬荤洃鎵挎媴銆 +1. 闂瑙e喅鍚庯紝闇瑕佽繘琛屽姛鑳介獙璇併 + +```sequence +OnCall杩愮淮->鏁呴殰:鍙戠幇鏁呴殰 +OnCall杩愮淮->OnCall杩愮淮: 鍒濇鍒嗘瀽鏁呴殰鍘熷洜 +OnCall杩愮淮->浜嬫晠澶勭悊灏忕粍: 鍙泦涓氬姟寮鍙戞垨鍏跺畠蹇呰璧勬簮 +浜嬫晠澶勭悊灏忕粍->浜嬫晠澶勭悊灏忕粍: 浜嬫晠鍙嶉(10-15鍒嗛挓涓娆) +浜嬫晠澶勭悊灏忕粍->浜嬫晠澶勭悊: 浜嬫晠鎺掓煡 +OnCall杩愮淮-->楂樼: 闂鐤戦毦锛屽奖鍝嶈寖鍥村緢澶э紝浜嬫晠鍗囩骇 +楂樼-->浜嬫晠澶勭悊灏忕粍: 鍏ㄦ潈绠$悊锛岃繘琛屼笅涓姝ュ崗鍟嗗鐞 +浜嬫晠澶勭悊->浜嬫晠澶勭悊: 鏈杩戝彂甯冩儏鍐 +浜嬫晠澶勭悊->浜嬫晠澶勭悊: 鏈嶅姟鍜屽熀纭璁炬柦鎯呭喌 +浜嬫晠澶勭悊->浜嬫晠澶勭悊: 瑙e喅鏁呴殰 +浜嬫晠澶勭悊->浜嬫晠澶勭悊灏忕粍: 鎺掓煡璁板綍 +鏁呴殰->浜嬫晠鎭㈠: 杩涜鎭㈠楠岃瘉 +浜嬫晠鎭㈠->浜嬫晠澶勭悊灏忕粍: 鎭㈠缁撴灉閫氱煡 +OnCall杩愮淮->浜嬪悗鎬荤粨: 缁勭粐鏁呴殰澶嶇洏浼氳 +Note right of 浜嬪悗鎬荤粨: 鎬荤粨鍘熷洜锛岃В鍐抽棶棰 +浜嬪悗鎬荤粨->浜嬫晠澶勭悊灏忕粍: 杈撳嚭浼氳鎬荤粨,鏁呴殰鎶ュ憡 +``` + +**浜嬫晠鍙嶉** +涓鑸姹備互鍥㈤槦涓哄崟浣嶏紝姣忛殧 10锝15 鍒嗛挓鍋氫竴娆″弽棣堬紝鍙嶉褰撳墠澶勭悊杩涘睍浠ュ強涓嬩竴姝ction锛屽鏋滀腑閫旀湁闇瑕侀┈涓婃墽琛屼粈涔堟搷浣滐紝涔熻浜嬪厛閫氭姤锛屽苟涓旇姹傞氭姤鐨勫唴瀹瑰寘鎷涓氬姟鍜岀郴缁熺殑褰卞搷鏄粈涔堬紝鏈鍚庣敱 鏁呴殰鎸囨尌瀹 鍐崇瓥鍚庡啀鎵ц锛岄伩鍏嶅繖涓嚭閿欍傛病鏈夎繘灞曚篃鏄繘灞曪紝涔熻鍙婃椂鍙嶉銆 + + +浜嬪悗Action +浜嬪悗action鍙互鍜岀湅鏉跨郴缁熺粨鍚堬紝鏂逛究璺熻釜銆俛ction蹇呴』鏄彲鎵ц鐨勶紝鍑嗙‘鐨勩 + +Action|鎵ц浜簗楠岃瘉浜簗璁″垝瀹屾垚鏃堕棿|瀹屾垚鏃堕棿 +--| --| --| --| -- +|||| + + + +### reference +- [杩愮淮鐨勭嚎涓婄郴缁熸晠闅滄荤粨](https://segmentfault.com/a/1190000041205903) +- [涓浠藉崄鍒嗗畬鏁寸殑鏁呴殰婕旂粌鎸囧崡](http://www.yunweipai.com/28352.html) +- [鍙蹭笂鏈闀挎渶鍏紒鍥寸粫鏁呴殰绠$悊璋圫RE浣撶郴寤鸿](https://blog.51cto.com/u_5646435/3153364) +- [涓鏂囧悆閫廠RE鏁呴殰棰勬6鎶婂垁](https://zhuanlan.zhihu.com/p/362842387) +- [鍥㈤槦绾夸笂鏁呴殰澶勭悊妯℃澘锛圫RE蹇呮敹钘忥級](https://blog.csdn.net/apl359/article/details/120775746) + + diff --git a/ha/寰湇鍔℃灦鏋勪笅鐨勯珮鍙敤鏂规.pdf b/ha/寰湇鍔℃灦鏋勪笅鐨勯珮鍙敤鏂规.pdf new file mode 100644 index 0000000..0c43fb7 Binary files /dev/null and b/ha/寰湇鍔℃灦鏋勪笅鐨勯珮鍙敤鏂规.pdf differ diff --git a/hanote.md b/hanote.md new file mode 100644 index 0000000..e18dd47 --- /dev/null +++ b/hanote.md @@ -0,0 +1,195 @@ + +## LB & HA & 瀹圭伨 + +hard LB A10锛孎5锛屾嵁璇碅10鐨勮储鍔$姸鍐靛苟涓嶅ソ鍟婏紝鍙浠ュ悗鏄疭LB澶╀笅浜 + +SLB杞欢绾ц礋杞藉潎琛″櫒(LVS/HAProxy/Nginx) +SLB DNS銆丯GX銆丩VS銆丠Aproxy缁撳悎keepalived鎼缓 + - keepalive浣滅敤鏄粰haproxy鍙敤鎬ф鏌ワ紝涓鍙癶aproxy鎸備簡锛屾娴嬪垏鍒板彟涓鍙 + - haproxy浣滅敤鏄仛璐熻浇鍧囪  + +NGX鍒╃敤鍙嶅悜浠g悊upstream鏉ュ疄鐜拌礋杞藉潎琛 +鎹Tengine鍦∟GX鍩虹杩涜浜嗘敼杩涳紝浣嗙敤鎴锋帴鍙楀害骞朵笉楂橈紝涓嶅埄浜庝骇鍝佽壇鎬ц凯浠o紝HA鏇撮噸瑕 +keepalived缁橦A鎻愪緵淇濊瘉锛屽熀浜庢垜浠啛鎮夌殑VRRP鍗忚锛屽仛瀹圭伨鏄緢濂界殑 + +鍥涘眰璐熻浇鍧囪 鏈塋VS锛屼竷灞傝礋杞藉潎琛℃湁Haproxy銆丯ginx锛岀洰鍓嶇敤鐨勬渶澶氱殑灏辨槸杩欎笁绉嶄簡 + +闃块噷浜戠敤LVS+Tengine SLB锛孍CS鐩存帴鎸侺VS锛屽洓灞傜洃鍚殑娴侀噺鐩存帴鐢盠VS杞彂鍒癊CS锛7灞傜洃鍚殑娴侀噺浼氱粡杩嘗VS鍒癟enigine鍐嶅埌鐢ㄦ埛ECS + +**Nginx/LVS/HAProxy璐熻浇鍧囪 鐩稿叧鐭ヨ瘑鍙弬鑰冭繖绡 锛 [Nginx/LVS/HAProxy璐熻浇鍧囪 杞欢鐨勪紭缂虹偣璇﹁В](http://www.ha97.com/5646.html)** + +闂 + - DNS涓嶈冻锛 + - upstream 鍙嶅悜浠g悊鍏崇郴锛 + - LVS鏄粈涔堬紝鎬庝箞瀹炵幇锛 + - 澶╃考浜戞病鏈堿10锛烲B鎬庝箞鍋 + - 璺ㄥ煙鏈烘埧鍙屾椿鎬庝箞鍋氾紵 + - 鎬ц兘闂锛 QPS + - docker鍖栦笅涓庤櫄鎷熸満涓婰B鎬濊矾涓嶅悓锛 + +--- + +闃块噷鏈嶅姟 +``` + redis/oss/ + monitor/log dataV + | | +APP - CDN - WAF -|- SLB - ECS闆嗙兢 -|- RDS闆嗙兢 + | | +``` + +SLB +``` ++---------------------------------------------------------------+ +| +--------------+ | +| ----------| CLOUD |---------- | +| | +--------------+ | | +| +---------+---------+ +--------------------+ | +| | | | |lvs cluster | | +| | LVS cluster | | | | | +| | |tengine cluster | tengine cluster | +| +---------+---------+ +----------+---------+ | +| | +| SLB cluster | ++---------------------------------------------------------------+ +``` + +CDN +
  • 鍐呭鍒嗗彂銆佸鍒躲乧ache +
  • 鏅鸿兘DNS锛屼紭鍖栧埌杈剧紦瀛/澶嶅埗鐐 +
  • 缂虹偣锛氬唴瀹瑰彲鑳戒笉鍚屾锛屽彲闂叉椂鍚屾 + +WAF浠锋牸楂樺嚭SLB濂藉 + +--- +### 瀹瑰櫒浜慙B鎶鏈 + +鍑犱釜鍩烘湰姒傚康锛 +#### 1. RSS/RPS/RFS/XPS鐨勫熀鏈璇 +- 瀵筃IC鍑哄叆鏁版嵁鐨勪紭鍖 +- RSS(receive side scaling)锛屾暟鎹槦鍒楀潎琛″埌涓嶅悓鏍革紝纭欢瀹炵幇 +- RPS(Receive Packet Steering)锛屾暟鎹槦鍒楀潎琛″埌涓嶅悓鏍革紝杞欢瀹炵幇 + RSS鍜孯PS閮芥槸缃戝崱涓轰簡鍦ㄦ帴鍙楁暟鎹寘鐨勬椂鍊欎娇鐢ㄥ鏍告灦鏋勮岃繘琛岀殑鎬ц兘澧炲己锛孯SS鏄湪纭欢灞傞潰鑰孯PS鍦ㄨ蒋浠跺眰闈 +- RFS(Receive Flow Steering) 淇濊瘉鎺ュ彈涓柇CPU鍐呮牳姝eソ鏄敤鎴峰鐞嗙殑CPU锛岄伩鍏嶈浆鎹㈠紑閿 + XPS(Transmit Packet Steering) 淇濊瘉鍙戦佽蒋涓柇CPU鍐呮牳姝eソ鏄敤鎴峰鐞嗙殑CPU锛岄伩鍏嶈浆鎹㈠紑閿 + +涓鍙ヨ瘽锛岃繖4涓笢瑗匡細 + - 淇濊瘉鍏ュ嚭鏁版嵁鍦ㄤ笉鍚屾牳涔嬮棿鐨勫潎琛★紝 + - 淇濊瘉鍏ュ嚭鏁版嵁涓柇鍜屽鐞嗗湪鍚屼竴涓牳蹇冧笂 + +#### 2. PREROUTING/POSTROUTING/SNAT/DNAT + - 婧愬湴鍧鍙戦佹暟鎹--> {PREROUTING-->璺敱瑙勫垯--> POSTROUTING}-->鐩殑鍦板潃鎺ユ敹鍒版暟鎹 + PREROUTING鏄滆矾鐢辫鍒欌濅箣鍓嶇殑鍔ㄤ綔锛孭OSTROUTING鏄滆矾鐢辫鍒欌濅箣鍚庣殑鍔ㄤ綔 + - DNAT鍦≒REROUTING锛孲NAT鍦≒OSTROUTING + - SNAT,鏁版嵁鍖呬粠缃戝崱鍙戦佸嚭鍘荤殑鏃跺欙紝鎶婃暟鎹寘涓殑婧愬湴鍧鏇挎崲锛岃繖鏍凤紝鎺ユ敹鏂硅涓烘潵婧愯鏇挎崲IP + DNAT,鏁版嵁鍖呬粠缃戝崱鍙戦佸嚭鍘荤殑鏃跺欙紝淇敼鐩殑IP锛屼綘鎯宠闂瓵锛孌NAT鍚庢妸璁块棶A鐨勬暟鎹寘淇敼涓鸿闂瓸 + +#### 3. LVS妯″紡 + - DR + 鏀瑰啓鐩殑MAC涓篟S MAC锛孡VS瀵圭敤鎴烽忔槑锛屼笉璇P锛岃繑鍥炵洿鎺ヨ闂瓹Lient + LVS&RS闇鍦ㄥ悓涓涓簩灞 + - NAT + 鏉ュ洖閮借蛋LVS锛孡VS鏄摱棰 + LVS&RS闇鍦ㄥ悓涓涓簩灞 + - TUNNEL + 鍙兘Linux鍐呮牳鏀寔 + - Full-NAT + Packet IN dest ip:LVS VIP->RS ip锛宻rc ip:CLent IP->LVS鍐呯綉IP + Packet OUT dest ip:LVS 鍐呯綉IP->Clent IP, src ip: RS IP->LVS VIP + +``` + FULLNAT MODE + +---------------- --+ PC/CLENT+- ---------------------+ + REQUST | | | + | +------------+ | + SRCIP:CLIENTIP RESPONSE + DESTIP:L^S VIP | + | SRC:LVS VIP + | DEST:CLIENT IP + | | ++--------v------+ +--------------+ +------v--------+ +| DNAT+SNAT | | LVS | ++ | +| +-------------+ +-------------+SNAT+DNAT | ++-------+-------+ +--------------+ +------+--------+ + | | +SRC:LVS INTERNAL IP SRC:RS IP +DEST:RS IP +---------------+ DEST: LVS INTERNAL IP + | | | | + +------------------->+ RS +<-------------------+ + +---------------+ +``` + +--- +### Nginx vs. LVS vs. haproxy vs. DNS + - Ngx鍋歀B锛熶紭缂虹偣锛 + - LVS 妯″紡锛熶紭缂虹偣锛 + - haproxy鎬庝箞鍋氾紵浼樼己鐐 + - DNS浣滀负LVS涓绉嶆ā寮 + +#### NGX + - 涓冨眰 + - 姝e垯 + - 閰嶇疆 + - 鏃ュ織 + - 鍋歸ebserver + - 鍋氬弽鍚戝姞閫熺紦瀛 + - http/https/mail + - 绀惧尯 + + - session淇濇寔 :question: + - 鍋ュ悍妫鏌ワ紵url妫娴 :question: + + + +#### LVS + - 鍥涘眰 + - 娴侀噺绫诲瀷鏀寔搴 + - 閰嶇疆鎬 + - 鍙彂璇锋眰 + - :x:姝e垯 + + NAT妯″紡DS锛圖irector server锛変細鎴愪负鐡堕锛孌R妯″紡鍥炵洿鎺ュ埌Client锛孌S涓嶄細鎴愪负鐡堕锛岀浉瀵规瘮杈冨父鐢 + + - LVS缂虹偣 + - Keepalived涓诲妯″紡璁惧鍒╃敤鐜囦綆锛涗笉鑳芥í鍚戞墿灞曪紱VRRP鍗忚锛屾湁鑴戣鐨勯闄┿ + - ECMP鐨勬柟寮忛渶瑕佷簡瑙e姩鎬佽矾鐢卞崗璁紝LVS鍜屼氦鎹㈡満鍧囬渶瑕佽緝澶嶆潅閰嶇疆锛涗氦鎹㈡満鐨凥ASH绠楁硶涓鑸瘮杈冪畝鍗曪紝澧炲姞鍒犻櫎鑺傜偣浼氶犳垚HASH閲嶅垎甯冿紝鍙兘瀵艰嚧褰撳墠TCP杩炴帴鍏ㄩ儴涓柇锛涢儴鍒嗕氦鎹㈡満鐨凟CMP鍦ㄥ鐞嗗垎鐗囧寘鏃朵細鏈塀UG銆 + +#### haproxy + - session淇濇寔 + + - 澶勭悊鏁堢巼 + - 骞跺彂 + +haproxy绛栫暐 +
    :one: roundrobin +
    :two: static-rr 鏉冮噸 :star: +
    :three: leastconn 鏈灏戣繛鎺ヨ呭厛澶勭悊 :star: +
    :four: source 琛ㄧず鏍规嵁璇锋眰婧怚P锛岃繖涓窡Nginx鐨処P_hash鏈哄埗绫讳技锛屾垜浠敤鍏朵綔涓鸿В鍐硈ession闂鐨勪竴绉嶆柟娉 :star: +
    :five: ri 琛ㄧず鏍规嵁璇锋眰鐨刄RI +
    :six: rl_param 琛ㄧず鏍规嵁璇锋眰鐨刄Rl鍙傛暟'balance url_param' requires an URL parameter name +
    :seven: hdr(name) 琛ㄧず鏍规嵁HTTP璇锋眰澶存潵閿佸畾姣忎竴娆TTP璇锋眰 +
    :eight: rdp-cookie(name) 琛ㄧず鏍规嵁鎹甤ookie(name)鏉ラ攣瀹氬苟鍝堝笇姣忎竴娆CP璇锋眰 + + +#### 鍏充簬LVS鏇夸唬DNS杞:question: +- lvs/haproxy+ngx+keepalived鍩烘湰婊¤冻澶ч儴鍒咹A闇姹傦紝澶ч儴鍒嗘儏鍐典笅鏋勬灦宸茬粡鍙互婊¤冻鏇夸唬DNS杞 +- 瀵规瀬楂樺苟鍙戝満鏅紝鍦ㄦ帴鍏ュ眰鍙互鍙犲姞DNS杞 +[鍙弬瑙乚(imgs/t13.jpg) + +#### 鍏充簬Zookeeper鍙互鏇夸唬LVS,NGX:question: + +[鍙傝5](#references) + + + +### references +1. [楂樻ц兘璐熻浇鍧囪 璁捐涓庡疄鐜癩(https://zhuanlan.zhihu.com/p/29949340) +1. [瀹瑰櫒浜戣礋杞藉潎琛′箣涓夛細RSS銆丷PS銆丷FS鍜孹PS璋冩暣](https://blog.csdn.net/cloudvtech/article/details/80182074) +1. [浠庝竴涓紑鍙戠殑瑙掑害鐪嬭礋杞藉潎琛″拰LVS](https://blog.csdn.net/daiyudong2020/article/details/51611118) +1. [HA鎺ュ叆灞傛瀯鏋禲(https://cyningsun.github.io/02-03-2019/access-layer-architecture.html) +1. [keepalived鍜寊ookeeper瀵规瘮](https://www.cnblogs.com/arjenlee/p/9254219.html) +1. [杩愮淮鍙敤鎬ц兘鍔涘缓璁綸(https://cloud.tencent.com/developer/article/1595028) +1. [haproxy+keepalived楂樺彲鐢ㄨ礋杞藉潎琛℃瀯寤篯(https://blog.csdn.net/qq_41772936/article/details/80718014) +1. [LVS鐨勫師鐞-宸ヤ綔妯″紡](https://yizhi.ren/2019/05/03/lvs/) + + diff --git a/imgs/3866340280098071714.jpg b/imgs/3866340280098071714.jpg new file mode 100644 index 0000000..8eb41c0 Binary files /dev/null and b/imgs/3866340280098071714.jpg differ diff --git a/imgs/5S-Toyota-Forklifts.jpg b/imgs/5S-Toyota-Forklifts.jpg new file mode 100644 index 0000000..417e8d8 Binary files /dev/null and b/imgs/5S-Toyota-Forklifts.jpg differ diff --git a/imgs/5S-wheel-diagram.jpg b/imgs/5S-wheel-diagram.jpg new file mode 100644 index 0000000..80d9728 Binary files /dev/null and b/imgs/5S-wheel-diagram.jpg differ diff --git a/imgs/5g/5g1.jpg b/imgs/5g/5g1.jpg new file mode 100644 index 0000000..b91bec2 Binary files /dev/null and b/imgs/5g/5g1.jpg differ diff --git a/imgs/5g/5g2.jpg b/imgs/5g/5g2.jpg new file mode 100644 index 0000000..3e61b93 Binary files /dev/null and b/imgs/5g/5g2.jpg differ diff --git a/imgs/TPS1.jpg b/imgs/TPS1.jpg new file mode 100644 index 0000000..bce1748 Binary files /dev/null and b/imgs/TPS1.jpg differ diff --git a/imgs/db/1508220824685.png b/imgs/db/1508220824685.png new file mode 100644 index 0000000..0db69c4 Binary files /dev/null and b/imgs/db/1508220824685.png differ diff --git a/imgs/db/1508224104762.png b/imgs/db/1508224104762.png new file mode 100644 index 0000000..11042a2 Binary files /dev/null and b/imgs/db/1508224104762.png differ diff --git a/imgs/db/1508224116977.png b/imgs/db/1508224116977.png new file mode 100644 index 0000000..2fc721a Binary files /dev/null and b/imgs/db/1508224116977.png differ diff --git a/imgs/db/1508224133068.png b/imgs/db/1508224133068.png new file mode 100644 index 0000000..7550ac5 Binary files /dev/null and b/imgs/db/1508224133068.png differ diff --git a/imgs/db/1508224143652.png b/imgs/db/1508224143652.png new file mode 100644 index 0000000..8e3568e Binary files /dev/null and b/imgs/db/1508224143652.png differ diff --git a/imgs/db/1508224155090.png b/imgs/db/1508224155090.png new file mode 100644 index 0000000..86a5efd Binary files /dev/null and b/imgs/db/1508224155090.png differ diff --git a/imgs/db/1508224163862.png b/imgs/db/1508224163862.png new file mode 100644 index 0000000..27f39fd Binary files /dev/null and b/imgs/db/1508224163862.png differ diff --git a/imgs/db/1508224175479.png b/imgs/db/1508224175479.png new file mode 100644 index 0000000..05579ce Binary files /dev/null and b/imgs/db/1508224175479.png differ diff --git a/imgs/db/1508224183405.png b/imgs/db/1508224183405.png new file mode 100644 index 0000000..811a443 Binary files /dev/null and b/imgs/db/1508224183405.png differ diff --git a/imgs/db/1508224195432.png b/imgs/db/1508224195432.png new file mode 100644 index 0000000..8f19752 Binary files /dev/null and b/imgs/db/1508224195432.png differ diff --git a/imgs/db/1508232831054.png b/imgs/db/1508232831054.png new file mode 100644 index 0000000..af9fe80 Binary files /dev/null and b/imgs/db/1508232831054.png differ diff --git a/imgs/db/1508233065722.png b/imgs/db/1508233065722.png new file mode 100644 index 0000000..09dc651 Binary files /dev/null and b/imgs/db/1508233065722.png differ diff --git a/imgs/db/1508233301178.png b/imgs/db/1508233301178.png new file mode 100644 index 0000000..772ddb1 Binary files /dev/null and b/imgs/db/1508233301178.png differ diff --git a/imgs/db/1508234022148.png b/imgs/db/1508234022148.png new file mode 100644 index 0000000..d260b76 Binary files /dev/null and b/imgs/db/1508234022148.png differ diff --git a/imgs/db/1508234196383.png b/imgs/db/1508234196383.png new file mode 100644 index 0000000..1bcb3c2 Binary files /dev/null and b/imgs/db/1508234196383.png differ diff --git a/imgs/db/1508234209931.png b/imgs/db/1508234209931.png new file mode 100644 index 0000000..3b9ff96 Binary files /dev/null and b/imgs/db/1508234209931.png differ diff --git a/imgs/db/1508234224944.png b/imgs/db/1508234224944.png new file mode 100644 index 0000000..74b334e Binary files /dev/null and b/imgs/db/1508234224944.png differ diff --git a/imgs/db/1508234232978.png b/imgs/db/1508234232978.png new file mode 100644 index 0000000..04e69bd Binary files /dev/null and b/imgs/db/1508234232978.png differ diff --git a/imgs/db/1508234240747.png b/imgs/db/1508234240747.png new file mode 100644 index 0000000..fd515d8 Binary files /dev/null and b/imgs/db/1508234240747.png differ diff --git a/imgs/db/1508234256389.png b/imgs/db/1508234256389.png new file mode 100644 index 0000000..42a0d7f Binary files /dev/null and b/imgs/db/1508234256389.png differ diff --git a/imgs/db/1508234267301.png b/imgs/db/1508234267301.png new file mode 100644 index 0000000..105cd7b Binary files /dev/null and b/imgs/db/1508234267301.png differ diff --git a/imgs/db/1508234279553.png b/imgs/db/1508234279553.png new file mode 100644 index 0000000..2845d24 Binary files /dev/null and b/imgs/db/1508234279553.png differ diff --git a/imgs/db/1508234313005.png b/imgs/db/1508234313005.png new file mode 100644 index 0000000..a7bcef0 Binary files /dev/null and b/imgs/db/1508234313005.png differ diff --git a/imgs/db/1508234321343.png b/imgs/db/1508234321343.png new file mode 100644 index 0000000..883fde6 Binary files /dev/null and b/imgs/db/1508234321343.png differ diff --git a/imgs/db/1508234483676.png b/imgs/db/1508234483676.png new file mode 100644 index 0000000..82170ca Binary files /dev/null and b/imgs/db/1508234483676.png differ diff --git a/imgs/db/1508234508872.png b/imgs/db/1508234508872.png new file mode 100644 index 0000000..228773d Binary files /dev/null and b/imgs/db/1508234508872.png differ diff --git a/imgs/db/1508234525067.png b/imgs/db/1508234525067.png new file mode 100644 index 0000000..9fed255 Binary files /dev/null and b/imgs/db/1508234525067.png differ diff --git a/imgs/db/1508234545534.png b/imgs/db/1508234545534.png new file mode 100644 index 0000000..86a2790 Binary files /dev/null and b/imgs/db/1508234545534.png differ diff --git a/imgs/db/1508234554521.png b/imgs/db/1508234554521.png new file mode 100644 index 0000000..5bf3eda Binary files /dev/null and b/imgs/db/1508234554521.png differ diff --git a/imgs/db/dbtrend.png b/imgs/db/dbtrend.png new file mode 100755 index 0000000..f86d0eb Binary files /dev/null and b/imgs/db/dbtrend.png differ diff --git a/imgs/db/dbtrend24m.png b/imgs/db/dbtrend24m.png new file mode 100755 index 0000000..fff82af Binary files /dev/null and b/imgs/db/dbtrend24m.png differ diff --git a/imgs/db/myCatHa.png b/imgs/db/myCatHa.png new file mode 100644 index 0000000..4a98ebc Binary files /dev/null and b/imgs/db/myCatHa.png differ diff --git a/imgs/db/myCatHa1.png b/imgs/db/myCatHa1.png new file mode 100644 index 0000000..5f7496b Binary files /dev/null and b/imgs/db/myCatHa1.png differ diff --git a/imgs/db/mycat.jpg b/imgs/db/mycat.jpg new file mode 100644 index 0000000..3542ed5 Binary files /dev/null and b/imgs/db/mycat.jpg differ diff --git a/imgs/db/mycat_arch.jpg b/imgs/db/mycat_arch.jpg new file mode 100644 index 0000000..86533fa Binary files /dev/null and b/imgs/db/mycat_arch.jpg differ diff --git a/imgs/db/mycat_slice.jpg b/imgs/db/mycat_slice.jpg new file mode 100644 index 0000000..06a3826 Binary files /dev/null and b/imgs/db/mycat_slice.jpg differ diff --git a/imgs/devops.png b/imgs/devops.png new file mode 100644 index 0000000..1fb5d5b Binary files /dev/null and b/imgs/devops.png differ diff --git a/imgs/jingyi.jpg b/imgs/jingyi.jpg new file mode 100644 index 0000000..8990f8f Binary files /dev/null and b/imgs/jingyi.jpg differ diff --git a/imgs/kafka.jpg b/imgs/kafka.jpg new file mode 100755 index 0000000..2c1f87f Binary files /dev/null and b/imgs/kafka.jpg differ diff --git a/imgs/kafka2.png b/imgs/kafka2.png new file mode 100755 index 0000000..3f6604b Binary files /dev/null and b/imgs/kafka2.png differ diff --git a/imgs/key_target.png b/imgs/key_target.png new file mode 100644 index 0000000..de4766c Binary files /dev/null and b/imgs/key_target.png differ diff --git a/imgs/logsys.jpg b/imgs/logsys.jpg new file mode 100755 index 0000000..e1bc6ab Binary files /dev/null and b/imgs/logsys.jpg differ diff --git a/imgs/lvs+keepalived.jpg b/imgs/lvs+keepalived.jpg new file mode 100644 index 0000000..a0a6f37 Binary files /dev/null and b/imgs/lvs+keepalived.jpg differ diff --git a/imgs/nginx/Pasted image 20240416145752.png b/imgs/nginx/Pasted image 20240416145752.png new file mode 100644 index 0000000..3b0880a Binary files /dev/null and b/imgs/nginx/Pasted image 20240416145752.png differ diff --git a/imgs/nginx/Pasted image 20240416145846.png b/imgs/nginx/Pasted image 20240416145846.png new file mode 100644 index 0000000..ba09498 Binary files /dev/null and b/imgs/nginx/Pasted image 20240416145846.png differ diff --git a/imgs/nginx/Pasted image 20240416150004.png b/imgs/nginx/Pasted image 20240416150004.png new file mode 100644 index 0000000..e492cad Binary files /dev/null and b/imgs/nginx/Pasted image 20240416150004.png differ diff --git a/imgs/nginx/Pasted image 20240416150213.png b/imgs/nginx/Pasted image 20240416150213.png new file mode 100644 index 0000000..4a36b9d Binary files /dev/null and b/imgs/nginx/Pasted image 20240416150213.png differ diff --git a/imgs/opsknow.png b/imgs/opsknow.png new file mode 100644 index 0000000..ef5f9a3 Binary files /dev/null and b/imgs/opsknow.png differ diff --git a/imgs/rocketmq.jpeg b/imgs/rocketmq.jpeg new file mode 100755 index 0000000..c0ce52c Binary files /dev/null and b/imgs/rocketmq.jpeg differ diff --git a/imgs/rocketmq.png b/imgs/rocketmq.png new file mode 100755 index 0000000..eb05d7a Binary files /dev/null and b/imgs/rocketmq.png differ diff --git a/imgs/t1.jpg b/imgs/t1.jpg new file mode 100644 index 0000000..80b0751 Binary files /dev/null and b/imgs/t1.jpg differ diff --git a/imgs/t10.jpg b/imgs/t10.jpg new file mode 100644 index 0000000..7c1550a Binary files /dev/null and b/imgs/t10.jpg differ diff --git a/imgs/t11.jpg b/imgs/t11.jpg new file mode 100644 index 0000000..6f305d1 Binary files /dev/null and b/imgs/t11.jpg differ diff --git a/imgs/t12.jpg b/imgs/t12.jpg new file mode 100644 index 0000000..696d44d Binary files /dev/null and b/imgs/t12.jpg differ diff --git a/imgs/t13.jpg b/imgs/t13.jpg new file mode 100644 index 0000000..16ec042 Binary files /dev/null and b/imgs/t13.jpg differ diff --git a/imgs/t14.jpg b/imgs/t14.jpg new file mode 100644 index 0000000..1f27db8 Binary files /dev/null and b/imgs/t14.jpg differ diff --git a/imgs/t15.jpg b/imgs/t15.jpg new file mode 100644 index 0000000..db3716b Binary files /dev/null and b/imgs/t15.jpg differ diff --git a/imgs/t2.jpg b/imgs/t2.jpg new file mode 100644 index 0000000..97ad860 Binary files /dev/null and b/imgs/t2.jpg differ diff --git a/imgs/t3.jpg b/imgs/t3.jpg new file mode 100644 index 0000000..dc1d7f1 Binary files /dev/null and b/imgs/t3.jpg differ diff --git a/imgs/t4.jpg b/imgs/t4.jpg new file mode 100644 index 0000000..76791f9 Binary files /dev/null and b/imgs/t4.jpg differ diff --git a/imgs/t5.jpg b/imgs/t5.jpg new file mode 100644 index 0000000..b0e23ff Binary files /dev/null and b/imgs/t5.jpg differ diff --git a/imgs/t6.jpg b/imgs/t6.jpg new file mode 100644 index 0000000..a363823 Binary files /dev/null and b/imgs/t6.jpg differ diff --git a/imgs/t7.jpg b/imgs/t7.jpg new file mode 100644 index 0000000..971c999 Binary files /dev/null and b/imgs/t7.jpg differ diff --git a/imgs/t8.jpg b/imgs/t8.jpg new file mode 100644 index 0000000..d1f5a00 Binary files /dev/null and b/imgs/t8.jpg differ diff --git a/imgs/t9.jpg b/imgs/t9.jpg new file mode 100644 index 0000000..6e8d3f1 Binary files /dev/null and b/imgs/t9.jpg differ diff --git a/imgs/timg (1).jpg b/imgs/timg (1).jpg new file mode 100644 index 0000000..eb64b16 Binary files /dev/null and b/imgs/timg (1).jpg differ diff --git a/imgs/timg.jpg b/imgs/timg.jpg new file mode 100644 index 0000000..efeec31 Binary files /dev/null and b/imgs/timg.jpg differ diff --git a/imgs/tps-diagram.jpg b/imgs/tps-diagram.jpg new file mode 100644 index 0000000..f897c29 Binary files /dev/null and b/imgs/tps-diagram.jpg differ diff --git a/imgs/tps-house.png b/imgs/tps-house.png new file mode 100644 index 0000000..5559d11 Binary files /dev/null and b/imgs/tps-house.png differ diff --git a/imgs/v2-82bbe5062154ed8d10cfdfbe797e6212_xs.jpg b/imgs/v2-82bbe5062154ed8d10cfdfbe797e6212_xs.jpg new file mode 100644 index 0000000..2af0587 Binary files /dev/null and b/imgs/v2-82bbe5062154ed8d10cfdfbe797e6212_xs.jpg differ diff --git a/imgs/v2-ff772fdd0691d0bd2b776629ec79452b_r.jpg b/imgs/v2-ff772fdd0691d0bd2b776629ec79452b_r.jpg new file mode 100644 index 0000000..544a780 Binary files /dev/null and b/imgs/v2-ff772fdd0691d0bd2b776629ec79452b_r.jpg differ diff --git a/imgs/yunweitixi.png b/imgs/yunweitixi.png new file mode 100644 index 0000000..0a898cd Binary files /dev/null and b/imgs/yunweitixi.png differ diff --git a/imgs/zookeeper_arch.png b/imgs/zookeeper_arch.png new file mode 100644 index 0000000..4481511 Binary files /dev/null and b/imgs/zookeeper_arch.png differ diff --git a/ip_safe.md b/ip_safe.md new file mode 100644 index 0000000..83ff36b --- /dev/null +++ b/ip_safe.md @@ -0,0 +1,60 @@ + +# 淇℃伅瀹夊叏鏍″洯鎷涜仒 +涓撲笟瑕佹眰淇℃伅宸ョ▼銆佽绠楁満銆佽蒋浠跺伐绋嬨侀氫俊绛夌浉鍏充笓涓 + +## 宀椾綅鑱岃矗 +1. 鍒惰缃戠粶淇℃伅瀹夊叏瑙勮寖鍜屾妧鏈爣鍑嗭紝鐫d績鍜屾鏌ュ畨鍏ㄦ爣鍑嗗疄鏂斤紱 +2. 閮ㄧ讲鍜屽畬鍠勫畨鍏ㄩ槻鎶や綋绯伙紱 +3. 璐熻矗瀵瑰悇涓氬姟绯荤粺瀹夊叏绠$悊鍜屾妧鏈寚瀵; +4. 瀹氭湡寮灞曠浉鍏崇郴缁熸棩甯稿畨鍏ㄦ鏌ュ拰瀹炴柦锛屽寘鎷紡娲炴壂鎻忋佽ˉ涓佸崌绾с佹笚閫忔祴璇曠瓑锛 +5. 璐熻矗鎵挎帴涓婄骇閮ㄩ棬銆佸悇绠$悊閮ㄩ棬鐨勫畨鍏ㄨ姹傚苟鍦ㄥ叕鍙歌惤鍦板疄鏂斤紝鎵挎帴涓婄骇閮ㄩ棬鐨勫畨鍏ㄦ鏌ワ紱 + +## 搴旇仒璧勬牸 + +# IP缃戠粶鍙婂畨鍏ㄤ笓涓 + +## IP缃戠粶鏂瑰悜 +1. 楂樼骇涓撳鏍囧噯锛 +- 琚叕璁や负闆嗗洟鍐匢P缃戠粶棰嗗煙鐨勬潈濞佸拰鐭ュ悕涓撳锛屽叿鏈夊叏灞瑙傦紝鍙備笌鍒跺畾鍏徃浜у搧鐨勬牳蹇冪粍缃戞灦鏋勬垬鐣ュ苟鎺ㄥ姩鍏徃鍐崇瓥锛 +- 鎶婃彙鏍稿績缁勭綉鏋舵瀯鐨勫彂灞曟柟鍚戯紝棰嗗閲嶇偣鏀诲叧椤圭洰寮鍙戯紝鍏峰涓氬唴涓瀹氬奖鍝嶅姏鍜岀煡鍚嶅害锛 +- 瑙e喅鍏徃缃戠粶鎶鏈灦鏋勯鍩熷唴澶嶆潅绋嬪害鏈楂樼殑闂銆侀噸瑕佺▼搴︽渶楂樼殑椤圭洰鎴栬法閮ㄩ棬鐨勫ぇ鍨嬮」鐩紱 +- 鑾峰緱CCIE鎴栧悓绛変笓瀹剁骇璁よ瘉璇佷功銆 +2. 涓绾т笓瀹舵爣鍑嗭細 +- 鍦ㄧ渷鍏徃鍐呴儴琚叕璁や负缃戠粶棰嗗煙鐨勪笓瀹讹紝鑳藉棰嗗闆嗗洟绾уぇ涓瀷椤圭洰鐨勭綉缁滆鍒掞紱 +- 鎻愪緵褰卞搷鍏徃闀挎湡鍙戝睍鐨勭粍缃戣鍒掑缓璁紝骞惰В鍐虫牳蹇冪粍缃戜笟鍔¢毦棰橈紱 +- 鑳借瘑鍒拰鍒嗘瀽澶嶆潅鐨勭綉缁滅粍缃戦棶棰橈紝骞跺椤圭洰杩涜缁勭綉鏀归犱紭鍖栧缓璁佹彁楂樼綉缁滀娇鐢ㄦ晥鐜囥佸噺灏戠綉缁滄晠闅滆妭鐐瑰強缃戠粶瀹夊叏闅愭偅銆 +- 娣卞叆浜嗚В棰嗗煙鍐呯殑涓撲笟鐭ヨ瘑锛屽叿澶囩簿婀涚殑鎶鑳斤紱 +- 鑳界嫭绔嬪畾浣嶇綉缁滄晠闅滅殑鏍稿績闂锛屽揩閫熻В鍐冲鏉傜殑缃戠粶鏁呴殰銆 +- 鍏锋湁杈冨己鎶鏈夊瀷鑳藉姏锛岃兘瀵规湰棰嗗煙鍐呯綉缁滃崗璁紭缂虹偣杩涜璇勪及骞朵綔鍑洪夋嫨锛 +- 鍏锋湁杈冨己鐨勪笓涓氳兘鍔涘強鏈鍩熷唴绯荤粺鍒嗘瀽锛岀綉缁滀紭鍖栬兘鍔; +- 鑳介┍鍔ㄥ洟闃燂紝鎸囧鏁翠釜鍥㈤槦鏈夋晥杩愪綔銆 +- 鑾峰緱CCIE鎴栧悓绛変笓瀹剁骇璁よ瘉璇佷功銆 +3. 浜岀骇涓撳鏍囧噯锛 +- 浣滀负閮ㄩ棬鍐呭叕璁ょ殑缃戠粶鏀拺涓撳锛岃兘澶熺嫭绔嬭В鍐虫湁绾裤佹棤绾夸晶鐨勫鏉傜綉缁滈棶棰橈紱 +- 鍦ㄧ綉缁滀笓涓氶鍩熷叿鏈夎緝涓板瘜鐨勭煡璇嗗拰鎶鑳斤紝鍦ㄦ湰涓撲笟鍏朵粬棰嗗煙涔熸湁涓瀹氱▼搴︾殑浜嗚В锛 +- 鑳藉搴旂敤鎵鎺屾彙鐨勭綉缁滅煡璇嗐佹渚嬫垨宸ュ叿鎻愬嚭寤鸿鎬х殑寤鸿鎴栧仛鍑鸿皟鏁达紱 +- 鑳藉绯荤粺鎬цВ鍐虫湁绾裤佹棤绾跨綉缁滈鍩熷唴闈炲父澶嶆潅鐨勯棶棰橈紝鎻愬嚭楂樺害鍒涙柊鐨勮В鍐虫柟妗堬紱 +- 鍏锋湁鑹ソ鐨勬晠闅滃垎鏋愯兘鍔涘拰鐜板満浼樺寲鑳藉姏锛屽閲嶅ぇ椤圭洰锛屾棤绾裤佹湁绾夸晶缃戠粶锛屾彁渚涗紭鍖栬В鍐虫柟妗堬紱 +- 鑳藉甯﹀姩鍥㈤槦锛屽彲浠ユ寚瀵煎甫棰嗕竴涓敮鎾戝洟闃熸湁鏁堟湇鍔° +- 鑾峰緱CCNP鎴栧悓绛変腑绾х骇鍒璇佽瘉涔︺ + +## 瀹夊叏鏂瑰悜 +1. 楂樼骇涓撳鏍囧噯锛 +- 琚叕璁や负闆嗗洟鍐呭畨鍏ㄩ鍩熺殑鏉冨▉鍜岀煡鍚嶄笓瀹讹紝鍏锋湁鍏ㄥ眬瑙傦紝鍙備笌鍒跺畾鍏徃瀹夊叏鏋舵瀯鎴樼暐骞舵帹鍔ㄥ叕鍙稿畨鍏ㄧ浉鍏冲喅绛栵紱 +- 鎶婃彙瀹夊叏棰嗗煙鍙戝睍鏂瑰悜锛岄瀵奸噸鐐规敾鍏抽」鐩紑鍙戯紝鍏峰涓氬唴涓瀹氬奖鍝嶅姏鍜岀煡鍚嶅害锛 +- 瑙e喅鍏徃瀹夊叏棰嗗煙鍐呭鏉傜▼搴︽渶楂樼殑闂銆侀噸瑕佺▼搴︽渶楂樼殑椤圭洰鎴栬法閮ㄩ棬鐨勫ぇ鍨嬮」鐩紱 +- 鑾峰緱CISSP/CISP鎴栧悓绛変笓瀹剁骇璁よ瘉璇佷功銆 +2. 涓绾т笓瀹舵爣鍑嗭細 +- 鍦ㄧ渷鍏徃鍐呴儴琚叕璁や负淇℃伅瀹夊叏棰嗗煙鐨勪笓瀹讹紝鑳藉缁勭粐棰嗗闆嗗洟绾уぇ涓瀷椤圭洰淇℃伅瀹夊叏鏋舵瀯锛 +- 娣卞叆鎺屾彙淇℃伅瀹夊叏棰嗗煙鍐呯殑涓撲笟鐭ヨ瘑鍜屾妧鏈紨杩涳紝鑳界粰鍏徃浜у搧鍜屽熀纭璁炬柦鐨勫畨鍏ㄦ彁渚涚鍒扮鎸囧鎰忚锛 +- 鑳藉垎鏋愬畾浣嶅畨鍏ㄩ棶棰橈紝骞堕氳繃钀藉疄鍚勭被瀹夊叏鎵嬫锛岃В鍐冲ぇ鍨嬬綉缁滄垨搴旂敤涓畨鍏ㄩ殣鎮o紱 +- 鑳介┍鍔ㄥ洟闃燂紝鎸囧鏁翠釜鍥㈤槦鏈夋晥杩愪綔; +- 鑾峰緱CISSP/CISP鎴栧悓绛変笓瀹剁骇璁よ瘉璇佷功銆 +3. 浜岀骇涓撳鏍囧噯锛 +- 杈冨叏闈㈡帉鎻′俊鎭畨鍏ㄦ敾闃叉柟娉曞拰闃茶寖鎺柦锛 +- 鐔熸倝淇℃伅瀹夊叏棰嗗煙涓撲笟鐭ヨ瘑锛屽叿鏈夎壇濂界殑鏁呴殰鍒嗘瀽鑳藉姏鍜岄棶棰樿В鍐宠兘鍔; +- 鑳界嫭绔嬪紑灞曟壂鎻忋佹笚閫忕瓑宸ヤ綔锛屽苟閽堝缁撴灉鏆撮湶鐨勯棶棰樻彁鍑烘湁鏁堣В鍐虫柟妗堬紱 +- 鑳藉搴旂敤鎵鎺屾彙鐨勭綉淇″畨鐭ヨ瘑銆佹渚嬫垨宸ュ叿鎻愬嚭寤鸿鎬х殑寤鸿锛 +- 鑳藉绯荤粺鎬цВ鍐崇綉淇″畨棰嗗煙澶嶆潅闂锛屾彁鍑洪珮搴﹀垱鏂扮殑瑙e喅鏂规锛 +- 鑳藉甯﹂涓涓畨鍏ㄥ洟闃熸彁渚涙湁鏁堟湇鍔; + diff --git a/jiaojie.md b/jiaojie.md new file mode 100644 index 0000000..b03c69d --- /dev/null +++ b/jiaojie.md @@ -0,0 +1,25 @@ + +# 鐜嬬櫥寮宸ヤ綔浜ゆ帴 + +## 鐩戞帶閲囬泦 + +flume -> kafka -> promethus -> grafana +logstash? + +topic -> prometheus metric + label + + +- [娣卞害濂芥枃锛歅rometheus Metrics 璁捐鐨勬渶浣冲疄璺靛拰搴旂敤瀹炰緥锛乚(https://baijiahao.baidu.com/s?id=1709256859922616647&wfr=spider&for=pc) + + +### 浜ゆ帴宸ヤ綔 +- 鏉冮檺 +- 绯荤粺娓呭崟 +- 宸ヤ綔鏂囦欢&璧勬枡 +- 鑱旂郴鎺ュ彛娓呭崟锛屽唴澶栭儴锛岃秺璇︾粏绾﹀ソ +- 宸ヤ綔娴佺▼銆佸叧閿帶鍒剁偣銆佹搷浣滄柟娉曪紝绀鸿寖锛岀‘淇濊浜ゆ帴浜虹嫭绔嬫搷浣 + +# 114浜ゆ帴 +## + + diff --git a/k8slearning.md b/k8slearning.md new file mode 100644 index 0000000..4e71677 --- /dev/null +++ b/k8slearning.md @@ -0,0 +1,6301 @@ +# 1. Kubernetes浠嬬粛 + +## 1.1 搴旂敤閮ㄧ讲鏂瑰紡婕斿彉 + +鍦ㄩ儴缃插簲鐢ㄧ▼搴忕殑鏂瑰紡涓婏紝涓昏缁忓巻浜嗕笁涓椂浠o細 + +- **浼犵粺閮ㄧ讲**锛氫簰鑱旂綉鏃╂湡锛屼細鐩存帴灏嗗簲鐢ㄧ▼搴忛儴缃插湪鐗╃悊鏈轰笂 + + > 浼樼偣锛氱畝鍗曪紝涓嶉渶瑕佸叾瀹冩妧鏈殑鍙備笌 + > + > 缂虹偣锛氫笉鑳戒负搴旂敤绋嬪簭瀹氫箟璧勬簮浣跨敤杈圭晫锛屽緢闅惧悎鐞嗗湴鍒嗛厤璁$畻璧勬簮锛岃屼笖绋嬪簭涔嬮棿瀹规槗浜х敓褰卞搷 + +- **铏氭嫙鍖栭儴缃**锛氬彲浠ュ湪涓鍙扮墿鐞嗘満涓婅繍琛屽涓櫄鎷熸満锛屾瘡涓櫄鎷熸満閮芥槸鐙珛鐨勪竴涓幆澧 + + > 浼樼偣锛氱▼搴忕幆澧冧笉浼氱浉浜掍骇鐢熷奖鍝嶏紝鎻愪緵浜嗕竴瀹氱▼搴︾殑瀹夊叏鎬 + > + > 缂虹偣锛氬鍔犱簡鎿嶄綔绯荤粺锛屾氮璐逛簡閮ㄥ垎璧勬簮 + +- **瀹瑰櫒鍖栭儴缃**锛氫笌铏氭嫙鍖栫被浼硷紝浣嗘槸鍏变韩浜嗘搷浣滅郴缁 + + > 浼樼偣锛 + > + > 鍙互淇濊瘉姣忎釜瀹瑰櫒鎷ユ湁鑷繁鐨勬枃浠剁郴缁熴丆PU銆佸唴瀛樸佽繘绋嬬┖闂寸瓑 + > + > 杩愯搴旂敤绋嬪簭鎵闇瑕佺殑璧勬簮閮借瀹瑰櫒鍖呰锛屽苟鍜屽簳灞傚熀纭鏋舵瀯瑙h + > + > 瀹瑰櫒鍖栫殑搴旂敤绋嬪簭鍙互璺ㄤ簯鏈嶅姟鍟嗐佽法Linux鎿嶄綔绯荤粺鍙戣鐗堣繘琛岄儴缃 + +![image-20200505183738289](Kubenetes.assets/image-20200505183738289.png) + +瀹瑰櫒鍖栭儴缃叉柟寮忕粰甯︽潵寰堝鐨勪究鍒╋紝浣嗘槸涔熶細鍑虹幇涓浜涢棶棰橈紝姣斿璇达細 + +- 涓涓鍣ㄦ晠闅滃仠鏈轰簡锛屾庝箞鏍疯鍙﹀涓涓鍣ㄧ珛鍒诲惎鍔ㄥ幓鏇胯ˉ鍋滄満鐨勫鍣 +- 褰撳苟鍙戣闂噺鍙樺ぇ鐨勬椂鍊欙紝鎬庝箞鏍峰仛鍒版í鍚戞墿灞曞鍣ㄦ暟閲 + +杩欎簺瀹瑰櫒绠$悊鐨勯棶棰樼粺绉颁负**瀹瑰櫒缂栨帓**闂锛屼负浜嗚В鍐宠繖浜涘鍣ㄧ紪鎺掗棶棰橈紝灏变骇鐢熶簡涓浜涘鍣ㄧ紪鎺掔殑杞欢锛 + +- **Swarm**锛欴ocker鑷繁鐨勫鍣ㄧ紪鎺掑伐鍏 +- **Mesos**锛欰pache鐨勪竴涓祫婧愮粺涓绠℃帶鐨勫伐鍏凤紝闇瑕佸拰Marathon缁撳悎浣跨敤 +- **Kubernetes**锛欸oogle寮婧愮殑鐨勫鍣ㄧ紪鎺掑伐鍏 + +![image-20200524150339551](Kubenetes.assets/image-20200524150339551.png) + +## 1.2 kubernetes绠浠 + +![image-20200406232838722](Kubenetes.assets/image-20200406232838722.png) + + + +kubernetes锛屾槸涓涓叏鏂扮殑鍩轰簬瀹瑰櫒鎶鏈殑鍒嗗竷寮忔灦鏋勯鍏堟柟妗堬紝鏄胺姝屼弗鏍间繚瀵嗗崄鍑犲勾鐨勭瀵嗘鍣----Borg绯荤粺鐨勪竴涓紑婧愮増鏈紝浜2014骞9鏈堝彂甯冪涓涓増鏈紝2015骞7鏈堝彂甯冪涓涓寮忕増鏈 + +kubernetes鐨勬湰璐ㄦ槸**涓缁勬湇鍔″櫒闆嗙兢**锛屽畠鍙互鍦ㄩ泦缇ょ殑姣忎釜鑺傜偣涓婅繍琛岀壒瀹氱殑绋嬪簭锛屾潵瀵硅妭鐐逛腑鐨勫鍣ㄨ繘琛岀鐞嗐傜洰鐨勬槸瀹炵幇璧勬簮绠$悊鐨勮嚜鍔ㄥ寲锛屼富瑕佹彁渚涗簡濡備笅鐨勪富瑕佸姛鑳斤細 + +- **鑷垜淇**锛氫竴鏃︽煇涓涓鍣ㄥ穿婧冿紝鑳藉鍦1绉掍腑宸﹀彸杩呴熷惎鍔ㄦ柊鐨勫鍣 +- **寮规т几缂**锛氬彲浠ユ牴鎹渶瑕侊紝鑷姩瀵归泦缇や腑姝e湪杩愯鐨勫鍣ㄦ暟閲忚繘琛岃皟鏁 +- **鏈嶅姟鍙戠幇**锛氭湇鍔″彲浠ラ氳繃鑷姩鍙戠幇鐨勫舰寮忔壘鍒板畠鎵渚濊禆鐨勬湇鍔 +- **璐熻浇鍧囪 **锛氬鏋滀竴涓湇鍔¤捣鍔ㄤ簡澶氫釜瀹瑰櫒锛岃兘澶熻嚜鍔ㄥ疄鐜拌姹傜殑璐熻浇鍧囪  +- **鐗堟湰鍥為**锛氬鏋滃彂鐜版柊鍙戝竷鐨勭▼搴忕増鏈湁闂锛屽彲浠ョ珛鍗冲洖閫鍒板師鏉ョ殑鐗堟湰 +- **瀛樺偍缂栨帓**锛氬彲浠ユ牴鎹鍣ㄨ嚜韬殑闇姹傝嚜鍔ㄥ垱寤哄瓨鍌ㄥ嵎 + +## 1.3 kubernetes缁勪欢 + +涓涓猭ubernetes闆嗙兢涓昏鏄敱**鎺у埗鑺傜偣(master)**銆**宸ヤ綔鑺傜偣(node)**鏋勬垚锛屾瘡涓妭鐐逛笂閮戒細瀹夎涓嶅悓鐨勭粍浠躲 + +**master锛氶泦缇ょ殑鎺у埗骞抽潰锛岃礋璐i泦缇ょ殑鍐崇瓥 ( 绠$悊 )** + +> **ApiServer** : 璧勬簮鎿嶄綔鐨勫敮涓鍏ュ彛锛屾帴鏀剁敤鎴疯緭鍏ョ殑鍛戒护锛屾彁渚涜璇併佹巿鏉冦丄PI娉ㄥ唽鍜屽彂鐜扮瓑鏈哄埗 +> +> **Scheduler** : 璐熻矗闆嗙兢璧勬簮璋冨害锛屾寜鐓ч瀹氱殑璋冨害绛栫暐灏哖od璋冨害鍒扮浉搴旂殑node鑺傜偣涓 +> +> **ControllerManager** : 璐熻矗缁存姢闆嗙兢鐨勭姸鎬侊紝姣斿绋嬪簭閮ㄧ讲瀹夋帓銆佹晠闅滄娴嬨佽嚜鍔ㄦ墿灞曘佹粴鍔ㄦ洿鏂扮瓑 +> +> **Etcd** 锛氳礋璐e瓨鍌ㄩ泦缇や腑鍚勭璧勬簮瀵硅薄鐨勪俊鎭 + +**node锛氶泦缇ょ殑鏁版嵁骞抽潰锛岃礋璐d负瀹瑰櫒鎻愪緵杩愯鐜 ( 骞叉椿 )** + +> **Kubelet** : 璐熻矗缁存姢瀹瑰櫒鐨勭敓鍛藉懆鏈燂紝鍗抽氳繃鎺у埗docker锛屾潵鍒涘缓銆佹洿鏂般侀攢姣佸鍣 +> +> **KubeProxy** : 璐熻矗鎻愪緵闆嗙兢鍐呴儴鐨勬湇鍔″彂鐜板拰璐熻浇鍧囪  +> +> **Docker** : 璐熻矗鑺傜偣涓婂鍣ㄧ殑鍚勭鎿嶄綔 + +![image-20200406184656917](Kubenetes.assets/image-20200406184656917.png) + +涓嬮潰锛屼互閮ㄧ讲涓涓猲ginx鏈嶅姟鏉ヨ鏄巏ubernetes绯荤粺鍚勪釜缁勪欢璋冪敤鍏崇郴锛 + +1. 棣栧厛瑕佹槑纭紝涓鏃ubernetes鐜鍚姩涔嬪悗锛宮aster鍜宯ode閮戒細灏嗚嚜韬殑淇℃伅瀛樺偍鍒癳tcd鏁版嵁搴撲腑 + +2. 涓涓猲ginx鏈嶅姟鐨勫畨瑁呰姹備細棣栧厛琚彂閫佸埌master鑺傜偣鐨刟piServer缁勪欢 + +3. apiServer缁勪欢浼氳皟鐢╯cheduler缁勪欢鏉ュ喅瀹氬埌搴曞簲璇ユ妸杩欎釜鏈嶅姟瀹夎鍒板摢涓猲ode鑺傜偣涓 + + 鍦ㄦ鏃讹紝瀹冧細浠巈tcd涓鍙栧悇涓猲ode鑺傜偣鐨勪俊鎭紝鐒跺悗鎸夌収涓瀹氱殑绠楁硶杩涜閫夋嫨锛屽苟灏嗙粨鏋滃憡鐭piServer + +4. apiServer璋冪敤controller-manager鍘昏皟搴ode鑺傜偣瀹夎nginx鏈嶅姟 + +5. kubelet鎺ユ敹鍒版寚浠ゅ悗锛屼細閫氱煡docker锛岀劧鍚庣敱docker鏉ュ惎鍔ㄤ竴涓猲ginx鐨刾od + + pod鏄痥ubernetes鐨勬渶灏忔搷浣滃崟鍏冿紝瀹瑰櫒蹇呴』璺戝湪pod涓,鑷虫锛 + +6. 涓涓猲ginx鏈嶅姟灏辫繍琛屼簡锛屽鏋滈渶瑕佽闂畁ginx锛屽氨闇瑕侀氳繃kube-proxy鏉ュpod浜х敓璁块棶鐨勪唬鐞 + +杩欐牱锛屽鐣岀敤鎴峰氨鍙互璁块棶闆嗙兢涓殑nginx鏈嶅姟浜 + +## 1.4 kubernetes姒傚康 + +**Master**锛氶泦缇ゆ帶鍒惰妭鐐癸紝姣忎釜闆嗙兢闇瑕佽嚦灏戜竴涓猰aster鑺傜偣璐熻矗闆嗙兢鐨勭鎺 + +**Node**锛氬伐浣滆礋杞借妭鐐癸紝鐢眒aster鍒嗛厤瀹瑰櫒鍒拌繖浜沶ode宸ヤ綔鑺傜偣涓婏紝鐒跺悗node鑺傜偣涓婄殑docker璐熻矗瀹瑰櫒鐨勮繍琛 + +**Pod**锛歬ubernetes鐨勬渶灏忔帶鍒跺崟鍏冿紝瀹瑰櫒閮芥槸杩愯鍦╬od涓殑锛屼竴涓猵od涓彲浠ユ湁1涓垨鑰呭涓鍣 + +**Controller**锛氭帶鍒跺櫒锛岄氳繃瀹冩潵瀹炵幇瀵筽od鐨勭鐞嗭紝姣斿鍚姩pod銆佸仠姝od銆佷几缂﹑od鐨勬暟閲忕瓑绛 + +**Service**锛歱od瀵瑰鏈嶅姟鐨勭粺涓鍏ュ彛锛屼笅闈㈠彲浠ョ淮鎶よ呭悓涓绫荤殑澶氫釜pod + +**Label**锛氭爣绛撅紝鐢ㄤ簬瀵筽od杩涜鍒嗙被锛屽悓涓绫籶od浼氭嫢鏈夌浉鍚岀殑鏍囩 + +**NameSpace**锛氬懡鍚嶇┖闂达紝鐢ㄦ潵闅旂pod鐨勮繍琛岀幆澧 + + + +# 2. kubernetes闆嗙兢鐜鎼缓 + +## 2.1 鍓嶇疆鐭ヨ瘑鐐 + +鐩墠鐢熶骇閮ㄧ讲Kubernetes 闆嗙兢涓昏鏈変袱绉嶆柟寮忥細 + +**kubeadm** + +Kubeadm 鏄竴涓狵8s 閮ㄧ讲宸ュ叿锛屾彁渚沰ubeadm init 鍜宬ubeadm join锛岀敤浜庡揩閫熼儴缃睰ubernetes 闆嗙兢銆 + +瀹樻柟鍦板潃锛歨ttps://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/ + +**浜岃繘鍒跺寘** + +浠巊ithub 涓嬭浇鍙戣鐗堢殑浜岃繘鍒跺寘锛屾墜鍔ㄩ儴缃叉瘡涓粍浠讹紝缁勬垚Kubernetes 闆嗙兢銆 + +Kubeadm 闄嶄綆閮ㄧ讲闂ㄦ锛屼絾灞忚斀浜嗗緢澶氱粏鑺傦紝閬囧埌闂寰堥毦鎺掓煡銆傚鏋滄兂鏇村鏄撳彲鎺э紝鎺ㄨ崘浣跨敤浜岃繘鍒跺寘閮ㄧ讲Kubernetes 闆嗙兢锛岃櫧鐒舵墜鍔ㄩ儴缃查夯鐑︾偣锛屾湡闂村彲浠ュ涔犲緢澶氬伐浣滃師鐞嗭紝涔熷埄浜庡悗鏈熺淮鎶ゃ + +*CG: rancher* + +![image-20200404094800622](Kubenetes.assets/image-20200404094800622.png) + +## 2.2 kubeadm 閮ㄧ讲鏂瑰紡浠嬬粛 + +kubeadm 鏄畼鏂圭ぞ鍖烘帹鍑虹殑涓涓敤浜庡揩閫熼儴缃瞜ubernetes 闆嗙兢鐨勫伐鍏凤紝杩欎釜宸ュ叿鑳介氳繃涓ゆ潯鎸囦护瀹屾垚涓涓猭ubernetes 闆嗙兢鐨勯儴缃诧細 + +- 鍒涘缓涓涓狹aster 鑺傜偣kubeadm init +- 灏哊ode 鑺傜偣鍔犲叆鍒板綋鍓嶉泦缇や腑$ kubeadm join + +## 2.3 瀹夎瑕佹眰 + +鍦ㄥ紑濮嬩箣鍓嶏紝閮ㄧ讲Kubernetes 闆嗙兢鏈哄櫒闇瑕佹弧瓒充互涓嬪嚑涓潯浠讹細 + +- 涓鍙版垨澶氬彴鏈哄櫒锛屾搷浣滅郴缁烠entOS7.x-86_x64 +- 纭欢閰嶇疆锛2GB 鎴栨洿澶歊AM锛2 涓狢PU 鎴栨洿澶欳PU锛岀‖鐩30GB 鎴栨洿澶 +- 闆嗙兢涓墍鏈夋満鍣ㄤ箣闂寸綉缁滀簰閫 +- 鍙互璁块棶澶栫綉锛岄渶瑕佹媺鍙栭暅鍍 +- 绂佹swap 鍒嗗尯 + +## 2.4 鏈缁堢洰鏍 + +- 鍦ㄦ墍鏈夎妭鐐逛笂瀹夎Docker 鍜宬ubeadm +- 閮ㄧ讲Kubernetes Master +- 閮ㄧ讲瀹瑰櫒缃戠粶鎻掍欢 +- 閮ㄧ讲Kubernetes Node锛屽皢鑺傜偣鍔犲叆Kubernetes 闆嗙兢涓 +- 閮ㄧ讲Dashboard Web 椤甸潰锛屽彲瑙嗗寲鏌ョ湅Kubernetes 璧勬簮 + +## 2.5 鍑嗗鐜 + + + +![image-20210609000002940](Kubenetes.assets/image-20210609000002940.png) + +| 瑙掕壊 | IP鍦板潃 | 缁勪欢 | +| :----------- | :---------- | :-------------------------------- | +| k8s-master01 | 192.168.5.3 | docker锛宬ubectl锛宬ubeadm锛宬ubelet | +| k8s-node01 | 192.168.5.4 | docker锛宬ubectl锛宬ubeadm锛宬ubelet | +| k8s-node02 | 192.168.5.5 | docker锛宬ubectl锛宬ubeadm锛宬ubelet | + +## 2.6 绯荤粺鍒濆鍖 + +### 2.6.1 璁剧疆绯荤粺涓绘満鍚嶄互鍙 Host 鏂囦欢鐨勭浉浜掕В鏋 + +```shell +hostnamectl set-hostname k8s-master01 && bash +hostnamectl set-hostname k8s-node01 && bash +hostnamectl set-hostname k8s-node02 && bash +``` + +```shell +cat <> /etc/hosts +192.168.5.3 k8s-master01 +192.168.5.4 k8s-node01 +192.168.5.5 k8s-node02 +EOF +``` + +```shell +scp /etc/hosts root@192.168.5.4:/etc/hosts +scp /etc/hosts root@192.168.5.5:/etc/hosts +``` + +### 2.6.2 瀹夎渚濊禆鏂囦欢锛堟墍鏈夎妭鐐归兘瑕佹搷浣滐級 + +```shell +yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git +``` + +### 2.6.3 璁剧疆闃茬伀澧欎负 Iptables 骞惰缃┖瑙勫垯锛堟墍鏈夎妭鐐归兘瑕佹搷浣滐級 + +```shell +systemctl stop firewalld && systemctl disable firewalld + +yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save +``` + +CG: +``` +浣跨敤 /sbin/iptables -F 瑕佸皬蹇冿紝鎼炰笉濂斤紝浣犲氨椹笂鍚屾湇鍔″櫒鏂紑杩炴帴浜 + +鍙互閫氳繃/sbin/iptables -F娓呴櫎鎵鏈夎鍒欐潵鏆傛椂鍋滄闃茬伀澧 +(璀﹀憡锛氳繖鍙傚悎鍦ㄦ病鏈夐厤缃槻鐏鐨勭幆澧冧腑锛屽鏋滃凡缁忛厤缃繃榛樿瑙勫垯涓篸eny鐨勭幆澧冿紝姝ゆ楠ゅ皢浣跨郴缁熺殑鎵鏈夌綉缁滆闂腑鏂) + +濡傛灉鎯虫竻绌虹殑璇濓紝鍏堟墽琛 /sbin/iptables -P INPUT ACCEPT + +鐒跺悗鎵ц /sbin/iptables -F + +閫氳繃iptables -L 鐪嬪埌濡備笅淇℃伅 +Chain INPUT (policy DROP 0 packets, 0 bytes) 锛堟敞鎰 鏄疍ROP锛 鎵ц/sbin/iptables -F灏辫偗瀹氱珛椹柇寮杩炴帴 + +褰撴墽琛屼簡 /sbin/iptables -P INPUT ACCEPT + +鍐嶆閫氳繃iptables -L鐪嬩俊鎭殑璇濆氨鏄 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) + +鎵浠ョ幇鍦ㄦ槸鍙互瀹夊叏浣跨敤 /sbin/iptables -F浜 +``` + + +### 2.6.4 鍏抽棴 SELINUX锛堟墍鏈夎妭鐐归兘瑕佹搷浣滐級 + +```shell +swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab + +setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config +``` + +### 2.6.5 璋冩暣鍐呮牳鍙傛暟锛屽浜 K8S锛堟墍鏈夎妭鐐归兘瑕佹搷浣滐級 + +```shell +modprobe br_netfilter + +cat < kubernetes.conf +net.bridge.bridge-nf-call-iptables=1 +net.bridge.bridge-nf-call-ip6tables=1 +net.ipv4.ip_forward=1 +net.ipv4.tcp_tw_recycle=0 +vm.swappiness=0 # 绂佹浣跨敤 swap 绌洪棿锛屽彧鏈夊綋绯荤粺 OOM 鏃舵墠鍏佽浣跨敤瀹 +vm.overcommit_memory=1 # 涓嶆鏌ョ墿鐞嗗唴瀛樻槸鍚﹀鐢 +vm.panic_on_oom=0 # 寮鍚 OOM +fs.inotify.max_user_instances=8192 +fs.inotify.max_user_watches=1048576 +fs.file-max=52706963 +fs.nr_open=52706963 +net.ipv6.conf.all.disable_ipv6=1 +net.netfilter.nf_conntrack_max=2310720 +EOF + +cp kubernetes.conf /etc/sysctl.d/kubernetes.conf + +sysctl -p /etc/sysctl.d/kubernetes.conf +``` + +### 2.6.6 璋冩暣绯荤粺鏃跺尯锛堟墍鏈夎妭鐐归兘瑕佹搷浣滐級 + +```shell +# 璁剧疆绯荤粺鏃跺尯涓 涓浗/涓婃捣 +timedatectl set-timezone Asia/Shanghai +# 灏嗗綋鍓嶇殑 UTC 鏃堕棿鍐欏叆纭欢鏃堕挓 +timedatectl set-local-rtc 0 +# 閲嶅惎渚濊禆浜庣郴缁熸椂闂寸殑鏈嶅姟 +systemctl restart rsyslog +systemctl restart crond +``` + +### 2.6.7 璁剧疆 rsyslogd 鍜 systemd journald锛堟墍鏈夎妭鐐归兘瑕佹搷浣滐級 + +```shell +# 鎸佷箙鍖栦繚瀛樻棩蹇楃殑鐩綍 +mkdir /var/log/journal +mkdir /etc/systemd/journald.conf.d +cat > /etc/systemd/journald.conf.d/99-prophet.conf < /etc/sysconfig/modules/ipvs.modules +#!/bin/bash +modprobe -- ip_vs +modprobe -- ip_vs_rr +modprobe -- ip_vs_wrr +modprobe -- ip_vs_sh +modprobe -- nf_conntrack_ipv4 +EOF + +chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4 +``` + +### 2.6.9 瀹夎 Docker 杞欢锛堟墍鏈夎妭鐐归兘瑕佹搷浣滐級 + +```shell +yum install -y yum-utils device-mapper-persistent-data lvm2 + +yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo + +yum install -y docker-ce + +## 鍒涘缓 /etc/docker 鐩綍 +mkdir /etc/docker + +cat > /etc/docker/daemon.json < /etc/yum.repos.d/kubernetes.repo +[kubernetes] +name=Kubernetes +baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 +enabled=1 +gpgcheck=0 +repo_gpgcheck=0 +gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg +http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg +EOF + +yum install -y kubelet kubeadm kubectl && systemctl enable kubelet +``` + +## 2.7 閮ㄧ讲Kubernetes Master + +### 2.7.1 鍒濆鍖栦富鑺傜偣锛堜富鑺傜偣鎿嶄綔锛 + +```shell +kubeadm init --apiserver-advertise-address=192.168.5.3 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.21.1 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 + +mkdir -p $HOME/.kube + +sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config + +sudo chown $(id -u):$(id -g) $HOME/.kube/config +``` + +### 2.7.2 鍔犲叆涓昏妭鐐逛互鍙婂叾浣欏伐浣滆妭鐐 + +```shell +kubeadm join 192.168.5.3:6443 --token h0uelc.l46qp29nxscke7f7 \ + --discovery-token-ca-cert-hash sha256:abc807778e24bff73362ceeb783cc7f6feec96f20b4fd707c3f8e8312294e28f +``` + +### 2.7.3 閮ㄧ讲缃戠粶 + +```shell +kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml +``` + +涓嬭竟鏄枃浠 + +```yaml +--- +apiVersion: policy/v1beta1 +kind: PodSecurityPolicy +metadata: + name: psp.flannel.unprivileged + annotations: + seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default + seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default + apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default + apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default +spec: + privileged: false + volumes: + - configMap + - secret + - emptyDir + - hostPath + allowedHostPaths: + - pathPrefix: "/etc/cni/net.d" + - pathPrefix: "/etc/kube-flannel" + - pathPrefix: "/run/flannel" + readOnlyRootFilesystem: false + # Users and groups + runAsUser: + rule: RunAsAny + supplementalGroups: + rule: RunAsAny + fsGroup: + rule: RunAsAny + # Privilege Escalation + allowPrivilegeEscalation: false + defaultAllowPrivilegeEscalation: false + # Capabilities + allowedCapabilities: ['NET_ADMIN', 'NET_RAW'] + defaultAddCapabilities: [] + requiredDropCapabilities: [] + # Host namespaces + hostPID: false + hostIPC: false + hostNetwork: true + hostPorts: + - min: 0 + max: 65535 + # SELinux + seLinux: + # SELinux is unused in CaaSP + rule: 'RunAsAny' +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: flannel +rules: +- apiGroups: ['extensions'] + resources: ['podsecuritypolicies'] + verbs: ['use'] + resourceNames: ['psp.flannel.unprivileged'] +- apiGroups: + - "" + resources: + - pods + verbs: + - get +- apiGroups: + - "" + resources: + - nodes + verbs: + - list + - watch +- apiGroups: + - "" + resources: + - nodes/status + verbs: + - patch +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: flannel +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: flannel +subjects: +- kind: ServiceAccount + name: flannel + namespace: kube-system +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: flannel + namespace: kube-system +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: kube-flannel-cfg + namespace: kube-system + labels: + tier: node + app: flannel +data: + cni-conf.json: | + { + "name": "cbr0", + "cniVersion": "0.3.1", + "plugins": [ + { + "type": "flannel", + "delegate": { + "hairpinMode": true, + "isDefaultGateway": true + } + }, + { + "type": "portmap", + "capabilities": { + "portMappings": true + } + } + ] + } + net-conf.json: | + { + "Network": "10.244.0.0/16", + "Backend": { + "Type": "vxlan" + } + } +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: kube-flannel-ds + namespace: kube-system + labels: + tier: node + app: flannel +spec: + selector: + matchLabels: + app: flannel + template: + metadata: + labels: + tier: node + app: flannel + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux + hostNetwork: true + priorityClassName: system-node-critical + tolerations: + - operator: Exists + effect: NoSchedule + serviceAccountName: flannel + initContainers: + - name: install-cni + image: quay.io/coreos/flannel:v0.14.0 + command: + - cp + args: + - -f + - /etc/kube-flannel/cni-conf.json + - /etc/cni/net.d/10-flannel.conflist + volumeMounts: + - name: cni + mountPath: /etc/cni/net.d + - name: flannel-cfg + mountPath: /etc/kube-flannel/ + containers: + - name: kube-flannel + image: quay.io/coreos/flannel:v0.14.0 + command: + - /opt/bin/flanneld + args: + - --ip-masq + - --kube-subnet-mgr + resources: + requests: + cpu: "100m" + memory: "50Mi" + limits: + cpu: "100m" + memory: "50Mi" + securityContext: + privileged: false + capabilities: + add: ["NET_ADMIN", "NET_RAW"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + volumeMounts: + - name: run + mountPath: /run/flannel + - name: flannel-cfg + mountPath: /etc/kube-flannel/ + volumes: + - name: run + hostPath: + path: /run/flannel + - name: cni + hostPath: + path: /etc/cni/net.d + - name: flannel-cfg + configMap: + name: kube-flannel-cfg +``` + + + +## 2.8 娴嬭瘯kubernetes 闆嗙兢 + +### 2.8.1 閮ㄧ讲nginx 娴嬭瘯 + +```shell +kubectl create deployment nginx --image=nginx + +kubectl expose deployment nginx --port=80 --type=NodePort + +kubectl get pod,svc +``` + +# 3. 璧勬簮绠$悊 + +## 3.1 璧勬簮绠$悊浠嬬粛 + +鍦╧ubernetes涓紝鎵鏈夌殑鍐呭閮芥娊璞′负璧勬簮锛岀敤鎴烽渶瑕侀氳繃鎿嶄綔璧勬簮鏉ョ鐞唊ubernetes銆 + +> kubernetes鐨勬湰璐ㄤ笂灏辨槸涓涓泦缇ょ郴缁燂紝鐢ㄦ埛鍙互鍦ㄩ泦缇や腑閮ㄧ讲鍚勭鏈嶅姟锛屾墍璋撶殑閮ㄧ讲鏈嶅姟锛屽叾瀹炲氨鏄湪kubernetes闆嗙兢涓繍琛屼竴涓釜鐨勫鍣紝骞跺皢鎸囧畾鐨勭▼搴忚窇鍦ㄥ鍣ㄤ腑銆 +> +> kubernetes鐨勬渶灏忕鐞嗗崟鍏冩槸pod鑰屼笉鏄鍣紝鎵浠ュ彧鑳藉皢瀹瑰櫒鏀惧湪`Pod`涓紝鑰宬ubernetes涓鑸篃涓嶄細鐩存帴绠$悊Pod锛岃屾槸閫氳繃`Pod鎺у埗鍣╜鏉ョ鐞哖od鐨勩 +> +> Pod鍙互鎻愪緵鏈嶅姟涔嬪悗锛屽氨瑕佽冭檻濡備綍璁块棶Pod涓湇鍔★紝kubernetes鎻愪緵浜哷Service`璧勬簮瀹炵幇杩欎釜鍔熻兘銆 +> +> 褰撶劧锛屽鏋淧od涓▼搴忕殑鏁版嵁闇瑕佹寔涔呭寲锛宬ubernetes杩樻彁渚涗簡鍚勭`瀛樺偍`绯荤粺銆 + +![image-20200406225334627](Kubenetes.assets/image-20200406225334627.png) + +> 瀛︿範kubernetes鐨勬牳蹇冿紝灏辨槸瀛︿範濡備綍瀵归泦缇や笂鐨刞Pod銆丳od鎺у埗鍣ㄣ丼ervice銆佸瓨鍌╜绛夊悇绉嶈祫婧愯繘琛屾搷浣 + +## 3.2 YAML璇█浠嬬粛 + +YAML鏄竴涓被浼 XML銆丣SON 鐨勬爣璁版ц瑷銆傚畠寮鸿皟浠**鏁版嵁**涓轰腑蹇冿紝骞朵笉鏄互鏍囪瘑璇█涓洪噸鐐广傚洜鑰孻AML鏈韩鐨勫畾涔夋瘮杈冪畝鍗曪紝鍙风О"涓绉嶄汉鎬у寲鐨勬暟鎹牸寮忚瑷"銆 + +``` + + 15 +
    Beijing
    +
    +``` + +``` +heima: + age: 15 + address: Beijing +``` + +YAML鐨勮娉曟瘮杈冪畝鍗曪紝涓昏鏈変笅闈㈠嚑涓細 + +- 澶у皬鍐欐晱鎰 +- 浣跨敤缂╄繘琛ㄧず灞傜骇鍏崇郴 +- 缂╄繘涓嶅厑璁镐娇鐢╰ab锛屽彧鍏佽绌烘牸( 浣庣増鏈檺鍒 ) +- 缂╄繘鐨勭┖鏍兼暟涓嶉噸瑕侊紝鍙鐩稿悓灞傜骇鐨勫厓绱犲乏瀵归綈鍗冲彲 +- '#'琛ㄧず娉ㄩ噴 + +YAML鏀寔浠ヤ笅鍑犵鏁版嵁绫诲瀷锛 + +- 绾噺锛氬崟涓殑銆佷笉鍙啀鍒嗙殑鍊 +- 瀵硅薄锛氶敭鍊煎鐨勯泦鍚堬紝鍙堢О涓烘槧灏勶紙mapping锛/ 鍝堝笇锛坔ash锛 / 瀛楀吀锛坉ictionary锛 +- 鏁扮粍锛氫竴缁勬寜娆″簭鎺掑垪鐨勫硷紝鍙堢О涓哄簭鍒楋紙sequence锛 / 鍒楄〃锛坙ist锛 + +``` +# 绾噺, 灏辨槸鎸囩殑涓涓畝鍗曠殑鍊硷紝瀛楃涓层佸竷灏斿笺佹暣鏁般佹诞鐐规暟銆丯ull銆佹椂闂淬佹棩鏈 +# 1 甯冨皵绫诲瀷 +c1: true (鎴栬匱rue) +# 2 鏁村瀷 +c2: 234 +# 3 娴偣鍨 +c3: 3.14 +# 4 null绫诲瀷 +c4: ~ # 浣跨敤~琛ㄧずnull +# 5 鏃ユ湡绫诲瀷 +c5: 2018-02-17 # 鏃ユ湡蹇呴』浣跨敤ISO 8601鏍煎紡锛屽嵆yyyy-MM-dd +# 6 鏃堕棿绫诲瀷 +c6: 2018-02-17T15:02:31+08:00 # 鏃堕棿浣跨敤ISO 8601鏍煎紡锛屾椂闂村拰鏃ユ湡涔嬮棿浣跨敤T杩炴帴锛屾渶鍚庝娇鐢+浠h〃鏃跺尯 +# 7 瀛楃涓茬被鍨 +c7: heima # 绠鍗曞啓娉曪紝鐩存帴鍐欏 , 濡傛灉瀛楃涓蹭腑闂存湁鐗规畩瀛楃锛屽繀椤讳娇鐢ㄥ弻寮曞彿鎴栬呭崟寮曞彿鍖呰9 +c8: line1 + line2 # 瀛楃涓茶繃澶氱殑鎯呭喌鍙互鎷嗘垚澶氳锛屾瘡涓琛屼細琚浆鍖栨垚涓涓┖鏍 +``` + +``` +# 瀵硅薄 +# 褰㈠紡涓(鎺ㄨ崘): +heima: + age: 15 + address: Beijing +# 褰㈠紡浜(浜嗚В): +heima: {age: 15,address: Beijing} +``` + +``` +# 鏁扮粍 +# 褰㈠紡涓(鎺ㄨ崘): +address: + - 椤轰箟 + - 鏄屽钩 +# 褰㈠紡浜(浜嗚В): +address: [椤轰箟,鏄屽钩] +``` + +> 灏忔彁绀猴細 +> +> 1 涔﹀啓yaml鍒囪`:` 鍚庨潰瑕佸姞涓涓┖鏍 +> +> 2 濡傛灉闇瑕佸皢澶氭yaml閰嶇疆鏀惧湪涓涓枃浠朵腑锛屼腑闂磋浣跨敤`---`鍒嗛殧 +> +> 3 涓嬮潰鏄竴涓獃aml杞琷son鐨勭綉绔欙紝鍙互閫氳繃瀹冮獙璇亂aml鏄惁涔﹀啓姝g‘ +> +> https://www.json2yaml.com/convert-yaml-to-json + +## 3.3 璧勬簮绠$悊鏂瑰紡 + +- 鍛戒护寮忓璞$鐞嗭細鐩存帴浣跨敤鍛戒护鍘绘搷浣渒ubernetes璧勬簮 + + `kubectl run nginx-pod --image=nginx:1.17.1 --port=80` + +- 鍛戒护寮忓璞¢厤缃細閫氳繃鍛戒护閰嶇疆鍜岄厤缃枃浠跺幓鎿嶄綔kubernetes璧勬簮 + + `kubectl create/patch -f nginx-pod.yaml` + +- 澹版槑寮忓璞¢厤缃細閫氳繃apply鍛戒护鍜岄厤缃枃浠跺幓鎿嶄綔kubernetes璧勬簮 + + `kubectl apply -f nginx-pod.yaml` + +| 绫诲瀷 | 鎿嶄綔瀵硅薄 | 閫傜敤鐜 | 浼樼偣 | 缂虹偣 | +| :------------- | :------- | :------- | :------------- | :------------------------------- | +| 鍛戒护寮忓璞$鐞 | 瀵硅薄 | 娴嬭瘯 | 绠鍗 | 鍙兘鎿嶄綔娲诲姩瀵硅薄锛屾棤娉曞璁°佽窡韪 | +| 鍛戒护寮忓璞¢厤缃 | 鏂囦欢 | 寮鍙 | 鍙互瀹¤銆佽窡韪 | 椤圭洰澶ф椂锛岄厤缃枃浠跺锛屾搷浣滈夯鐑 | +| 澹版槑寮忓璞¢厤缃 | 鐩綍 | 寮鍙 | 鏀寔鐩綍鎿嶄綔 | 鎰忓鎯呭喌涓嬮毦浠ヨ皟璇 | + +### 3.3.1 鍛戒护寮忓璞$鐞 + +**kubectl鍛戒护** + +kubectl鏄痥ubernetes闆嗙兢鐨勫懡浠よ宸ュ叿锛岄氳繃瀹冭兘澶熷闆嗙兢鏈韩杩涜绠$悊锛屽苟鑳藉鍦ㄩ泦缇や笂杩涜瀹瑰櫒鍖栧簲鐢ㄧ殑瀹夎閮ㄧ讲銆俴ubectl鍛戒护鐨勮娉曞涓嬶細 + +``` +kubectl [command] [type] [name] [flags] +``` + +**comand**锛氭寚瀹氳瀵硅祫婧愭墽琛岀殑鎿嶄綔锛屼緥濡俢reate銆乬et銆乨elete + +**type**锛氭寚瀹氳祫婧愮被鍨嬶紝姣斿deployment銆乸od銆乻ervice + +**name**锛氭寚瀹氳祫婧愮殑鍚嶇О锛屽悕绉板ぇ灏忓啓鏁忔劅 + +**flags**锛氭寚瀹氶澶栫殑鍙夊弬鏁 + +```shell +# 鏌ョ湅鎵鏈塸od +kubectl get pod + +# 鏌ョ湅鏌愪釜pod +kubectl get pod pod_name + +# 鏌ョ湅鏌愪釜pod,浠aml鏍煎紡灞曠ず缁撴灉 +kubectl get pod pod_name -o yaml +``` + +**璧勬簮绫诲瀷** + +kubernetes涓墍鏈夌殑鍐呭閮芥娊璞′负璧勬簮锛屽彲浠ラ氳繃涓嬮潰鐨勫懡浠よ繘琛屾煡鐪: + +``` +kubectl api-resources +``` + +缁忓父浣跨敤鐨勮祫婧愭湁涓嬮潰杩欎簺锛 + +| 璧勬簮鍒嗙被 | 璧勬簮鍚嶇О | 缂╁啓 | 璧勬簮浣滅敤 | +| :------------ | :----------------------- | :------ | :-------------- | +| 闆嗙兢绾у埆璧勬簮 | nodes | no | 闆嗙兢缁勬垚閮ㄥ垎 | +| namespaces | ns | 闅旂Pod | | +| pod璧勬簮 | pods | po | 瑁呰浇瀹瑰櫒 | +| pod璧勬簮鎺у埗鍣 | replicationcontrollers | rc | 鎺у埗pod璧勬簮 | +| | replicasets | rs | 鎺у埗pod璧勬簮 | +| | deployments | deploy | 鎺у埗pod璧勬簮 | +| | daemonsets | ds | 鎺у埗pod璧勬簮 | +| | jobs | | 鎺у埗pod璧勬簮 | +| | cronjobs | cj | 鎺у埗pod璧勬簮 | +| | horizontalpodautoscalers | hpa | 鎺у埗pod璧勬簮 | +| | statefulsets | sts | 鎺у埗pod璧勬簮 | +| 鏈嶅姟鍙戠幇璧勬簮 | services | svc | 缁熶竴pod瀵瑰鎺ュ彛 | +| | ingress | ing | 缁熶竴pod瀵瑰鎺ュ彛 | +| 瀛樺偍璧勬簮 | volumeattachments | | 瀛樺偍 | +| | persistentvolumes | pv | 瀛樺偍 | +| | persistentvolumeclaims | pvc | 瀛樺偍 | +| 閰嶇疆璧勬簮 | configmaps | cm | 閰嶇疆 | +| | secrets | | 閰嶇疆 | + +**鎿嶄綔** + +kubernetes鍏佽瀵硅祫婧愯繘琛屽绉嶆搷浣滐紝鍙互閫氳繃--help鏌ョ湅璇︾粏鐨勬搷浣滃懡浠 + +``` +kubectl --help +``` + +缁忓父浣跨敤鐨勬搷浣滄湁涓嬮潰杩欎簺锛 + +| 鍛戒护鍒嗙被 | 鍛戒护 | 缈昏瘧 | 鍛戒护浣滅敤 | +| :--------- | :----------- | :-------------------------- | :--------------------------- | +| 鍩烘湰鍛戒护 | create | 鍒涘缓 | 鍒涘缓涓涓祫婧 | +| | edit | 缂栬緫 | 缂栬緫涓涓祫婧 | +| | get | 鑾峰彇 | 鑾峰彇涓涓祫婧 | +| | patch | 鏇存柊 | 鏇存柊涓涓祫婧 | +| | delete | 鍒犻櫎 | 鍒犻櫎涓涓祫婧 | +| | explain | 瑙i噴 | 灞曠ず璧勬簮鏂囨。 | +| 杩愯鍜岃皟璇 | run | 杩愯 | 鍦ㄩ泦缇や腑杩愯涓涓寚瀹氱殑闀滃儚 | +| | expose | 鏆撮湶 | 鏆撮湶璧勬簮涓篠ervice | +| | describe | 鎻忚堪 | 鏄剧ず璧勬簮鍐呴儴淇℃伅 | +| | logs | 鏃ュ織杈撳嚭瀹瑰櫒鍦 pod 涓殑鏃ュ織 | 杈撳嚭瀹瑰櫒鍦 pod 涓殑鏃ュ織 | +| | attach | 缂犵粫杩涘叆杩愯涓殑瀹瑰櫒 | 杩涘叆杩愯涓殑瀹瑰櫒 | +| | exec | 鎵ц瀹瑰櫒涓殑涓涓懡浠 | 鎵ц瀹瑰櫒涓殑涓涓懡浠 | +| | cp | 澶嶅埗 | 鍦≒od鍐呭澶嶅埗鏂囦欢 | +| | rollout | 棣栨灞曠ず | 绠$悊璧勬簮鐨勫彂甯 | +| | scale | 瑙勬ā | 鎵(缂)瀹筆od鐨勬暟閲 | +| | autoscale | 鑷姩璋冩暣 | 鑷姩璋冩暣Pod鐨勬暟閲 | +| 楂樼骇鍛戒护 | apply | rc | 閫氳繃鏂囦欢瀵硅祫婧愯繘琛岄厤缃 | +| | label | 鏍囩 | 鏇存柊璧勬簮涓婄殑鏍囩 | +| 鍏朵粬鍛戒护 | cluster-info | 闆嗙兢淇℃伅 | 鏄剧ず闆嗙兢淇℃伅 | +| | version | 鐗堟湰 | 鏄剧ず褰撳墠Server鍜孋lient鐨勭増鏈 | + +涓嬮潰浠ヤ竴涓猲amespace / pod鐨勫垱寤哄拰鍒犻櫎绠鍗曟紨绀轰笅鍛戒护鐨勪娇鐢細 + +```shell +# 鍒涘缓涓涓猲amespace +[root@master ~]# kubectl create namespace dev +namespace/dev created + +# 鑾峰彇namespace +[root@master ~]# kubectl get ns +NAME STATUS AGE +default Active 21h +dev Active 21s +kube-node-lease Active 21h +kube-public Active 21h +kube-system Active 21h + +# 鍦ㄦnamespace涓嬪垱寤哄苟杩愯涓涓猲ginx鐨凱od +[root@master ~]# kubectl run pod --image=nginx:latest -n dev +kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead. +deployment.apps/pod created + +# 鏌ョ湅鏂板垱寤虹殑pod +[root@master ~]# kubectl get pod -n dev +NAME READY STATUS RESTARTS AGE +pod 1/1 Running 0 21s + +# 鍒犻櫎鎸囧畾鐨刾od +[root@master ~]# kubectl delete pod pod-864f9875b9-pcw7x +pod "pod" deleted + +# 鍒犻櫎鎸囧畾鐨刵amespace +[root@master ~]# kubectl delete ns dev +namespace "dev" deleted +``` + +### 3.3.2 鍛戒护寮忓璞¢厤缃 + +鍛戒护寮忓璞¢厤缃氨鏄娇鐢ㄥ懡浠ら厤鍚堥厤缃枃浠朵竴璧锋潵鎿嶄綔kubernetes璧勬簮銆 + +1锛 鍒涘缓涓涓猲ginxpod.yaml锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: v1 +kind: Namespace +metadata: + name: dev + +--- + +apiVersion: v1 +kind: Pod +metadata: + name: nginxpod + namespace: dev +spec: + containers: + - name: nginx-containers + image: nginx:latest +``` + +2锛夋墽琛宑reate鍛戒护锛屽垱寤鸿祫婧愶細 + +```yaml +[root@master ~]# kubectl create -f nginxpod.yaml +namespace/dev created +pod/nginxpod created +``` + +姝ゆ椂鍙戠幇鍒涘缓浜嗕袱涓祫婧愬璞★紝鍒嗗埆鏄痭amespace鍜宲od + +3锛夋墽琛実et鍛戒护锛屾煡鐪嬭祫婧愶細 + +```shell +[root@master ~]# kubectl get -f nginxpod.yaml +NAME STATUS AGE +namespace/dev Active 18s + +NAME READY STATUS RESTARTS AGE +pod/nginxpod 1/1 Running 0 17s +``` + +杩欐牱灏辨樉绀轰簡涓や釜璧勬簮瀵硅薄鐨勪俊鎭 + +4锛夋墽琛宒elete鍛戒护锛屽垹闄よ祫婧愶細 + +```shell +[root@master ~]# kubectl delete -f nginxpod.yaml +namespace "dev" deleted +pod "nginxpod" deleted +``` + +姝ゆ椂鍙戠幇涓や釜璧勬簮瀵硅薄琚垹闄や簡 + +``` +鎬荤粨: + 鍛戒护寮忓璞¢厤缃殑鏂瑰紡鎿嶄綔璧勬簮锛屽彲浠ョ畝鍗曠殑璁や负锛氬懡浠 + yaml閰嶇疆鏂囦欢锛堥噷闈㈡槸鍛戒护闇瑕佺殑鍚勭鍙傛暟锛 +``` + +### 3.3.3 澹版槑寮忓璞¢厤缃 + +澹版槑寮忓璞¢厤缃窡鍛戒护寮忓璞¢厤缃緢鐩镐技锛屼絾鏄畠鍙湁涓涓懡浠pply銆 + +```shell +# 棣栧厛鎵ц涓娆ubectl apply -f yaml鏂囦欢锛屽彂鐜板垱寤轰簡璧勬簮 +[root@master ~]# kubectl apply -f nginxpod.yaml +namespace/dev created +pod/nginxpod created + +# 鍐嶆鎵ц涓娆ubectl apply -f yaml鏂囦欢锛屽彂鐜拌璧勬簮娌℃湁鍙樺姩 +[root@master ~]# kubectl apply -f nginxpod.yaml +namespace/dev unchanged +pod/nginxpod unchanged +``` + +``` +鎬荤粨: + 鍏跺疄澹版槑寮忓璞¢厤缃氨鏄娇鐢╝pply鎻忚堪涓涓祫婧愭渶缁堢殑鐘舵侊紙鍦▂aml涓畾涔夌姸鎬侊級 + 浣跨敤apply鎿嶄綔璧勬簮锛 + 濡傛灉璧勬簮涓嶅瓨鍦紝灏卞垱寤猴紝鐩稿綋浜 kubectl create + 濡傛灉璧勬簮宸插瓨鍦紝灏辨洿鏂帮紝鐩稿綋浜 kubectl patch +``` + +> 鎵╁睍锛歬ubectl鍙互鍦╪ode鑺傜偣涓婅繍琛屽悧 ? + +kubectl鐨勮繍琛屾槸闇瑕佽繘琛岄厤缃殑锛屽畠鐨勯厤缃枃浠舵槸$HOME/.kube锛屽鏋滄兂瑕佸湪node鑺傜偣杩愯姝ゅ懡浠わ紝闇瑕佸皢master涓婄殑.kube鏂囦欢澶嶅埗鍒皀ode鑺傜偣涓婏紝鍗冲湪master鑺傜偣涓婃墽琛屼笅闈㈡搷浣滐細 + +```shell +scp -r HOME/.kube node1: HOME/ +``` + +> 浣跨敤鎺ㄨ崘: 涓夌鏂瑰紡搴旇鎬庝箞鐢 ? + +鍒涘缓/鏇存柊璧勬簮 浣跨敤澹版槑寮忓璞¢厤缃 kubectl apply -f XXX.yaml + +鍒犻櫎璧勬簮 浣跨敤鍛戒护寮忓璞¢厤缃 kubectl delete -f XXX.yaml + +鏌ヨ璧勬簮 浣跨敤鍛戒护寮忓璞$鐞 kubectl get(describe) 璧勬簮鍚嶇О + +# 4. 瀹炴垬鍏ラ棬 + +鏈珷鑺傚皢浠嬬粛濡備綍鍦╧ubernetes闆嗙兢涓儴缃蹭竴涓猲ginx鏈嶅姟锛屽苟涓旇兘澶熷鍏惰繘琛岃闂 + +## 4.1 Namespace + +Namespace鏄痥ubernetes绯荤粺涓殑涓绉嶉潪甯搁噸瑕佽祫婧愶紝瀹冪殑涓昏浣滅敤鏄敤鏉ュ疄鐜**澶氬鐜鐨勮祫婧愰殧绂**鎴栬**澶氱鎴风殑璧勬簮闅旂**銆 + +榛樿鎯呭喌涓嬶紝kubernetes闆嗙兢涓殑鎵鏈夌殑Pod閮芥槸鍙互鐩镐簰璁块棶鐨勩備絾鏄湪瀹為檯涓紝鍙兘涓嶆兂璁╀袱涓狿od涔嬮棿杩涜浜掔浉鐨勮闂紝閭f鏃跺氨鍙互灏嗕袱涓狿od鍒掑垎鍒颁笉鍚岀殑namespace涓嬨俴ubernetes閫氳繃灏嗛泦缇ゅ唴閮ㄧ殑璧勬簮鍒嗛厤鍒颁笉鍚岀殑Namespace涓紝鍙互褰㈡垚閫昏緫涓婄殑"缁"锛屼互鏂逛究涓嶅悓鐨勭粍鐨勮祫婧愯繘琛岄殧绂讳娇鐢ㄥ拰绠$悊銆 + +鍙互閫氳繃kubernetes鐨勬巿鏉冩満鍒讹紝灏嗕笉鍚岀殑namespace浜ょ粰涓嶅悓绉熸埛杩涜绠$悊锛岃繖鏍峰氨瀹炵幇浜嗗绉熸埛鐨勮祫婧愰殧绂汇傛鏃惰繕鑳界粨鍚坘ubernetes鐨勮祫婧愰厤棰濇満鍒讹紝闄愬畾涓嶅悓绉熸埛鑳藉崰鐢ㄧ殑璧勬簮锛屼緥濡侰PU浣跨敤閲忋佸唴瀛樹娇鐢ㄩ噺绛夌瓑锛屾潵瀹炵幇绉熸埛鍙敤璧勬簮鐨勭鐞嗐 + +![image-20200407100850484](Kubenetes.assets/image-20200407100850484.png) + +kubernetes鍦ㄩ泦缇ゅ惎鍔ㄤ箣鍚庯紝浼氶粯璁ゅ垱寤哄嚑涓猲amespace + + + +```shell +[root@master ~]# kubectl get namespace +NAME STATUS AGE +default Active 45h # 鎵鏈夋湭鎸囧畾Namespace鐨勫璞¢兘浼氳鍒嗛厤鍦╠efault鍛藉悕绌洪棿 +kube-node-lease Active 45h # 闆嗙兢鑺傜偣涔嬮棿鐨勫績璺崇淮鎶わ紝v1.13寮濮嬪紩鍏 +kube-public Active 45h # 姝ゅ懡鍚嶇┖闂翠笅鐨勮祫婧愬彲浠ヨ鎵鏈変汉璁块棶锛堝寘鎷湭璁よ瘉鐢ㄦ埛锛 +kube-system Active 45h # 鎵鏈夌敱Kubernetes绯荤粺鍒涘缓鐨勮祫婧愰兘澶勪簬杩欎釜鍛藉悕绌洪棿 +``` + +涓嬮潰鏉ョ湅namespace璧勬簮鐨勫叿浣撴搷浣滐細 + +**鏌ョ湅** + +```shell +# 1 鏌ョ湅鎵鏈夌殑ns 鍛戒护锛歬ubectl get ns +[root@master ~]# kubectl get ns +NAME STATUS AGE +default Active 45h +kube-node-lease Active 45h +kube-public Active 45h +kube-system Active 45h + +# 2 鏌ョ湅鎸囧畾鐨刵s 鍛戒护锛歬ubectl get ns ns鍚嶇О +[root@master ~]# kubectl get ns default +NAME STATUS AGE +default Active 45h + +# 3 鎸囧畾杈撳嚭鏍煎紡 鍛戒护锛歬ubectl get ns ns鍚嶇О -o 鏍煎紡鍙傛暟 +# kubernetes鏀寔鐨勬牸寮忔湁寰堝锛屾瘮杈冨父瑙佺殑鏄痺ide銆乯son銆亂aml +[root@master ~]# kubectl get ns default -o yaml +apiVersion: v1 +kind: Namespace +metadata: + creationTimestamp: "2021-05-08T04:44:16Z" + name: default + resourceVersion: "151" + selfLink: /api/v1/namespaces/default + uid: 7405f73a-e486-43d4-9db6-145f1409f090 +spec: + finalizers: + - kubernetes +status: + phase: Active + +# 4 鏌ョ湅ns璇︽儏 鍛戒护锛歬ubectl describe ns ns鍚嶇О +[root@master ~]# kubectl describe ns default +Name: default +Labels: +Annotations: +Status: Active # Active 鍛藉悕绌洪棿姝e湪浣跨敤涓 Terminating 姝e湪鍒犻櫎鍛藉悕绌洪棿 + +# ResourceQuota 閽堝namespace鍋氱殑璧勬簮闄愬埗 +# LimitRange閽堝namespace涓殑姣忎釜缁勪欢鍋氱殑璧勬簮闄愬埗 +No resource quota. +No LimitRange resource. +``` + +**鍒涘缓** + +```shell +# 鍒涘缓namespace +[root@master ~]# kubectl create ns dev +namespace/dev created +``` + +**鍒犻櫎** + +```shell +# 鍒犻櫎namespace +[root@master ~]# kubectl delete ns dev +namespace "dev" deleted +``` + +**閰嶇疆鏂瑰紡** + +棣栧厛鍑嗗涓涓獃aml鏂囦欢锛歯s-dev.yaml + +```yaml +apiVersion: v1 +kind: Namespace +metadata: + name: dev +``` + +鐒跺悗灏卞彲浠ユ墽琛屽搴旂殑鍒涘缓鍜屽垹闄ゅ懡浠や簡锛 + +鍒涘缓锛歬ubectl create -f ns-dev.yaml + +鍒犻櫎锛歬ubectl delete -f ns-dev.yaml + +## 4.2 Pod + +Pod鏄痥ubernetes闆嗙兢杩涜绠$悊鐨勬渶灏忓崟鍏冿紝绋嬪簭瑕佽繍琛屽繀椤婚儴缃插湪瀹瑰櫒涓紝鑰屽鍣ㄥ繀椤诲瓨鍦ㄤ簬Pod涓 + +Pod鍙互璁や负鏄鍣ㄧ殑灏佽锛屼竴涓狿od涓彲浠ュ瓨鍦ㄤ竴涓垨鑰呭涓鍣ㄣ + +![image-20200407121501907](Kubenetes.assets/image-20200407121501907.png) + +kubernetes鍦ㄩ泦缇ゅ惎鍔ㄤ箣鍚庯紝闆嗙兢涓殑鍚勪釜缁勪欢涔熼兘鏄互Pod鏂瑰紡杩愯鐨勩傚彲浠ラ氳繃涓嬮潰鍛戒护鏌ョ湅锛 + +```shell +[root@master ~]# kubectl get pod -n kube-system +NAMESPACE NAME READY STATUS RESTARTS AGE +kube-system coredns-6955765f44-68g6v 1/1 Running 0 2d1h +kube-system coredns-6955765f44-cs5r8 1/1 Running 0 2d1h +kube-system etcd-master 1/1 Running 0 2d1h +kube-system kube-apiserver-master 1/1 Running 0 2d1h +kube-system kube-controller-manager-master 1/1 Running 0 2d1h +kube-system kube-flannel-ds-amd64-47r25 1/1 Running 0 2d1h +kube-system kube-flannel-ds-amd64-ls5lh 1/1 Running 0 2d1h +kube-system kube-proxy-685tk 1/1 Running 0 2d1h +kube-system kube-proxy-87spt 1/1 Running 0 2d1h +kube-system kube-scheduler-master 1/1 Running 0 2d1h +``` + +**鍒涘缓骞惰繍琛** + +kubernetes娌℃湁鎻愪緵鍗曠嫭杩愯Pod鐨勫懡浠わ紝閮芥槸閫氳繃Pod鎺у埗鍣ㄦ潵瀹炵幇鐨 + +```shell +# 鍛戒护鏍煎紡锛 kubectl run (pod鎺у埗鍣ㄥ悕绉) [鍙傛暟] +# --image 鎸囧畾Pod鐨勯暅鍍 +# --port 鎸囧畾绔彛 +# --namespace 鎸囧畾namespace +[root@master ~]# kubectl run nginx --image=nginx:latest --port=80 --namespace dev +deployment.apps/nginx created +``` + +**鏌ョ湅pod淇℃伅** + +```shell +# 鏌ョ湅Pod鍩烘湰淇℃伅 +[root@master ~]# kubectl get pods -n dev +NAME READY STATUS RESTARTS AGE +nginx 1/1 Running 0 43s + +# 鏌ョ湅Pod鐨勮缁嗕俊鎭 +[root@master ~]# kubectl describe pod nginx -n dev +Name: nginx +Namespace: dev +Priority: 0 +Node: node1/192.168.5.4 +Start Time: Wed, 08 May 2021 09:29:24 +0800 +Labels: pod-template-hash=5ff7956ff6 + run=nginx +Annotations: +Status: Running +IP: 10.244.1.23 +IPs: + IP: 10.244.1.23 +Controlled By: ReplicaSet/nginx +Containers: + nginx: + Container ID: docker://4c62b8c0648d2512380f4ffa5da2c99d16e05634979973449c98e9b829f6253c + Image: nginx:latest + Image ID: docker-pullable://nginx@sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7 + Port: 80/TCP + Host Port: 0/TCP + State: Running + Started: Wed, 08 May 2021 09:30:01 +0800 + Ready: True + Restart Count: 0 + Environment: + Mounts: + /var/run/secrets/kubernetes.io/serviceaccount from default-token-hwvvw (ro) +Conditions: + Type Status + Initialized True + Ready True + ContainersReady True + PodScheduled True +Volumes: + default-token-hwvvw: + Type: Secret (a volume populated by a Secret) + SecretName: default-token-hwvvw + Optional: false +QoS Class: BestEffort +Node-Selectors: +Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s + node.kubernetes.io/unreachable:NoExecute for 300s +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Scheduled default-scheduler Successfully assigned dev/nginx-5ff7956ff6-fg2db to node1 + Normal Pulling 4m11s kubelet, node1 Pulling image "nginx:latest" + Normal Pulled 3m36s kubelet, node1 Successfully pulled image "nginx:latest" + Normal Created 3m36s kubelet, node1 Created container nginx + Normal Started 3m36s kubelet, node1 Started container nginx +``` + +**璁块棶Pod** + +```shell +# 鑾峰彇podIP +[root@master ~]# kubectl get pods -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE ... +nginx 1/1 Running 0 190s 10.244.1.23 node1 ... + +#璁块棶POD +[root@master ~]# curl http://10.244.1.23:80 + + + + Welcome to nginx! + + +

    Thank you for using nginx.

    + + +``` + +**鍒犻櫎鎸囧畾Pod** + +```shell +# 鍒犻櫎鎸囧畾Pod +[root@master ~]# kubectl delete pod nginx -n dev +pod "nginx" deleted + +# 姝ゆ椂锛屾樉绀哄垹闄od鎴愬姛锛屼絾鏄啀鏌ヨ锛屽彂鐜板張鏂颁骇鐢熶簡涓涓 +[root@master ~]# kubectl get pods -n dev +NAME READY STATUS RESTARTS AGE +nginx 1/1 Running 0 21s + +# 杩欐槸鍥犱负褰撳墠Pod鏄敱Pod鎺у埗鍣ㄥ垱寤虹殑锛屾帶鍒跺櫒浼氱洃鎺od鐘跺喌锛屼竴鏃﹀彂鐜癙od姝讳骸锛屼細绔嬪嵆閲嶅缓 +# 姝ゆ椂瑕佹兂鍒犻櫎Pod锛屽繀椤诲垹闄od鎺у埗鍣 + +# 鍏堟潵鏌ヨ涓涓嬪綋鍓峮amespace涓嬬殑Pod鎺у埗鍣 +[root@master ~]# kubectl get deploy -n dev +NAME READY UP-TO-DATE AVAILABLE AGE +nginx 1/1 1 1 9m7s + +# 鎺ヤ笅鏉ワ紝鍒犻櫎姝odPod鎺у埗鍣 +[root@master ~]# kubectl delete deploy nginx -n dev +deployment.apps "nginx" deleted + +# 绋嶇瓑鐗囧埢锛屽啀鏌ヨPod锛屽彂鐜癙od琚垹闄や簡 +[root@master ~]# kubectl get pods -n dev +No resources found in dev namespace. +``` + +**閰嶇疆鎿嶄綔** + +鍒涘缓涓涓猵od-nginx.yaml锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: nginx + namespace: dev +spec: + containers: + - image: nginx:latest + name: pod + ports: + - name: nginx-port + containerPort: 80 + protocol: TCP +``` + +鐒跺悗灏卞彲浠ユ墽琛屽搴旂殑鍒涘缓鍜屽垹闄ゅ懡浠や簡锛 + +鍒涘缓锛歬ubectl create -f pod-nginx.yaml + +鍒犻櫎锛歬ubectl delete -f pod-nginx.yaml + +## 4.3 Label + +Label鏄痥ubernetes绯荤粺涓殑涓涓噸瑕佹蹇点傚畠鐨勪綔鐢ㄥ氨鏄湪璧勬簮涓婃坊鍔犳爣璇嗭紝鐢ㄦ潵瀵瑰畠浠繘琛屽尯鍒嗗拰閫夋嫨銆 + +Label鐨勭壒鐐癸細 + +- 涓涓狶abel浼氫互key/value閿煎鐨勫舰寮忛檮鍔犲埌鍚勭瀵硅薄涓婏紝濡侼ode銆丳od銆丼ervice绛夌瓑 +- 涓涓祫婧愬璞″彲浠ュ畾涔変换鎰忔暟閲忕殑Label 锛屽悓涓涓狶abel涔熷彲浠ヨ娣诲姞鍒颁换鎰忔暟閲忕殑璧勬簮瀵硅薄涓婂幓 +- Label閫氬父鍦ㄨ祫婧愬璞″畾涔夋椂纭畾锛屽綋鐒朵篃鍙互鍦ㄥ璞″垱寤哄悗鍔ㄦ佹坊鍔犳垨鑰呭垹闄 + +鍙互閫氳繃Label瀹炵幇璧勬簮鐨勫缁村害鍒嗙粍锛屼互渚跨伒娲汇佹柟渚垮湴杩涜璧勬簮鍒嗛厤銆佽皟搴︺侀厤缃侀儴缃茬瓑绠$悊宸ヤ綔銆 + +> 涓浜涘父鐢ㄧ殑Label 绀轰緥濡備笅锛 +> +> - 鐗堟湰鏍囩锛"version":"release", "version":"stable"...... +> - 鐜鏍囩锛"environment":"dev"锛"environment":"test"锛"environment":"pro" +> - 鏋舵瀯鏍囩锛"tier":"frontend"锛"tier":"backend" + +鏍囩瀹氫箟瀹屾瘯涔嬪悗锛岃繕瑕佽冭檻鍒版爣绛剧殑閫夋嫨锛岃繖灏辫浣跨敤鍒癓abel Selector锛屽嵆锛 + +Label鐢ㄤ簬缁欐煇涓祫婧愬璞″畾涔夋爣璇 + +Label Selector鐢ㄤ簬鏌ヨ鍜岀瓫閫夋嫢鏈夋煇浜涙爣绛剧殑璧勬簮瀵硅薄 + +褰撳墠鏈変袱绉峀abel Selector锛 + +- 鍩轰簬绛夊紡鐨凩abel Selector + + name = slave: 閫夋嫨鎵鏈夊寘鍚獿abel涓璳ey="name"涓攙alue="slave"鐨勫璞 + + env != production: 閫夋嫨鎵鏈夊寘鎷琇abel涓殑key="env"涓攙alue涓嶇瓑浜"production"鐨勫璞 + +- 鍩轰簬闆嗗悎鐨凩abel Selector + + name in (master, slave): 閫夋嫨鎵鏈夊寘鍚獿abel涓殑key="name"涓攙alue="master"鎴"slave"鐨勫璞 + + name not in (frontend): 閫夋嫨鎵鏈夊寘鍚獿abel涓殑key="name"涓攙alue涓嶇瓑浜"frontend"鐨勫璞 + +鏍囩鐨勯夋嫨鏉′欢鍙互浣跨敤澶氫釜锛屾鏃跺皢澶氫釜Label Selector杩涜缁勫悎锛屼娇鐢ㄩ楀彿","杩涜鍒嗛殧鍗冲彲銆備緥濡傦細 + +name=slave锛宔nv!=production + +name not in (frontend)锛宔nv!=production + +**鍛戒护鏂瑰紡** + +```shell +# 涓簆od璧勬簮鎵撴爣绛 +[root@master ~]# kubectl label pod nginx-pod version=1.0 -n dev +pod/nginx-pod labeled + +# 涓簆od璧勬簮鏇存柊鏍囩 +[root@master ~]# kubectl label pod nginx-pod version=2.0 -n dev --overwrite +pod/nginx-pod labeled + +# 鏌ョ湅鏍囩 +[root@master ~]# kubectl get pod nginx-pod -n dev --show-labels +NAME READY STATUS RESTARTS AGE LABELS +nginx-pod 1/1 Running 0 10m version=2.0 + +# 绛涢夋爣绛 +[root@master ~]# kubectl get pod -n dev -l version=2.0 --show-labels +NAME READY STATUS RESTARTS AGE LABELS +nginx-pod 1/1 Running 0 17m version=2.0 +[root@master ~]# kubectl get pod -n dev -l version!=2.0 --show-labels +No resources found in dev namespace. + +#鍒犻櫎鏍囩 +[root@master ~]# kubectl label pod nginx-pod version- -n dev +pod/nginx-pod labeled +``` + +**閰嶇疆鏂瑰紡** + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: nginx + namespace: dev + labels: + version: "3.0" + env: "test" +spec: + containers: + - image: nginx:latest + name: pod + ports: + - name: nginx-port + containerPort: 80 + protocol: TCP +``` + +鐒跺悗灏卞彲浠ユ墽琛屽搴旂殑鏇存柊鍛戒护浜嗭細kubectl apply -f pod-nginx.yaml + +## 4.4 Deployment + +鍦╧ubernetes涓紝Pod鏄渶灏忕殑鎺у埗鍗曞厓锛屼絾鏄痥ubernetes寰堝皯鐩存帴鎺у埗Pod锛屼竴鑸兘鏄氳繃Pod鎺у埗鍣ㄦ潵瀹屾垚鐨勩侾od鎺у埗鍣ㄧ敤浜巔od鐨勭鐞嗭紝纭繚pod璧勬簮绗﹀悎棰勬湡鐨勭姸鎬侊紝褰損od鐨勮祫婧愬嚭鐜版晠闅滄椂锛屼細灏濊瘯杩涜閲嶅惎鎴栭噸寤簆od銆 + +鍦╧ubernetes涓璓od鎺у埗鍣ㄧ殑绉嶇被鏈夊緢澶氾紝鏈珷鑺傚彧浠嬬粛涓绉嶏細Deployment銆 + +![image-20200408193950807](Kubenetes.assets/image-20200408193950807.png) + +**鍛戒护鎿嶄綔** + +```shell +# 鍛戒护鏍煎紡: kubectl create deployment 鍚嶇О [鍙傛暟] +# --image 鎸囧畾pod鐨勯暅鍍 +# --port 鎸囧畾绔彛 +# --replicas 鎸囧畾鍒涘缓pod鏁伴噺 +# --namespace 鎸囧畾namespace +[root@master ~]# kubectl create deploy nginx --image=nginx:latest --port=80 --replicas=3 -n dev +deployment.apps/nginx created + +# 鏌ョ湅鍒涘缓鐨凱od +[root@master ~]# kubectl get pods -n dev +NAME READY STATUS RESTARTS AGE +nginx-5ff7956ff6-6k8cb 1/1 Running 0 19s +nginx-5ff7956ff6-jxfjt 1/1 Running 0 19s +nginx-5ff7956ff6-v6jqw 1/1 Running 0 19s + +# 鏌ョ湅deployment鐨勪俊鎭 +[root@master ~]# kubectl get deploy -n dev +NAME READY UP-TO-DATE AVAILABLE AGE +nginx 3/3 3 3 2m42s + +# UP-TO-DATE锛氭垚鍔熷崌绾х殑鍓湰鏁伴噺 +# AVAILABLE锛氬彲鐢ㄥ壇鏈殑鏁伴噺 +[root@master ~]# kubectl get deploy -n dev -o wide +NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR +nginx 3/3 3 3 2m51s nginx nginx:latest run=nginx + +# 鏌ョ湅deployment鐨勮缁嗕俊鎭 +[root@master ~]# kubectl describe deploy nginx -n dev +Name: nginx +Namespace: dev +CreationTimestamp: Wed, 08 May 2021 11:14:14 +0800 +Labels: run=nginx +Annotations: deployment.kubernetes.io/revision: 1 +Selector: run=nginx +Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable +StrategyType: RollingUpdate +MinReadySeconds: 0 +RollingUpdateStrategy: 25% max unavailable, 25% max surge +Pod Template: + Labels: run=nginx + Containers: + nginx: + Image: nginx:latest + Port: 80/TCP + Host Port: 0/TCP + Environment: + Mounts: + Volumes: +Conditions: + Type Status Reason + ---- ------ ------ + Available True MinimumReplicasAvailable + Progressing True NewReplicaSetAvailable +OldReplicaSets: +NewReplicaSet: nginx-5ff7956ff6 (3/3 replicas created) +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal ScalingReplicaSet 5m43s deployment-controller Scaled up replicaset nginx-5ff7956ff6 to 3 + +# 鍒犻櫎 +[root@master ~]# kubectl delete deploy nginx -n dev +deployment.apps "nginx" deleted +``` + +**閰嶇疆鎿嶄綔** + +鍒涘缓涓涓猟eploy-nginx.yaml锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx + namespace: dev +spec: + replicas: 3 + selector: + matchLabels: + run: nginx + template: + metadata: + labels: + run: nginx + spec: + containers: + - image: nginx:latest + name: nginx + ports: + - containerPort: 80 + protocol: TCP +``` + +鐒跺悗灏卞彲浠ユ墽琛屽搴旂殑鍒涘缓鍜屽垹闄ゅ懡浠や簡锛 + +鍒涘缓锛歬ubectl create -f deploy-nginx.yaml + +鍒犻櫎锛歬ubectl delete -f deploy-nginx.yaml + +## 4.5 Service + +閫氳繃涓婅妭璇剧殑瀛︿範锛屽凡缁忚兘澶熷埄鐢―eployment鏉ュ垱寤轰竴缁凱od鏉ユ彁渚涘叿鏈夐珮鍙敤鎬х殑鏈嶅姟銆 + +铏界劧姣忎釜Pod閮戒細鍒嗛厤涓涓崟鐙殑Pod IP锛岀劧鑰屽嵈瀛樺湪濡備笅涓ら棶棰橈細 + +- Pod IP 浼氶殢鐫Pod鐨勯噸寤轰骇鐢熷彉鍖 +- Pod IP 浠呬粎鏄泦缇ゅ唴鍙鐨勮櫄鎷烮P锛屽閮ㄦ棤娉曡闂 + +杩欐牱瀵逛簬璁块棶杩欎釜鏈嶅姟甯︽潵浜嗛毦搴︺傚洜姝わ紝kubernetes璁捐浜哠ervice鏉ヨВ鍐宠繖涓棶棰樸 + +Service鍙互鐪嬩綔鏄竴缁勫悓绫籔od**瀵瑰鐨勮闂帴鍙**銆傚熷姪Service锛屽簲鐢ㄥ彲浠ユ柟渚垮湴瀹炵幇鏈嶅姟鍙戠幇鍜岃礋杞藉潎琛° + +![image-20200408194716912](Kubenetes.assets/image-20200408194716912.png) + +**鎿嶄綔涓锛氬垱寤洪泦缇ゅ唴閮ㄥ彲璁块棶鐨凷ervice** + + + +```shell +# 鏆撮湶Service +[root@master ~]# kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev +service/svc-nginx1 exposed + +# 鏌ョ湅service +[root@master ~]# kubectl get svc svc-nginx1 -n dev -o wide +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR +svc-nginx1 ClusterIP 10.109.179.231 80/TCP 3m51s run=nginx + +# 杩欓噷浜х敓浜嗕竴涓狢LUSTER-IP锛岃繖灏辨槸service鐨処P锛屽湪Service鐨勭敓鍛藉懆鏈熶腑锛岃繖涓湴鍧鏄笉浼氬彉鍔ㄧ殑 +# 鍙互閫氳繃杩欎釜IP璁块棶褰撳墠service瀵瑰簲鐨凱OD +[root@master ~]# curl 10.109.179.231:80 + + + +Welcome to nginx! + + +

    Welcome to nginx!

    +....... + + +``` + +**鎿嶄綔浜岋細鍒涘缓闆嗙兢澶栭儴涔熷彲璁块棶鐨凷ervice** + +```shell +# 涓婇潰鍒涘缓鐨凷ervice鐨則ype绫诲瀷涓篊lusterIP锛岃繖涓猧p鍦板潃鍙敤闆嗙兢鍐呴儴鍙闂 +# 濡傛灉闇瑕佸垱寤哄閮ㄤ篃鍙互璁块棶鐨凷ervice锛岄渶瑕佷慨鏀箃ype涓篘odePort +[root@master ~]# kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n dev +service/svc-nginx2 exposed + +# 姝ゆ椂鏌ョ湅锛屼細鍙戠幇鍑虹幇浜哊odePort绫诲瀷鐨凷ervice锛岃屼笖鏈変竴瀵筆ort锛80:31928/TC锛 +[root@master ~]# kubectl get svc svc-nginx2 -n dev -o wide +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR +svc-nginx2 NodePort 10.100.94.0 80:31928/TCP 9s run=nginx + +# 鎺ヤ笅鏉ュ氨鍙互閫氳繃闆嗙兢澶栫殑涓绘満璁块棶 鑺傜偣IP:31928璁块棶鏈嶅姟浜 +# 渚嬪鍦ㄧ殑鐢佃剳涓绘満涓婇氳繃娴忚鍣ㄨ闂笅闈㈢殑鍦板潃 +http://192.168.5.4:31928/ +``` + +**鍒犻櫎Service** + +```shell +[root@master ~]# kubectl delete svc svc-nginx-1 -n dev service "svc-nginx-1" deleted +``` + +**閰嶇疆鏂瑰紡** + +鍒涘缓涓涓猻vc-nginx.yaml锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: svc-nginx + namespace: dev +spec: + clusterIP: 10.109.179.231 #鍥哄畾svc鐨勫唴缃慽p + ports: + - port: 80 + protocol: TCP + targetPort: 80 + selector: + run: nginx + type: ClusterIP +``` + +鐒跺悗灏卞彲浠ユ墽琛屽搴旂殑鍒涘缓鍜屽垹闄ゅ懡浠や簡锛 + +鍒涘缓锛歬ubectl create -f svc-nginx.yaml + +鍒犻櫎锛歬ubectl delete -f svc-nginx.yaml + +> **灏忕粨** +> +> 鑷虫锛屽凡缁忔帉鎻′簡Namespace銆丳od銆丏eployment銆丼ervice璧勬簮鐨勫熀鏈搷浣滐紝鏈変簡杩欎簺鎿嶄綔锛屽氨鍙互鍦╧ubernetes闆嗙兢涓疄鐜颁竴涓湇鍔$殑绠鍗曢儴缃插拰璁块棶浜嗭紝浣嗘槸濡傛灉鎯宠鏇村ソ鐨勪娇鐢╧ubernetes锛屽氨闇瑕佹繁鍏ュ涔犺繖鍑犵璧勬簮鐨勭粏鑺傚拰鍘熺悊銆 + + + +# 5. Pod璇﹁В + +## 5.1 Pod浠嬬粛 + +### 5.1.1 Pod缁撴瀯 + +![image-20200407121501907](Kubenetes.assets/image-20200407121501907-1626781151898.png) + +姣忎釜Pod涓兘鍙互鍖呭惈涓涓垨鑰呭涓鍣紝杩欎簺瀹瑰櫒鍙互鍒嗕负涓ょ被锛 + +- 鐢ㄦ埛绋嬪簭鎵鍦ㄧ殑瀹瑰櫒锛屾暟閲忓彲澶氬彲灏 + +- Pause瀹瑰櫒锛岃繖鏄瘡涓狿od閮戒細鏈夌殑涓涓**鏍瑰鍣**锛屽畠鐨勪綔鐢ㄦ湁涓や釜锛 + + - 鍙互浠ュ畠涓轰緷鎹紝璇勪及鏁翠釜Pod鐨勫仴搴风姸鎬 + + - 鍙互鍦ㄦ牴瀹瑰櫒涓婅缃甀p鍦板潃锛屽叾瀹冨鍣ㄩ兘姝p锛圥od IP锛夛紝浠ュ疄鐜癙od鍐呴儴鐨勭綉璺氫俊 + + ``` + 杩欓噷鏄疨od鍐呴儴鐨勯氳锛孭od鐨勪箣闂寸殑閫氳閲囩敤铏氭嫙浜屽眰缃戠粶鎶鏈潵瀹炵幇锛屾垜浠綋鍓嶇幆澧冪敤鐨勬槸Flannel + ``` + +### 5.1.2 Pod瀹氫箟 + +涓嬮潰鏄疨od鐨勮祫婧愭竻鍗曪細 + +```shell +apiVersion: v1 #蹇呴夛紝鐗堟湰鍙凤紝渚嬪v1 +kind: Pod 銆 #蹇呴夛紝璧勬簮绫诲瀷锛屼緥濡 Pod +metadata: 銆 #蹇呴夛紝鍏冩暟鎹 + name: string #蹇呴夛紝Pod鍚嶇О + namespace: string #Pod鎵灞炵殑鍛藉悕绌洪棿,榛樿涓"default" + labels: 銆銆 #鑷畾涔夋爣绛惧垪琛 + - name: string 銆 +spec: #蹇呴夛紝Pod涓鍣ㄧ殑璇︾粏瀹氫箟 + containers: #蹇呴夛紝Pod涓鍣ㄥ垪琛 + - name: string #蹇呴夛紝瀹瑰櫒鍚嶇О + image: string #蹇呴夛紝瀹瑰櫒鐨勯暅鍍忓悕绉 + imagePullPolicy: [ Always|Never|IfNotPresent ] #鑾峰彇闀滃儚鐨勭瓥鐣 + command: [string] #瀹瑰櫒鐨勫惎鍔ㄥ懡浠ゅ垪琛紝濡備笉鎸囧畾锛屼娇鐢ㄦ墦鍖呮椂浣跨敤鐨勫惎鍔ㄥ懡浠 + args: [string] #瀹瑰櫒鐨勫惎鍔ㄥ懡浠ゅ弬鏁板垪琛 + workingDir: string #瀹瑰櫒鐨勫伐浣滅洰褰 + volumeMounts: #鎸傝浇鍒板鍣ㄥ唴閮ㄧ殑瀛樺偍鍗烽厤缃 + - name: string #寮曠敤pod瀹氫箟鐨勫叡浜瓨鍌ㄥ嵎鐨勫悕绉帮紝闇鐢╲olumes[]閮ㄥ垎瀹氫箟鐨勭殑鍗峰悕 + mountPath: string #瀛樺偍鍗峰湪瀹瑰櫒鍐卪ount鐨勭粷瀵硅矾寰勶紝搴斿皯浜512瀛楃 + readOnly: boolean #鏄惁涓哄彧璇绘ā寮 + ports: #闇瑕佹毚闇茬殑绔彛搴撳彿鍒楄〃 + - name: string #绔彛鐨勫悕绉 + containerPort: int #瀹瑰櫒闇瑕佺洃鍚殑绔彛鍙 + hostPort: int #瀹瑰櫒鎵鍦ㄤ富鏈洪渶瑕佺洃鍚殑绔彛鍙凤紝榛樿涓嶤ontainer鐩稿悓 + protocol: string #绔彛鍗忚锛屾敮鎸乀CP鍜孶DP锛岄粯璁CP + env: #瀹瑰櫒杩愯鍓嶉渶璁剧疆鐨勭幆澧冨彉閲忓垪琛 + - name: string #鐜鍙橀噺鍚嶇О + value: string #鐜鍙橀噺鐨勫 + resources: #璧勬簮闄愬埗鍜岃姹傜殑璁剧疆 + limits: #璧勬簮闄愬埗鐨勮缃 + cpu: string #Cpu鐨勯檺鍒讹紝鍗曚綅涓篶ore鏁帮紝灏嗙敤浜巇ocker run --cpu-shares鍙傛暟 + memory: string #鍐呭瓨闄愬埗锛屽崟浣嶅彲浠ヤ负Mib/Gib锛屽皢鐢ㄤ簬docker run --memory鍙傛暟 + requests: #璧勬簮璇锋眰鐨勮缃 + cpu: string #Cpu璇锋眰锛屽鍣ㄥ惎鍔ㄧ殑鍒濆鍙敤鏁伴噺 + memory: string #鍐呭瓨璇锋眰,瀹瑰櫒鍚姩鐨勫垵濮嬪彲鐢ㄦ暟閲 + lifecycle: #鐢熷懡鍛ㄦ湡閽╁瓙 + postStart: #瀹瑰櫒鍚姩鍚庣珛鍗虫墽琛屾閽╁瓙,濡傛灉鎵ц澶辫触,浼氭牴鎹噸鍚瓥鐣ヨ繘琛岄噸鍚 + preStop: #瀹瑰櫒缁堟鍓嶆墽琛屾閽╁瓙,鏃犺缁撴灉濡備綍,瀹瑰櫒閮戒細缁堟 + livenessProbe: #瀵筆od鍐呭悇瀹瑰櫒鍋ュ悍妫鏌ョ殑璁剧疆锛屽綋鎺㈡祴鏃犲搷搴斿嚑娆″悗灏嗚嚜鍔ㄩ噸鍚瀹瑰櫒 + exec: 銆 #瀵筆od瀹瑰櫒鍐呮鏌ユ柟寮忚缃负exec鏂瑰紡 + command: [string] #exec鏂瑰紡闇瑕佸埗瀹氱殑鍛戒护鎴栬剼鏈 + httpGet: #瀵筆od鍐呬釜瀹瑰櫒鍋ュ悍妫鏌ユ柟娉曡缃负HttpGet锛岄渶瑕佸埗瀹歅ath銆乸ort + path: string + port: number + host: string + scheme: string + HttpHeaders: + - name: string + value: string + tcpSocket: #瀵筆od鍐呬釜瀹瑰櫒鍋ュ悍妫鏌ユ柟寮忚缃负tcpSocket鏂瑰紡 + port: number + initialDelaySeconds: 0 #瀹瑰櫒鍚姩瀹屾垚鍚庨娆℃帰娴嬬殑鏃堕棿锛屽崟浣嶄负绉 + timeoutSeconds: 0 銆銆 #瀵瑰鍣ㄥ仴搴锋鏌ユ帰娴嬬瓑寰呭搷搴旂殑瓒呮椂鏃堕棿锛屽崟浣嶇锛岄粯璁1绉 + periodSeconds: 0 銆銆 #瀵瑰鍣ㄧ洃鎺ф鏌ョ殑瀹氭湡鎺㈡祴鏃堕棿璁剧疆锛屽崟浣嶇锛岄粯璁10绉掍竴娆 + successThreshold: 0 + failureThreshold: 0 + securityContext: + privileged: false + restartPolicy: [Always | Never | OnFailure] #Pod鐨勯噸鍚瓥鐣 + nodeName: #璁剧疆NodeName琛ㄧず灏嗚Pod璋冨害鍒版寚瀹氬埌鍚嶇О鐨刵ode鑺傜偣涓 + nodeSelector: obeject #璁剧疆NodeSelector琛ㄧず灏嗚Pod璋冨害鍒板寘鍚繖涓猯abel鐨刵ode涓 + imagePullSecrets: #Pull闀滃儚鏃朵娇鐢ㄧ殑secret鍚嶇О锛屼互key锛歴ecretkey鏍煎紡鎸囧畾 + - name: string + hostNetwork: false #鏄惁浣跨敤涓绘満缃戠粶妯″紡锛岄粯璁や负false锛屽鏋滆缃负true锛岃〃绀轰娇鐢ㄥ涓绘満缃戠粶 + volumes: #鍦ㄨpod涓婂畾涔夊叡浜瓨鍌ㄥ嵎鍒楄〃 + - name: string #鍏变韩瀛樺偍鍗峰悕绉 锛坴olumes绫诲瀷鏈夊緢澶氱锛 + emptyDir: {} #绫诲瀷涓篹mtyDir鐨勫瓨鍌ㄥ嵎锛屼笌Pod鍚岀敓鍛藉懆鏈熺殑涓涓复鏃剁洰褰曘備负绌哄 + hostPath: string #绫诲瀷涓篽ostPath鐨勫瓨鍌ㄥ嵎锛岃〃绀烘寕杞絇od鎵鍦ㄥ涓绘満鐨勭洰褰 + path: string 銆銆 #Pod鎵鍦ㄥ涓绘満鐨勭洰褰曪紝灏嗚鐢ㄤ簬鍚屾湡涓璵ount鐨勭洰褰 + secret: 銆銆銆#绫诲瀷涓簊ecret鐨勫瓨鍌ㄥ嵎锛屾寕杞介泦缇や笌瀹氫箟鐨剆ecret瀵硅薄鍒板鍣ㄥ唴閮 + scretname: string + items: + - key: string + path: string + configMap: #绫诲瀷涓篶onfigMap鐨勫瓨鍌ㄥ嵎锛屾寕杞介瀹氫箟鐨刢onfigMap瀵硅薄鍒板鍣ㄥ唴閮 + name: string + items: + - key: string + path: string +``` + +```shell +#灏忔彁绀猴細 +# 鍦ㄨ繖閲岋紝鍙氳繃涓涓懡浠ゆ潵鏌ョ湅姣忕璧勬簮鐨勫彲閰嶇疆椤 +# kubectl explain 璧勬簮绫诲瀷 鏌ョ湅鏌愮璧勬簮鍙互閰嶇疆鐨勪竴绾у睘鎬 +# kubectl explain 璧勬簮绫诲瀷.灞炴 鏌ョ湅灞炴х殑瀛愬睘鎬 +[root@k8s-master01 ~]# kubectl explain pod +KIND: Pod +VERSION: v1 +FIELDS: + apiVersion + kind + metadata + spec + status + +[root@k8s-master01 ~]# kubectl explain pod.metadata +KIND: Pod +VERSION: v1 +RESOURCE: metadata +FIELDS: + annotations + clusterName + creationTimestamp + deletionGracePeriodSeconds + deletionTimestamp + finalizers <[]string> + generateName + generation + labels + managedFields <[]Object> + name + namespace + ownerReferences <[]Object> + resourceVersion + selfLink + uid +``` + +鍦╧ubernetes涓熀鏈墍鏈夎祫婧愮殑涓绾у睘鎬ч兘鏄竴鏍风殑锛屼富瑕佸寘鍚5閮ㄥ垎锛 + +- apiVersion 鐗堟湰锛岀敱kubernetes鍐呴儴瀹氫箟锛岀増鏈彿蹇呴』鍙互鐢 kubectl api-versions 鏌ヨ鍒 +- kind 绫诲瀷锛岀敱kubernetes鍐呴儴瀹氫箟锛岀増鏈彿蹇呴』鍙互鐢 kubectl api-resources 鏌ヨ鍒 +- metadata 鍏冩暟鎹紝涓昏鏄祫婧愭爣璇嗗拰璇存槑锛屽父鐢ㄧ殑鏈塶ame銆乶amespace銆乴abels绛 +- spec 鎻忚堪锛岃繖鏄厤缃腑鏈閲嶈鐨勪竴閮ㄥ垎锛岄噷闈㈡槸瀵瑰悇绉嶈祫婧愰厤缃殑璇︾粏鎻忚堪 +- status 鐘舵佷俊鎭紝閲岄潰鐨勫唴瀹逛笉闇瑕佸畾涔夛紝鐢眐ubernetes鑷姩鐢熸垚 + +鍦ㄤ笂闈㈢殑灞炴т腑锛宻pec鏄帴涓嬫潵鐮旂┒鐨勯噸鐐癸紝缁х画鐪嬩笅瀹冪殑甯歌瀛愬睘鎬: + +- containers <[]Object> 瀹瑰櫒鍒楄〃锛岀敤浜庡畾涔夊鍣ㄧ殑璇︾粏淇℃伅 +- nodeName 鏍规嵁nodeName鐨勫煎皢pod璋冨害鍒版寚瀹氱殑Node鑺傜偣涓 +- nodeSelector 鏍规嵁NodeSelector涓畾涔夌殑淇℃伅閫夋嫨灏嗚Pod璋冨害鍒板寘鍚繖浜沴abel鐨凬ode 涓 +- hostNetwork 鏄惁浣跨敤涓绘満缃戠粶妯″紡锛岄粯璁や负false锛屽鏋滆缃负true锛岃〃绀轰娇鐢ㄥ涓绘満缃戠粶 +- volumes <[]Object> 瀛樺偍鍗凤紝鐢ㄤ簬瀹氫箟Pod涓婇潰鎸傚湪鐨勫瓨鍌ㄤ俊鎭 +- restartPolicy 閲嶅惎绛栫暐锛岃〃绀篜od鍦ㄩ亣鍒版晠闅滅殑鏃跺欑殑澶勭悊绛栫暐 + +## 5.2 Pod閰嶇疆 + +鏈皬鑺備富瑕佹潵鐮旂┒`pod.spec.containers`灞炴э紝杩欎篃鏄痯od閰嶇疆涓渶涓哄叧閿殑涓椤归厤缃 + + + +```shell +[root@k8s-master01 ~]# kubectl explain pod.spec.containers +KIND: Pod +VERSION: v1 +RESOURCE: containers <[]Object> # 鏁扮粍锛屼唬琛ㄥ彲浠ユ湁澶氫釜瀹瑰櫒 +FIELDS: + name # 瀹瑰櫒鍚嶇О + image # 瀹瑰櫒闇瑕佺殑闀滃儚鍦板潃 + imagePullPolicy # 闀滃儚鎷夊彇绛栫暐 + command <[]string> # 瀹瑰櫒鐨勫惎鍔ㄥ懡浠ゅ垪琛紝濡備笉鎸囧畾锛屼娇鐢ㄦ墦鍖呮椂浣跨敤鐨勫惎鍔ㄥ懡浠 + args <[]string> # 瀹瑰櫒鐨勫惎鍔ㄥ懡浠ら渶瑕佺殑鍙傛暟鍒楄〃 + env <[]Object> # 瀹瑰櫒鐜鍙橀噺鐨勯厤缃 + ports <[]Object> # 瀹瑰櫒闇瑕佹毚闇茬殑绔彛鍙峰垪琛 + resources # 璧勬簮闄愬埗鍜岃祫婧愯姹傜殑璁剧疆 +``` + +### 5.2.1 鍩烘湰閰嶇疆 + +鍒涘缓pod-base.yaml鏂囦欢锛屽唴瀹瑰涓嬶細 + + + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-base + namespace: dev + labels: + user: heima +spec: + containers: + - name: nginx + image: nginx:1.17.1 + - name: busybox + image: busybox:1.30 +``` + +![image-20210617223823675](Kubenetes.assets/image-20210617223823675-1626781695411.png) + +涓婇潰瀹氫箟浜嗕竴涓瘮杈冪畝鍗昉od鐨勯厤缃紝閲岄潰鏈変袱涓鍣細 + +- nginx锛氱敤1.17.1鐗堟湰鐨刵ginx闀滃儚鍒涘缓锛岋紙nginx鏄竴涓交閲忕骇web瀹瑰櫒锛 +- busybox锛氱敤1.30鐗堟湰鐨刡usybox闀滃儚鍒涘缓锛岋紙busybox鏄竴涓皬宸х殑linux鍛戒护闆嗗悎锛 + + + +```shell +# 鍒涘缓Pod +[root@k8s-master01 pod]# kubectl apply -f pod-base.yaml +pod/pod-base created + +# 鏌ョ湅Pod鐘跺喌 +# READY 1/2 : 琛ㄧず褰撳墠Pod涓湁2涓鍣紝鍏朵腑1涓噯澶囧氨缁紝1涓湭灏辩华 +# RESTARTS : 閲嶅惎娆℃暟锛屽洜涓烘湁1涓鍣ㄦ晠闅滀簡锛孭od涓鐩村湪閲嶅惎璇曞浘鎭㈠瀹 +[root@k8s-master01 pod]# kubectl get pod -n dev +NAME READY STATUS RESTARTS AGE +pod-base 1/2 Running 4 95s + +# 鍙互閫氳繃describe鏌ョ湅鍐呴儴鐨勮鎯 +# 姝ゆ椂宸茬粡杩愯璧锋潵浜嗕竴涓熀鏈殑Pod锛岃櫧鐒跺畠鏆傛椂鏈夐棶棰 +[root@k8s-master01 pod]# kubectl describe pod pod-base -n dev +``` + +### 5.2.2 闀滃儚鎷夊彇 + +鍒涘缓pod-imagepullpolicy.yaml鏂囦欢锛屽唴瀹瑰涓嬶細 + + + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-imagepullpolicy + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + imagePullPolicy: Never # 鐢ㄤ簬璁剧疆闀滃儚鎷夊彇绛栫暐 + - name: busybox + image: busybox:1.30 +``` + +![image-20210617223923659](Kubenetes.assets/image-20210617223923659.png) + +imagePullPolicy锛岀敤浜庤缃暅鍍忔媺鍙栫瓥鐣ワ紝kubernetes鏀寔閰嶇疆涓夌鎷夊彇绛栫暐锛 + +- Always锛氭绘槸浠庤繙绋嬩粨搴撴媺鍙栭暅鍍忥紙涓鐩磋繙绋嬩笅杞斤級 +- IfNotPresent锛氭湰鍦版湁鍒欎娇鐢ㄦ湰鍦伴暅鍍忥紝鏈湴娌℃湁鍒欎粠杩滅▼浠撳簱鎷夊彇闀滃儚锛堟湰鍦版湁灏辨湰鍦 鏈湴娌¤繙绋嬩笅杞斤級 +- Never锛氬彧浣跨敤鏈湴闀滃儚锛屼粠涓嶅幓杩滅▼浠撳簱鎷夊彇锛屾湰鍦版病鏈夊氨鎶ラ敊 锛堜竴鐩翠娇鐢ㄦ湰鍦帮級 + +> 榛樿鍊艰鏄庯細 +> +> 濡傛灉闀滃儚tag涓哄叿浣撶増鏈彿锛 榛樿绛栫暐鏄細IfNotPresent +> +> 濡傛灉闀滃儚tag涓猴細latest锛堟渶缁堢増鏈級 锛岄粯璁ょ瓥鐣ユ槸always + + + +```shell +# 鍒涘缓Pod +[root@k8s-master01 pod]# kubectl create -f pod-imagepullpolicy.yaml +pod/pod-imagepullpolicy created + +# 鏌ョ湅Pod璇︽儏 +# 姝ゆ椂鏄庢樉鍙互鐪嬪埌nginx闀滃儚鏈変竴姝ulling image "nginx:1.17.1"鐨勮繃绋 +[root@k8s-master01 pod]# kubectl describe pod pod-imagepullpolicy -n dev +...... +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Scheduled default-scheduler Successfully assigned dev/pod-imagePullPolicy to node1 + Normal Pulling 32s kubelet, node1 Pulling image "nginx:1.17.1" + Normal Pulled 26s kubelet, node1 Successfully pulled image "nginx:1.17.1" + Normal Created 26s kubelet, node1 Created container nginx + Normal Started 25s kubelet, node1 Started container nginx + Normal Pulled 7s (x3 over 25s) kubelet, node1 Container image "busybox:1.30" already present on machine + Normal Created 7s (x3 over 25s) kubelet, node1 Created container busybox + Normal Started 7s (x3 over 25s) kubelet, node1 Started container busybox +``` + +### 5.2.3 鍚姩鍛戒护 + +鍦ㄥ墠闈㈢殑妗堜緥涓紝涓鐩存湁涓涓棶棰樻病鏈夎В鍐筹紝灏辨槸鐨刡usybox瀹瑰櫒涓鐩存病鏈夋垚鍔熻繍琛岋紝閭d箞鍒板簳鏄粈涔堝師鍥犲鑷磋繖涓鍣ㄧ殑鏁呴殰鍛紵 + +鍘熸潵busybox骞朵笉鏄竴涓▼搴忥紝鑰屾槸绫讳技浜庝竴涓伐鍏风被鐨勯泦鍚堬紝kubernetes闆嗙兢鍚姩绠$悊鍚庯紝瀹冧細鑷姩鍏抽棴銆傝В鍐虫柟娉曞氨鏄鍏朵竴鐩村湪杩愯锛岃繖灏辩敤鍒颁簡command閰嶇疆銆 + +鍒涘缓pod-command.yaml鏂囦欢锛屽唴瀹瑰涓嬶細 + + + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-command + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + - name: busybox + image: busybox:1.30 + command: ["/bin/sh","-c","touch /tmp/hello.txt;while true;do /bin/echo $(date +%T) >> /tmp/hello.txt; sleep 3; done;"] +``` + +![image-20210617224457945](Kubenetes.assets/image-20210617224457945.png) + +command锛岀敤浜庡湪pod涓殑瀹瑰櫒鍒濆鍖栧畬姣曚箣鍚庤繍琛屼竴涓懡浠ゃ + +> 绋嶅井瑙i噴涓嬩笂闈㈠懡浠ょ殑鎰忔濓細 +> +> "/bin/sh","-c", 浣跨敤sh鎵ц鍛戒护 +> +> touch /tmp/hello.txt; 鍒涘缓涓涓/tmp/hello.txt 鏂囦欢 +> +> while true;do /bin/echo $(date +%T) >> /tmp/hello.txt; sleep 3; done; 姣忛殧3绉掑悜鏂囦欢涓啓鍏ュ綋鍓嶆椂闂 + + + +```shell +# 鍒涘缓Pod +[root@k8s-master01 pod]# kubectl create -f pod-command.yaml +pod/pod-command created + +# 鏌ョ湅Pod鐘舵 +# 姝ゆ椂鍙戠幇涓や釜pod閮芥甯歌繍琛屼簡 +[root@k8s-master01 pod]# kubectl get pods pod-command -n dev +NAME READY STATUS RESTARTS AGE +pod-command 2/2 Runing 0 2s + +# 杩涘叆pod涓殑busybox瀹瑰櫒锛屾煡鐪嬫枃浠跺唴瀹 +# 琛ュ厖涓涓懡浠: kubectl exec pod鍚嶇О -n 鍛藉悕绌洪棿 -it -c 瀹瑰櫒鍚嶇О /bin/sh 鍦ㄥ鍣ㄥ唴閮ㄦ墽琛屽懡浠 +# 浣跨敤杩欎釜鍛戒护灏卞彲浠ヨ繘鍏ユ煇涓鍣ㄧ殑鍐呴儴锛岀劧鍚庤繘琛岀浉鍏虫搷浣滀簡 +# 姣斿锛屽彲浠ユ煡鐪媡xt鏂囦欢鐨勫唴瀹 +[root@k8s-master01 pod]# kubectl exec pod-command -n dev -it -c busybox /bin/sh +/ # tail -f /tmp/hello.txt +14:44:19 +14:44:22 +14:44:25 +``` + +``` +鐗瑰埆璇存槑锛 + 閫氳繃涓婇潰鍙戠幇command宸茬粡鍙互瀹屾垚鍚姩鍛戒护鍜屼紶閫掑弬鏁扮殑鍔熻兘锛屼负浠涔堣繖閲岃繕瑕佹彁渚涗竴涓猘rgs閫夐」锛岀敤浜庝紶閫掑弬鏁板憿?杩欏叾瀹炶窡docker鏈夌偣鍏崇郴锛宬ubernetes涓殑command銆乤rgs涓ら」鍏跺疄鏄疄鐜拌鐩朌ockerfile涓璄NTRYPOINT鐨勫姛鑳姐 + 1 濡傛灉command鍜宎rgs鍧囨病鏈夊啓锛岄偅涔堢敤Dockerfile鐨勯厤缃 + 2 濡傛灉command鍐欎簡锛屼絾args娌℃湁鍐欙紝閭d箞Dockerfile榛樿鐨勯厤缃細琚拷鐣ワ紝鎵ц杈撳叆鐨刢ommand + 3 濡傛灉command娌″啓锛屼絾args鍐欎簡锛岄偅涔圖ockerfile涓厤缃殑ENTRYPOINT鐨勫懡浠や細琚墽琛岋紝浣跨敤褰撳墠args鐨勫弬鏁 + 4 濡傛灉command鍜宎rgs閮藉啓浜嗭紝閭d箞Dockerfile鐨勯厤缃蹇界暐锛屾墽琛宑ommand骞惰拷鍔犱笂args鍙傛暟 +``` + +### 5.2.4 鐜鍙橀噺 + +鍒涘缓pod-env.yaml鏂囦欢锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-env + namespace: dev +spec: + containers: + - name: busybox + image: busybox:1.30 + command: ["/bin/sh","-c","while true;do /bin/echo $(date +%T);sleep 60; done;"] + env: # 璁剧疆鐜鍙橀噺鍒楄〃 + - name: "username" + value: "admin" + - name: "password" + value: "123456" +``` + +env锛岀幆澧冨彉閲忥紝鐢ㄤ簬鍦╬od涓殑瀹瑰櫒璁剧疆鐜鍙橀噺銆 + +```shell +# 鍒涘缓Pod +[root@k8s-master01 ~]# kubectl create -f pod-env.yaml +pod/pod-env created + +# 杩涘叆瀹瑰櫒锛岃緭鍑虹幆澧冨彉閲 +[root@k8s-master01 ~]# kubectl exec pod-env -n dev -c busybox -it /bin/sh +/ # echo $username +admin +/ # echo $password +123456 +``` + +杩欑鏂瑰紡涓嶆槸寰堟帹鑽愶紝鎺ㄨ崘灏嗚繖浜涢厤缃崟鐙瓨鍌ㄥ湪閰嶇疆鏂囦欢涓紝杩欑鏂瑰紡灏嗗湪鍚庨潰浠嬬粛銆 + +### 5.2.5 绔彛璁剧疆 + +鏈皬鑺傛潵浠嬬粛瀹瑰櫒鐨勭鍙h缃紝涔熷氨鏄痗ontainers鐨刾orts閫夐」銆 + +棣栧厛鐪嬩笅ports鏀寔鐨勫瓙閫夐」锛 + +```shell +[root@k8s-master01 ~]# kubectl explain pod.spec.containers.ports +KIND: Pod +VERSION: v1 +RESOURCE: ports <[]Object> +FIELDS: + name # 绔彛鍚嶇О锛屽鏋滄寚瀹氾紝蹇呴』淇濊瘉name鍦╬od涓槸鍞竴鐨 + containerPort # 瀹瑰櫒瑕佺洃鍚殑绔彛(0 # 瀹瑰櫒瑕佸湪涓绘満涓婂叕寮鐨勭鍙o紝濡傛灉璁剧疆锛屼富鏈轰笂鍙兘杩愯瀹瑰櫒鐨勪竴涓壇鏈(涓鑸渷鐣) + hostIP # 瑕佸皢澶栭儴绔彛缁戝畾鍒扮殑涓绘満IP(涓鑸渷鐣) + protocol # 绔彛鍗忚銆傚繀椤绘槸UDP銆乀CP鎴朣CTP銆傞粯璁や负鈥淭CP鈥濄 +``` + +鎺ヤ笅鏉ワ紝缂栧啓涓涓祴璇曟渚嬶紝鍒涘缓pod-ports.yaml + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-ports + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + ports: # 璁剧疆瀹瑰櫒鏆撮湶鐨勭鍙e垪琛 + - name: nginx-port + containerPort: 80 + protocol: TCP +``` + +```shell +# 鍒涘缓Pod +[root@k8s-master01 ~]# kubectl create -f pod-ports.yaml +pod/pod-ports created + +# 鏌ョ湅pod +# 鍦ㄤ笅闈㈠彲浠ユ槑鏄剧湅鍒伴厤缃俊鎭 +[root@k8s-master01 ~]# kubectl get pod pod-ports -n dev -o yaml +...... +spec: + containers: + - image: nginx:1.17.1 + imagePullPolicy: IfNotPresent + name: nginx + ports: + - containerPort: 80 + name: nginx-port + protocol: TCP +...... +``` + +璁块棶瀹瑰櫒涓殑绋嬪簭闇瑕佷娇鐢ㄧ殑鏄痐Podip:containerPort` + +### 5.2.6 璧勬簮閰嶉 + +瀹瑰櫒涓殑绋嬪簭瑕佽繍琛岋紝鑲畾鏄鍗犵敤涓瀹氳祫婧愮殑锛屾瘮濡俢pu鍜屽唴瀛樼瓑锛屽鏋滀笉瀵规煇涓鍣ㄧ殑璧勬簮鍋氶檺鍒讹紝閭d箞瀹冨氨鍙兘鍚冩帀澶ч噺璧勬簮锛屽鑷村叾瀹冨鍣ㄦ棤娉曡繍琛屻傞拡瀵硅繖绉嶆儏鍐碉紝kubernetes鎻愪緵浜嗗鍐呭瓨鍜宑pu鐨勮祫婧愯繘琛岄厤棰濈殑鏈哄埗锛岃繖绉嶆満鍒朵富瑕侀氳繃resources閫夐」瀹炵幇锛屼粬鏈変袱涓瓙閫夐」锛 + +- limits锛氱敤浜庨檺鍒惰繍琛屾椂瀹瑰櫒鐨勬渶澶у崰鐢ㄨ祫婧愶紝褰撳鍣ㄥ崰鐢ㄨ祫婧愯秴杩噇imits鏃朵細琚粓姝紝骞惰繘琛岄噸鍚 +- requests 锛氱敤浜庤缃鍣ㄩ渶瑕佺殑鏈灏忚祫婧愶紝濡傛灉鐜璧勬簮涓嶅锛屽鍣ㄥ皢鏃犳硶鍚姩 + +鍙互閫氳繃涓婇潰涓や釜閫夐」璁剧疆璧勬簮鐨勪笂涓嬮檺銆 + +鎺ヤ笅鏉ワ紝缂栧啓涓涓祴璇曟渚嬶紝鍒涘缓pod-resources.yaml + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-resources + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + resources: # 璧勬簮閰嶉 + limits: # 闄愬埗璧勬簮锛堜笂闄愶級 + cpu: "2" # CPU闄愬埗锛屽崟浣嶆槸core鏁 + memory: "10Gi" # 鍐呭瓨闄愬埗 + requests: # 璇锋眰璧勬簮锛堜笅闄愶級 + cpu: "1" # CPU闄愬埗锛屽崟浣嶆槸core鏁 + memory: "10Mi" # 鍐呭瓨闄愬埗 +``` + +鍦ㄨ繖瀵筩pu鍜宮emory鐨勫崟浣嶅仛涓涓鏄庯細 + +- cpu锛歝ore鏁帮紝鍙互涓烘暣鏁版垨灏忔暟 +- memory锛 鍐呭瓨澶у皬锛屽彲浠ヤ娇鐢℅i銆丮i銆丟銆丮绛夊舰寮 + +```shell +# 杩愯Pod +[root@k8s-master01 ~]# kubectl create -f pod-resources.yaml +pod/pod-resources created + +# 鏌ョ湅鍙戠幇pod杩愯姝e父 +[root@k8s-master01 ~]# kubectl get pod pod-resources -n dev +NAME READY STATUS RESTARTS AGE +pod-resources 1/1 Running 0 39s + +# 鎺ヤ笅鏉ワ紝鍋滄Pod +[root@k8s-master01 ~]# kubectl delete -f pod-resources.yaml +pod "pod-resources" deleted + +# 缂栬緫pod锛屼慨鏀箁esources.requests.memory鐨勫间负10Gi +[root@k8s-master01 ~]# vim pod-resources.yaml + +# 鍐嶆鍚姩pod +[root@k8s-master01 ~]# kubectl create -f pod-resources.yaml +pod/pod-resources created + +# 鏌ョ湅Pod鐘舵侊紝鍙戠幇Pod鍚姩澶辫触 +[root@k8s-master01 ~]# kubectl get pod pod-resources -n dev -o wide +NAME READY STATUS RESTARTS AGE +pod-resources 0/1 Pending 0 20s + +# 鏌ョ湅pod璇︽儏浼氬彂鐜帮紝濡備笅鎻愮ず +[root@k8s-master01 ~]# kubectl describe pod pod-resources -n dev +...... +Warning FailedScheduling 35s default-scheduler 0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 Insufficient memory.(鍐呭瓨涓嶈冻) +``` + +## 5.3 Pod鐢熷懡鍛ㄦ湡 + +鎴戜滑涓鑸皢pod瀵硅薄浠庡垱寤鸿嚦缁堢殑杩欐鏃堕棿鑼冨洿绉颁负pod鐨勭敓鍛藉懆鏈燂紝瀹冧富瑕佸寘鍚笅闈㈢殑杩囩▼锛 + +- pod鍒涘缓杩囩▼ +- 杩愯鍒濆鍖栧鍣紙init container锛夎繃绋 +- 杩愯涓诲鍣紙main container锛 + - 瀹瑰櫒鍚姩鍚庨挬瀛愶紙post start锛夈佸鍣ㄧ粓姝㈠墠閽╁瓙锛坧re stop锛 + - 瀹瑰櫒鐨勫瓨娲绘ф帰娴嬶紙liveness probe锛夈佸氨缁ф帰娴嬶紙readiness probe锛 +- pod缁堟杩囩▼ + +![image-20200412111402706](Kubenetes.assets/image-20200412111402706-1626782188724.png) + +鍦ㄦ暣涓敓鍛藉懆鏈熶腑锛孭od浼氬嚭鐜5绉**鐘舵**锛**鐩镐綅**锛夛紝鍒嗗埆濡備笅锛 + +- 鎸傝捣锛圥ending锛夛細apiserver宸茬粡鍒涘缓浜唒od璧勬簮瀵硅薄锛屼絾瀹冨皻鏈璋冨害瀹屾垚鎴栬呬粛澶勪簬涓嬭浇闀滃儚鐨勮繃绋嬩腑 +- 杩愯涓紙Running锛夛細pod宸茬粡琚皟搴﹁嚦鏌愯妭鐐癸紝骞朵笖鎵鏈夊鍣ㄩ兘宸茬粡琚玨ubelet鍒涘缓瀹屾垚 +- 鎴愬姛锛圫ucceeded锛夛細pod涓殑鎵鏈夊鍣ㄩ兘宸茬粡鎴愬姛缁堟骞朵笖涓嶄細琚噸鍚 +- 澶辫触锛團ailed锛夛細鎵鏈夊鍣ㄩ兘宸茬粡缁堟锛屼絾鑷冲皯鏈変竴涓鍣ㄧ粓姝㈠け璐ワ紝鍗冲鍣ㄨ繑鍥炰簡闈0鍊肩殑閫鍑虹姸鎬 +- 鏈煡锛圲nknown锛夛細apiserver鏃犳硶姝e父鑾峰彇鍒皃od瀵硅薄鐨勭姸鎬佷俊鎭紝閫氬父鐢辩綉缁滈氫俊澶辫触鎵瀵艰嚧 + +### 5.3.1 鍒涘缓鍜岀粓姝 + +**pod鐨勫垱寤鸿繃绋** + +1. 鐢ㄦ埛閫氳繃kubectl鎴栧叾浠朼pi瀹㈡埛绔彁浜ら渶瑕佸垱寤虹殑pod淇℃伅缁檃piServer + +2. apiServer寮濮嬬敓鎴恜od瀵硅薄鐨勪俊鎭紝骞跺皢淇℃伅瀛樺叆etcd锛岀劧鍚庤繑鍥炵‘璁や俊鎭嚦瀹㈡埛绔 + +3. apiServer寮濮嬪弽鏄爀tcd涓殑pod瀵硅薄鐨勫彉鍖栵紝鍏跺畠缁勪欢浣跨敤watch鏈哄埗鏉ヨ窡韪鏌piServer涓婄殑鍙樺姩 + +4. scheduler鍙戠幇鏈夋柊鐨刾od瀵硅薄瑕佸垱寤猴紝寮濮嬩负Pod鍒嗛厤涓绘満骞跺皢缁撴灉淇℃伅鏇存柊鑷砤piServer + +5. node鑺傜偣涓婄殑kubelet鍙戠幇鏈塸od璋冨害杩囨潵锛屽皾璇曡皟鐢╠ocker鍚姩瀹瑰櫒锛屽苟灏嗙粨鏋滃洖閫佽嚦apiServer + +6. apiServer灏嗘帴鏀跺埌鐨刾od鐘舵佷俊鎭瓨鍏tcd涓 + + ![image-20200406184656917](Kubenetes.assets/image-20200406184656917-1626782168787.png) + +**pod鐨勭粓姝㈣繃绋** + +1. 鐢ㄦ埛鍚慳piServer鍙戦佸垹闄od瀵硅薄鐨勫懡浠 +2. apiServcer涓殑pod瀵硅薄淇℃伅浼氶殢鐫鏃堕棿鐨勬帹绉昏屾洿鏂帮紝鍦ㄥ闄愭湡鍐咃紙榛樿30s锛夛紝pod琚涓篸ead +3. 灏唒od鏍囪涓簍erminating鐘舵 +4. kubelet鍦ㄧ洃鎺у埌pod瀵硅薄杞负terminating鐘舵佺殑鍚屾椂鍚姩pod鍏抽棴杩囩▼ +5. 绔偣鎺у埗鍣ㄧ洃鎺у埌pod瀵硅薄鐨勫叧闂涓烘椂灏嗗叾浠庢墍鏈夊尮閰嶅埌姝ょ鐐圭殑service璧勬簮鐨勭鐐瑰垪琛ㄤ腑绉婚櫎 +6. 濡傛灉褰撳墠pod瀵硅薄瀹氫箟浜唒reStop閽╁瓙澶勭悊鍣紝鍒欏湪鍏舵爣璁颁负terminating鍚庡嵆浼氫互鍚屾鐨勬柟寮忓惎鍔ㄦ墽琛 +7. pod瀵硅薄涓殑瀹瑰櫒杩涚▼鏀跺埌鍋滄淇″彿 +8. 瀹介檺鏈熺粨鏉熷悗锛岃嫢pod涓繕瀛樺湪浠嶅湪杩愯鐨勮繘绋嬶紝閭d箞pod瀵硅薄浼氭敹鍒扮珛鍗崇粓姝㈢殑淇″彿 +9. kubelet璇锋眰apiServer灏嗘pod璧勬簮鐨勫闄愭湡璁剧疆涓0浠庤屽畬鎴愬垹闄ゆ搷浣滐紝姝ゆ椂pod瀵逛簬鐢ㄦ埛宸蹭笉鍙 + +### 5.3.2 鍒濆鍖栧鍣 + +鍒濆鍖栧鍣ㄦ槸鍦╬od鐨勪富瀹瑰櫒鍚姩涔嬪墠瑕佽繍琛岀殑瀹瑰櫒锛屼富瑕佹槸鍋氫竴浜涗富瀹瑰櫒鐨勫墠缃伐浣滐紝瀹冨叿鏈変袱澶х壒寰侊細 + +1. 鍒濆鍖栧鍣ㄥ繀椤昏繍琛屽畬鎴愮洿鑷崇粨鏉燂紝鑻ユ煇鍒濆鍖栧鍣ㄨ繍琛屽け璐ワ紝閭d箞kubernetes闇瑕侀噸鍚畠鐩村埌鎴愬姛瀹屾垚 +2. 鍒濆鍖栧鍣ㄥ繀椤绘寜鐓у畾涔夌殑椤哄簭鎵ц锛屽綋涓斾粎褰撳墠涓涓垚鍔熶箣鍚庯紝鍚庨潰鐨勪竴涓墠鑳借繍琛 + +鍒濆鍖栧鍣ㄦ湁寰堝鐨勫簲鐢ㄥ満鏅紝涓嬮潰鍒楀嚭鐨勬槸鏈甯歌鐨勫嚑涓細 + +- 鎻愪緵涓诲鍣ㄩ暅鍍忎腑涓嶅叿澶囩殑宸ュ叿绋嬪簭鎴栬嚜瀹氫箟浠g爜 +- 鍒濆鍖栧鍣ㄨ鍏堜簬搴旂敤瀹瑰櫒涓茶鍚姩骞惰繍琛屽畬鎴愶紝鍥犳鍙敤浜庡欢鍚庡簲鐢ㄥ鍣ㄧ殑鍚姩鐩磋嚦鍏朵緷璧栫殑鏉′欢寰楀埌婊¤冻 + +鎺ヤ笅鏉ュ仛涓涓渚嬶紝妯℃嫙涓嬮潰杩欎釜闇姹傦細 + +鍋囪瑕佷互涓诲鍣ㄦ潵杩愯nginx锛屼絾鏄姹傚湪杩愯nginx涔嬪墠鍏堣鑳藉杩炴帴涓妋ysql鍜宺edis鎵鍦ㄦ湇鍔″櫒 + +涓轰簡绠鍖栨祴璇曪紝浜嬪厛瑙勫畾濂絤ysql`(192.168.5.4)`鍜宺edis`(192.168.5.5)`鏈嶅姟鍣ㄧ殑鍦板潃 + +鍒涘缓pod-initcontainer.yaml锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-initcontainer + namespace: dev +spec: + containers: + - name: main-container + image: nginx:1.17.1 + ports: + - name: nginx-port + containerPort: 80 + initContainers: + - name: test-mysql + image: busybox:1.30 + command: ['sh', '-c', 'until ping 192.168.5.14 -c 1 ; do echo waiting for mysql...; sleep 2; done;'] + - name: test-redis + image: busybox:1.30 + command: ['sh', '-c', 'until ping 192.168.5.15 -c 1 ; do echo waiting for reids...; sleep 2; done;'] +``` + +```shell +# 鍒涘缓pod +[root@k8s-master01 ~]# kubectl create -f pod-initcontainer.yaml +pod/pod-initcontainer created + +# 鏌ョ湅pod鐘舵 +# 鍙戠幇pod鍗″湪鍚姩绗竴涓垵濮嬪寲瀹瑰櫒杩囩▼涓紝鍚庨潰鐨勫鍣ㄤ笉浼氳繍琛 +root@k8s-master01 ~]# kubectl describe pod pod-initcontainer -n dev +........ +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Scheduled 49s default-scheduler Successfully assigned dev/pod-initcontainer to node1 + Normal Pulled 48s kubelet, node1 Container image "busybox:1.30" already present on machine + Normal Created 48s kubelet, node1 Created container test-mysql + Normal Started 48s kubelet, node1 Started container test-mysql + +# 鍔ㄦ佹煡鐪媝od +[root@k8s-master01 ~]# kubectl get pods pod-initcontainer -n dev -w +NAME READY STATUS RESTARTS AGE +pod-initcontainer 0/1 Init:0/2 0 15s +pod-initcontainer 0/1 Init:1/2 0 52s +pod-initcontainer 0/1 Init:1/2 0 53s +pod-initcontainer 0/1 PodInitializing 0 89s +pod-initcontainer 1/1 Running 0 90s + +# 鎺ヤ笅鏉ユ柊寮涓涓猻hell锛屼负褰撳墠鏈嶅姟鍣ㄦ柊澧炰袱涓猧p锛岃瀵焢od鐨勫彉鍖 +[root@k8s-master01 ~]# ifconfig ens33:1 192.168.5.14 netmask 255.255.255.0 up +[root@k8s-master01 ~]# ifconfig ens33:2 192.168.5.15 netmask 255.255.255.0 up +``` + +### 5.3.3 閽╁瓙鍑芥暟 + +閽╁瓙鍑芥暟鑳藉鎰熺煡鑷韩鐢熷懡鍛ㄦ湡涓殑浜嬩欢锛屽苟鍦ㄧ浉搴旂殑鏃跺埢鍒版潵鏃惰繍琛岀敤鎴锋寚瀹氱殑绋嬪簭浠g爜銆 + +kubernetes鍦ㄤ富瀹瑰櫒鐨勫惎鍔ㄤ箣鍚庡拰鍋滄涔嬪墠鎻愪緵浜嗕袱涓挬瀛愬嚱鏁帮細 + +- post start锛氬鍣ㄥ垱寤轰箣鍚庢墽琛岋紝濡傛灉澶辫触浜嗕細閲嶅惎瀹瑰櫒 +- pre stop 锛氬鍣ㄧ粓姝箣鍓嶆墽琛岋紝鎵ц瀹屾垚涔嬪悗瀹瑰櫒灏嗘垚鍔熺粓姝紝鍦ㄥ叾瀹屾垚涔嬪墠浼氶樆濉炲垹闄ゅ鍣ㄧ殑鎿嶄綔 + +閽╁瓙澶勭悊鍣ㄦ敮鎸佷娇鐢ㄤ笅闈笁绉嶆柟寮忓畾涔夊姩浣滐細 + +- Exec鍛戒护锛氬湪瀹瑰櫒鍐呮墽琛屼竴娆″懡浠 + + ```yaml + 鈥︹ + lifecycle: + postStart: + exec: + command: + - cat + - /tmp/healthy + 鈥︹ + ``` + +- TCPSocket锛氬湪褰撳墠瀹瑰櫒灏濊瘯璁块棶鎸囧畾鐨剆ocket + + ```yaml + 鈥︹ + lifecycle: + postStart: + tcpSocket: + port: 8080 + 鈥︹ + ``` + +- HTTPGet锛氬湪褰撳墠瀹瑰櫒涓悜鏌恥rl鍙戣捣http璇锋眰 + + ```yaml + 鈥︹ + lifecycle: + postStart: + httpGet: + path: / #URI鍦板潃 + port: 80 #绔彛鍙 + host: 192.168.5.3 #涓绘満鍦板潃 + scheme: HTTP #鏀寔鐨勫崗璁紝http鎴栬卙ttps + 鈥︹ + ``` + +鎺ヤ笅鏉ワ紝浠xec鏂瑰紡涓轰緥锛屾紨绀轰笅閽╁瓙鍑芥暟鐨勪娇鐢紝鍒涘缓pod-hook-exec.yaml鏂囦欢锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-hook-exec + namespace: dev +spec: + containers: + - name: main-container + image: nginx:1.17.1 + ports: + - name: nginx-port + containerPort: 80 + lifecycle: + postStart: + exec: # 鍦ㄥ鍣ㄥ惎鍔ㄧ殑鏃跺欐墽琛屼竴涓懡浠わ紝淇敼鎺塶ginx鐨勯粯璁ら椤靛唴瀹 + command: ["/bin/sh", "-c", "echo postStart... > /usr/share/nginx/html/index.html"] + preStop: + exec: # 鍦ㄥ鍣ㄥ仠姝箣鍓嶅仠姝ginx鏈嶅姟 + command: ["/usr/sbin/nginx","-s","quit"] +``` + +```shell +# 鍒涘缓pod +[root@k8s-master01 ~]# kubectl create -f pod-hook-exec.yaml +pod/pod-hook-exec created + +# 鏌ョ湅pod +[root@k8s-master01 ~]# kubectl get pods pod-hook-exec -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE +pod-hook-exec 1/1 Running 0 29s 10.244.2.48 node2 + +# 璁块棶pod +[root@k8s-master01 ~]# curl 10.244.2.48 +postStart... +``` + +### 5.3.4 瀹瑰櫒鎺㈡祴 + +瀹瑰櫒鎺㈡祴鐢ㄤ簬妫娴嬪鍣ㄤ腑鐨勫簲鐢ㄥ疄渚嬫槸鍚︽甯稿伐浣滐紝鏄繚闅滀笟鍔″彲鐢ㄦх殑涓绉嶄紶缁熸満鍒躲傚鏋滅粡杩囨帰娴嬶紝瀹炰緥鐨勭姸鎬佷笉绗﹀悎棰勬湡锛岄偅涔坘ubernetes灏变細鎶婅闂瀹炰緥" 鎽橀櫎 "锛屼笉鎵挎媴涓氬姟娴侀噺銆俴ubernetes鎻愪緵浜嗕袱绉嶆帰閽堟潵瀹炵幇瀹瑰櫒鎺㈡祴锛屽垎鍒槸锛 + +- liveness probes锛氬瓨娲绘ф帰閽堬紝鐢ㄤ簬妫娴嬪簲鐢ㄥ疄渚嬪綋鍓嶆槸鍚﹀浜庢甯歌繍琛岀姸鎬侊紝濡傛灉涓嶆槸锛宬8s浼氶噸鍚鍣 +- readiness probes锛氬氨缁ф帰閽堬紝鐢ㄤ簬妫娴嬪簲鐢ㄥ疄渚嬪綋鍓嶆槸鍚﹀彲浠ユ帴鏀惰姹傦紝濡傛灉涓嶈兘锛宬8s涓嶄細杞彂娴侀噺 + +> livenessProbe 鍐冲畾鏄惁閲嶅惎瀹瑰櫒锛宺eadinessProbe 鍐冲畾鏄惁灏嗚姹傝浆鍙戠粰瀹瑰櫒銆 + +涓婇潰涓ょ鎺㈤拡鐩墠鍧囨敮鎸佷笁绉嶆帰娴嬫柟寮忥細 + +- Exec鍛戒护锛氬湪瀹瑰櫒鍐呮墽琛屼竴娆″懡浠わ紝濡傛灉鍛戒护鎵ц鐨勯鍑虹爜涓0锛屽垯璁や负绋嬪簭姝e父锛屽惁鍒欎笉姝e父 + + ```yaml + 鈥︹ + livenessProbe: + exec: + command: + - cat + - /tmp/healthy + 鈥︹ + ``` + +- TCPSocket锛氬皢浼氬皾璇曡闂竴涓敤鎴峰鍣ㄧ殑绔彛锛屽鏋滆兘澶熷缓绔嬭繖鏉¤繛鎺ワ紝鍒欒涓虹▼搴忔甯革紝鍚﹀垯涓嶆甯 + + ```yaml + 鈥︹ + livenessProbe: + tcpSocket: + port: 8080 + 鈥︹ + ``` + +- HTTPGet锛氳皟鐢ㄥ鍣ㄥ唴Web搴旂敤鐨刄RL锛屽鏋滆繑鍥炵殑鐘舵佺爜鍦200鍜399涔嬮棿锛屽垯璁や负绋嬪簭姝e父锛屽惁鍒欎笉姝e父 + + ```yaml + 鈥︹ + livenessProbe: + httpGet: + path: / #URI鍦板潃 + port: 80 #绔彛鍙 + host: 127.0.0.1 #涓绘満鍦板潃 + scheme: HTTP #鏀寔鐨勫崗璁紝http鎴栬卙ttps + 鈥︹ + ``` + +涓嬮潰浠iveness probes涓轰緥锛屽仛鍑犱釜婕旂ず锛 + +**鏂瑰紡涓锛欵xec** + +鍒涘缓pod-liveness-exec.yaml + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-liveness-exec + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + ports: + - name: nginx-port + containerPort: 80 + livenessProbe: + exec: + command: ["/bin/cat","/tmp/hello.txt"] # 鎵ц涓涓煡鐪嬫枃浠剁殑鍛戒护 +``` + +鍒涘缓pod锛岃瀵熸晥鏋 + +```shell +# 鍒涘缓Pod +[root@k8s-master01 ~]# kubectl create -f pod-liveness-exec.yaml +pod/pod-liveness-exec created + +# 鏌ョ湅Pod璇︽儏 +[root@k8s-master01 ~]# kubectl describe pods pod-liveness-exec -n dev +...... + Normal Created 20s (x2 over 50s) kubelet, node1 Created container nginx + Normal Started 20s (x2 over 50s) kubelet, node1 Started container nginx + Normal Killing 20s kubelet, node1 Container nginx failed liveness probe, will be restarted + Warning Unhealthy 0s (x5 over 40s) kubelet, node1 Liveness probe failed: cat: can't open '/tmp/hello11.txt': No such file or directory + +# 瑙傚療涓婇潰鐨勪俊鎭氨浼氬彂鐜皀ginx瀹瑰櫒鍚姩涔嬪悗灏辫繘琛屼簡鍋ュ悍妫鏌 +# 妫鏌ュけ璐ヤ箣鍚庯紝瀹瑰櫒琚玨ill鎺夛紝鐒跺悗灏濊瘯杩涜閲嶅惎锛堣繖鏄噸鍚瓥鐣ョ殑浣滅敤锛屽悗闈㈣瑙o級 +# 绋嶇瓑涓浼氫箣鍚庯紝鍐嶈瀵焢od淇℃伅锛屽氨鍙互鐪嬪埌RESTARTS涓嶅啀鏄0锛岃屾槸涓鐩村闀 +[root@k8s-master01 ~]# kubectl get pods pod-liveness-exec -n dev +NAME READY STATUS RESTARTS AGE +pod-liveness-exec 0/1 CrashLoopBackOff 2 3m19s + +# 褰撶劧鎺ヤ笅鏉ワ紝鍙互淇敼鎴愪竴涓瓨鍦ㄧ殑鏂囦欢锛屾瘮濡/tmp/hello.txt锛屽啀璇曪紝缁撴灉灏辨甯镐簡...... +``` + +**鏂瑰紡浜岋細TCPSocket** + +鍒涘缓pod-liveness-tcpsocket.yaml + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-liveness-tcpsocket + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + ports: + - name: nginx-port + containerPort: 80 + livenessProbe: + tcpSocket: + port: 8080 # 灏濊瘯璁块棶8080绔彛 +``` + +鍒涘缓pod锛岃瀵熸晥鏋 + +```shell +# 鍒涘缓Pod +[root@k8s-master01 ~]# kubectl create -f pod-liveness-tcpsocket.yaml +pod/pod-liveness-tcpsocket created + +# 鏌ョ湅Pod璇︽儏 +[root@k8s-master01 ~]# kubectl describe pods pod-liveness-tcpsocket -n dev +...... + Normal Scheduled 31s default-scheduler Successfully assigned dev/pod-liveness-tcpsocket to node2 + Normal Pulled kubelet, node2 Container image "nginx:1.17.1" already present on machine + Normal Created kubelet, node2 Created container nginx + Normal Started kubelet, node2 Started container nginx + Warning Unhealthy (x2 over ) kubelet, node2 Liveness probe failed: dial tcp 10.244.2.44:8080: connect: connection refused + +# 瑙傚療涓婇潰鐨勪俊鎭紝鍙戠幇灏濊瘯璁块棶8080绔彛,浣嗘槸澶辫触浜 +# 绋嶇瓑涓浼氫箣鍚庯紝鍐嶈瀵焢od淇℃伅锛屽氨鍙互鐪嬪埌RESTARTS涓嶅啀鏄0锛岃屾槸涓鐩村闀 +[root@k8s-master01 ~]# kubectl get pods pod-liveness-tcpsocket -n dev +NAME READY STATUS RESTARTS AGE +pod-liveness-tcpsocket 0/1 CrashLoopBackOff 2 3m19s + +# 褰撶劧鎺ヤ笅鏉ワ紝鍙互淇敼鎴愪竴涓彲浠ヨ闂殑绔彛锛屾瘮濡80锛屽啀璇曪紝缁撴灉灏辨甯镐簡...... +``` + +**鏂瑰紡涓夛細HTTPGet** + +鍒涘缓pod-liveness-httpget.yaml + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-liveness-httpget + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + ports: + - name: nginx-port + containerPort: 80 + livenessProbe: + httpGet: # 鍏跺疄灏辨槸璁块棶http://127.0.0.1:80/hello + scheme: HTTP #鏀寔鐨勫崗璁紝http鎴栬卙ttps + port: 80 #绔彛鍙 + path: /hello #URI鍦板潃 +``` + +鍒涘缓pod锛岃瀵熸晥鏋 + +```shell +# 鍒涘缓Pod +[root@k8s-master01 ~]# kubectl create -f pod-liveness-httpget.yaml +pod/pod-liveness-httpget created + +# 鏌ョ湅Pod璇︽儏 +[root@k8s-master01 ~]# kubectl describe pod pod-liveness-httpget -n dev +....... + Normal Pulled 6s (x3 over 64s) kubelet, node1 Container image "nginx:1.17.1" already present on machine + Normal Created 6s (x3 over 64s) kubelet, node1 Created container nginx + Normal Started 6s (x3 over 63s) kubelet, node1 Started container nginx + Warning Unhealthy 6s (x6 over 56s) kubelet, node1 Liveness probe failed: HTTP probe failed with statuscode: 404 + Normal Killing 6s (x2 over 36s) kubelet, node1 Container nginx failed liveness probe, will be restarted + +# 瑙傚療涓婇潰淇℃伅锛屽皾璇曡闂矾寰勶紝浣嗘槸鏈壘鍒,鍑虹幇404閿欒 +# 绋嶇瓑涓浼氫箣鍚庯紝鍐嶈瀵焢od淇℃伅锛屽氨鍙互鐪嬪埌RESTARTS涓嶅啀鏄0锛岃屾槸涓鐩村闀 +[root@k8s-master01 ~]# kubectl get pod pod-liveness-httpget -n dev +NAME READY STATUS RESTARTS AGE +pod-liveness-httpget 1/1 Running 5 3m17s + +# 褰撶劧鎺ヤ笅鏉ワ紝鍙互淇敼鎴愪竴涓彲浠ヨ闂殑璺緞path锛屾瘮濡/锛屽啀璇曪紝缁撴灉灏辨甯镐簡...... +``` + +鑷虫锛屽凡缁忎娇鐢╨iveness Probe婕旂ず浜嗕笁绉嶆帰娴嬫柟寮忥紝浣嗘槸鏌ョ湅livenessProbe鐨勫瓙灞炴э紝浼氬彂鐜伴櫎浜嗚繖涓夌鏂瑰紡锛岃繕鏈変竴浜涘叾浠栫殑閰嶇疆锛屽湪杩欓噷涓骞惰В閲婁笅锛 + +```shell +[root@k8s-master01 ~]# kubectl explain pod.spec.containers.livenessProbe +FIELDS: + exec + tcpSocket + httpGet + initialDelaySeconds # 瀹瑰櫒鍚姩鍚庣瓑寰呭灏戠鎵ц绗竴娆℃帰娴 + timeoutSeconds # 鎺㈡祴瓒呮椂鏃堕棿銆傞粯璁1绉掞紝鏈灏1绉 + periodSeconds # 鎵ц鎺㈡祴鐨勯鐜囥傞粯璁ゆ槸10绉掞紝鏈灏1绉 + failureThreshold # 杩炵画鎺㈡祴澶辫触澶氬皯娆℃墠琚瀹氫负澶辫触銆傞粯璁ゆ槸3銆傛渶灏忓兼槸1 + successThreshold # 杩炵画鎺㈡祴鎴愬姛澶氬皯娆℃墠琚瀹氫负鎴愬姛銆傞粯璁ゆ槸1 +``` + +涓嬮潰绋嶅井閰嶇疆涓や釜锛屾紨绀轰笅鏁堟灉鍗冲彲锛 + +```yaml +[root@k8s-master01 ~]# more pod-liveness-httpget.yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-liveness-httpget + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + ports: + - name: nginx-port + containerPort: 80 + livenessProbe: + httpGet: + scheme: HTTP + port: 80 + path: / + initialDelaySeconds: 30 # 瀹瑰櫒鍚姩鍚30s寮濮嬫帰娴 + timeoutSeconds: 5 # 鎺㈡祴瓒呮椂鏃堕棿涓5s +``` + +### 5.3.5 閲嶅惎绛栫暐 + +鍦ㄤ笂涓鑺備腑锛屼竴鏃﹀鍣ㄦ帰娴嬪嚭鐜颁簡闂锛宬ubernetes灏变細瀵瑰鍣ㄦ墍鍦ㄧ殑Pod杩涜閲嶅惎锛屽叾瀹炶繖鏄敱pod鐨勯噸鍚瓥鐣ュ喅瀹氱殑锛宲od鐨勯噸鍚瓥鐣ユ湁 3 绉嶏紝鍒嗗埆濡備笅锛 + +- Always 锛氬鍣ㄥけ鏁堟椂锛岃嚜鍔ㄩ噸鍚瀹瑰櫒锛岃繖涔熸槸榛樿鍊笺 +- OnFailure 锛 瀹瑰櫒缁堟杩愯涓旈鍑虹爜涓嶄负0鏃堕噸鍚 +- Never 锛 涓嶈鐘舵佷负浣曪紝閮戒笉閲嶅惎璇ュ鍣 + +閲嶅惎绛栫暐閫傜敤浜巔od瀵硅薄涓殑鎵鏈夊鍣紝棣栨闇瑕侀噸鍚殑瀹瑰櫒锛屽皢鍦ㄥ叾闇瑕佹椂绔嬪嵆杩涜閲嶅惎锛岄殢鍚庡啀娆¢渶瑕侀噸鍚殑鎿嶄綔灏嗙敱kubelet寤惰繜涓娈垫椂闂村悗杩涜锛屼笖鍙嶅鐨勯噸鍚搷浣滅殑寤惰繜鏃堕暱浠ユ涓10s銆20s銆40s銆80s銆160s鍜300s锛300s鏄渶澶у欢杩熸椂闀裤 + +鍒涘缓pod-restartpolicy.yaml锛 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-restartpolicy + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + ports: + - name: nginx-port + containerPort: 80 + livenessProbe: + httpGet: + scheme: HTTP + port: 80 + path: /hello + restartPolicy: Never # 璁剧疆閲嶅惎绛栫暐涓篘ever +``` + +杩愯Pod娴嬭瘯 + +```shell +# 鍒涘缓Pod +[root@k8s-master01 ~]# kubectl create -f pod-restartpolicy.yaml +pod/pod-restartpolicy created + +# 鏌ョ湅Pod璇︽儏锛屽彂鐜皀ginx瀹瑰櫒澶辫触 +[root@k8s-master01 ~]# kubectl describe pods pod-restartpolicy -n dev +...... + Warning Unhealthy 15s (x3 over 35s) kubelet, node1 Liveness probe failed: HTTP probe failed with statuscode: 404 + Normal Killing 15s kubelet, node1 Container nginx failed liveness probe + +# 澶氱瓑涓浼氾紝鍐嶈瀵焢od鐨勯噸鍚鏁帮紝鍙戠幇涓鐩存槸0锛屽苟鏈噸鍚 +[root@k8s-master01 ~]# kubectl get pods pod-restartpolicy -n dev +NAME READY STATUS RESTARTS AGE +pod-restartpolicy 0/1 Running 0 5min42s +``` + +## 5.4 Pod璋冨害 + +鍦ㄩ粯璁ゆ儏鍐典笅锛屼竴涓狿od鍦ㄥ摢涓狽ode鑺傜偣涓婅繍琛岋紝鏄敱Scheduler缁勪欢閲囩敤鐩稿簲鐨勭畻娉曡绠楀嚭鏉ョ殑锛岃繖涓繃绋嬫槸涓嶅彈浜哄伐鎺у埗鐨勩備絾鏄湪瀹為檯浣跨敤涓紝杩欏苟涓嶆弧瓒崇殑闇姹傦紝鍥犱负寰堝鎯呭喌涓嬶紝鎴戜滑鎯虫帶鍒舵煇浜汸od鍒拌揪鏌愪簺鑺傜偣涓婏紝閭d箞搴旇鎬庝箞鍋氬憿锛熻繖灏辫姹備簡瑙ubernetes瀵筆od鐨勮皟搴﹁鍒欙紝kubernetes鎻愪緵浜嗗洓澶х被璋冨害鏂瑰紡锛 + +- 鑷姩璋冨害锛氳繍琛屽湪鍝釜鑺傜偣涓婂畬鍏ㄧ敱Scheduler缁忚繃涓绯诲垪鐨勭畻娉曡绠楀緱鍑 +- 瀹氬悜璋冨害锛歂odeName銆丯odeSelector +- 浜插拰鎬ц皟搴︼細NodeAffinity銆丳odAffinity銆丳odAntiAffinity +- 姹$偣锛堝蹇嶏級璋冨害锛歍aints銆乀oleration + +### 5.4.1 瀹氬悜璋冨害 + +瀹氬悜璋冨害锛屾寚鐨勬槸鍒╃敤鍦╬od涓婂0鏄巒odeName鎴栬卬odeSelector锛屼互姝ゅ皢Pod璋冨害鍒版湡鏈涚殑node鑺傜偣涓娿傛敞鎰忥紝杩欓噷鐨勮皟搴︽槸寮哄埗鐨勶紝杩欏氨鎰忓懗鐫鍗充娇瑕佽皟搴︾殑鐩爣Node涓嶅瓨鍦紝涔熶細鍚戜笂闈㈣繘琛岃皟搴︼紝鍙笉杩噋od杩愯澶辫触鑰屽凡銆 + +**NodeName** + +NodeName鐢ㄤ簬寮哄埗绾︽潫灏哖od璋冨害鍒版寚瀹氱殑Name鐨凬ode鑺傜偣涓娿傝繖绉嶆柟寮忥紝鍏跺疄鏄洿鎺ヨ烦杩嘢cheduler鐨勮皟搴﹂昏緫锛岀洿鎺ュ皢Pod璋冨害鍒版寚瀹氬悕绉扮殑鑺傜偣銆 + +鎺ヤ笅鏉ワ紝瀹為獙涓涓嬶細鍒涘缓涓涓猵od-nodename.yaml鏂囦欢 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-nodename + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + nodeName: node1 # 鎸囧畾璋冨害鍒皀ode1鑺傜偣涓 +``` + +```shell +#鍒涘缓Pod +[root@k8s-master01 ~]# kubectl create -f pod-nodename.yaml +pod/pod-nodename created + +#鏌ョ湅Pod璋冨害鍒癗ODE灞炴э紝纭疄鏄皟搴﹀埌浜唍ode1鑺傜偣涓 +[root@k8s-master01 ~]# kubectl get pods pod-nodename -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE ...... +pod-nodename 1/1 Running 0 56s 10.244.1.87 node1 ...... + +# 鎺ヤ笅鏉ワ紝鍒犻櫎pod锛屼慨鏀筺odeName鐨勫间负node3锛堝苟娌℃湁node3鑺傜偣锛 +[root@k8s-master01 ~]# kubectl delete -f pod-nodename.yaml +pod "pod-nodename" deleted +[root@k8s-master01 ~]# vim pod-nodename.yaml +[root@k8s-master01 ~]# kubectl create -f pod-nodename.yaml +pod/pod-nodename created + +#鍐嶆鏌ョ湅锛屽彂鐜板凡缁忓悜Node3鑺傜偣璋冨害锛屼絾鏄敱浜庝笉瀛樺湪node3鑺傜偣锛屾墍浠od鏃犳硶姝e父杩愯 +[root@k8s-master01 ~]# kubectl get pods pod-nodename -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE ...... +pod-nodename 0/1 Pending 0 6s node3 ...... +``` + +**NodeSelector** + +NodeSelector鐢ㄤ簬灏唒od璋冨害鍒版坊鍔犱簡鎸囧畾鏍囩鐨刵ode鑺傜偣涓娿傚畠鏄氳繃kubernetes鐨刲abel-selector鏈哄埗瀹炵幇鐨勶紝涔熷氨鏄锛屽湪pod鍒涘缓涔嬪墠锛屼細鐢眘cheduler浣跨敤MatchNodeSelector璋冨害绛栫暐杩涜label鍖归厤锛屾壘鍑虹洰鏍噉ode锛岀劧鍚庡皢pod璋冨害鍒扮洰鏍囪妭鐐癸紝璇ュ尮閰嶈鍒欐槸寮哄埗绾︽潫銆 + +鎺ヤ笅鏉ワ紝瀹為獙涓涓嬶細 + +1 棣栧厛鍒嗗埆涓簄ode鑺傜偣娣诲姞鏍囩 + +```shell +[root@k8s-master01 ~]# kubectl label nodes node1 nodeenv=pro +node/node2 labeled +[root@k8s-master01 ~]# kubectl label nodes node2 nodeenv=test +node/node2 labeled +``` + +2 鍒涘缓涓涓猵od-nodeselector.yaml鏂囦欢锛屽苟浣跨敤瀹冨垱寤篜od + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-nodeselector + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + nodeSelector: + nodeenv: pro # 鎸囧畾璋冨害鍒板叿鏈塶odeenv=pro鏍囩鐨勮妭鐐逛笂 +``` + +```shell +#鍒涘缓Pod +[root@k8s-master01 ~]# kubectl create -f pod-nodeselector.yaml +pod/pod-nodeselector created + +#鏌ョ湅Pod璋冨害鍒癗ODE灞炴э紝纭疄鏄皟搴﹀埌浜唍ode1鑺傜偣涓 +[root@k8s-master01 ~]# kubectl get pods pod-nodeselector -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE ...... +pod-nodeselector 1/1 Running 0 47s 10.244.1.87 node1 ...... + +# 鎺ヤ笅鏉ワ紝鍒犻櫎pod锛屼慨鏀筺odeSelector鐨勫间负nodeenv: xxxx锛堜笉瀛樺湪鎵撴湁姝ゆ爣绛剧殑鑺傜偣锛 +[root@k8s-master01 ~]# kubectl delete -f pod-nodeselector.yaml +pod "pod-nodeselector" deleted +[root@k8s-master01 ~]# vim pod-nodeselector.yaml +[root@k8s-master01 ~]# kubectl create -f pod-nodeselector.yaml +pod/pod-nodeselector created + +#鍐嶆鏌ョ湅锛屽彂鐜皃od鏃犳硶姝e父杩愯,Node鐨勫间负none +[root@k8s-master01 ~]# kubectl get pods -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE +pod-nodeselector 0/1 Pending 0 2m20s + +# 鏌ョ湅璇︽儏,鍙戠幇node selector鍖归厤澶辫触鐨勬彁绀 +[root@k8s-master01 ~]# kubectl describe pods pod-nodeselector -n dev +....... +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Warning FailedScheduling default-scheduler 0/3 nodes are available: 3 node(s) didn't match node selector. +``` + +### 5.4.2 浜插拰鎬ц皟搴 + +涓婁竴鑺傦紝浠嬬粛浜嗕袱绉嶅畾鍚戣皟搴︾殑鏂瑰紡锛屼娇鐢ㄨ捣鏉ラ潪甯告柟渚匡紝浣嗘槸涔熸湁涓瀹氱殑闂锛岄偅灏辨槸濡傛灉娌℃湁婊¤冻鏉′欢鐨凬ode锛岄偅涔圥od灏嗕笉浼氳杩愯锛屽嵆浣垮湪闆嗙兢涓繕鏈夊彲鐢∟ode鍒楄〃涔熶笉琛岋紝杩欏氨闄愬埗浜嗗畠鐨勪娇鐢ㄥ満鏅 + +鍩轰簬涓婇潰鐨勯棶棰橈紝kubernetes杩樻彁渚涗簡涓绉嶄翰鍜屾ц皟搴︼紙Affinity锛夈傚畠鍦∟odeSelector鐨勫熀纭涔嬩笂鐨勮繘琛屼簡鎵╁睍锛屽彲浠ラ氳繃閰嶇疆鐨勫舰寮忥紝瀹炵幇浼樺厛閫夋嫨婊¤冻鏉′欢鐨凬ode杩涜璋冨害锛屽鏋滄病鏈夛紝涔熷彲浠ヨ皟搴﹀埌涓嶆弧瓒虫潯浠剁殑鑺傜偣涓婏紝浣胯皟搴︽洿鍔犵伒娲汇 + +Affinity涓昏鍒嗕负涓夌被锛 + +- nodeAffinity(node浜插拰鎬э級: 浠ode涓虹洰鏍囷紝瑙e喅pod鍙互璋冨害鍒板摢浜沶ode鐨勯棶棰 +- podAffinity(pod浜插拰鎬) : 浠od涓虹洰鏍囷紝瑙e喅pod鍙互鍜屽摢浜涘凡瀛樺湪鐨刾od閮ㄧ讲鍦ㄥ悓涓涓嫇鎵戝煙涓殑闂 +- podAntiAffinity(pod鍙嶄翰鍜屾) : 浠od涓虹洰鏍囷紝瑙e喅pod涓嶈兘鍜屽摢浜涘凡瀛樺湪pod閮ㄧ讲鍦ㄥ悓涓涓嫇鎵戝煙涓殑闂 + +> 鍏充簬浜插拰鎬(鍙嶄翰鍜屾)浣跨敤鍦烘櫙鐨勮鏄庯細 +> +> **浜插拰鎬**锛氬鏋滀袱涓簲鐢ㄩ绻佷氦浜掞紝閭e氨鏈夊繀瑕佸埄鐢ㄤ翰鍜屾ц涓や釜搴旂敤鐨勫敖鍙兘鐨勯潬杩戯紝杩欐牱鍙互鍑忓皯鍥犵綉缁滈氫俊鑰屽甫鏉ョ殑鎬ц兘鎹熻椼 +> +> **鍙嶄翰鍜屾**锛氬綋搴旂敤鐨勯噰鐢ㄥ鍓湰閮ㄧ讲鏃讹紝鏈夊繀瑕侀噰鐢ㄥ弽浜插拰鎬ц鍚勪釜搴旂敤瀹炰緥鎵撴暎鍒嗗竷鍦ㄥ悇涓猲ode涓婏紝杩欐牱鍙互鎻愰珮鏈嶅姟鐨勯珮鍙敤鎬с + +**NodeAffinity** + +棣栧厛鏉ョ湅涓涓媊NodeAffinity`鐨勫彲閰嶇疆椤癸細 + +```shell +pod.spec.affinity.nodeAffinity + requiredDuringSchedulingIgnoredDuringExecution Node鑺傜偣蹇呴』婊¤冻鎸囧畾鐨勬墍鏈夎鍒欐墠鍙互锛岀浉褰撲簬纭檺鍒 + nodeSelectorTerms 鑺傜偣閫夋嫨鍒楄〃 + matchFields 鎸夎妭鐐瑰瓧娈靛垪鍑虹殑鑺傜偣閫夋嫨鍣ㄨ姹傚垪琛 + matchExpressions 鎸夎妭鐐规爣绛惧垪鍑虹殑鑺傜偣閫夋嫨鍣ㄨ姹傚垪琛(鎺ㄨ崘) + key 閿 + values 鍊 + operator 鍏崇郴绗 鏀寔Exists, DoesNotExist, In, NotIn, Gt, Lt + preferredDuringSchedulingIgnoredDuringExecution 浼樺厛璋冨害鍒版弧瓒虫寚瀹氱殑瑙勫垯鐨凬ode锛岀浉褰撲簬杞檺鍒 (鍊惧悜) + preference 涓涓妭鐐归夋嫨鍣ㄩ」锛屼笌鐩稿簲鐨勬潈閲嶇浉鍏宠仈 + matchFields 鎸夎妭鐐瑰瓧娈靛垪鍑虹殑鑺傜偣閫夋嫨鍣ㄨ姹傚垪琛 + matchExpressions 鎸夎妭鐐规爣绛惧垪鍑虹殑鑺傜偣閫夋嫨鍣ㄨ姹傚垪琛(鎺ㄨ崘) + key 閿 + values 鍊 + operator 鍏崇郴绗 鏀寔In, NotIn, Exists, DoesNotExist, Gt, Lt + weight 鍊惧悜鏉冮噸锛屽湪鑼冨洿1-100銆 +``` + +```shell +鍏崇郴绗︾殑浣跨敤璇存槑: + +- matchExpressions: + - key: nodeenv # 鍖归厤瀛樺湪鏍囩鐨刱ey涓簄odeenv鐨勮妭鐐 + operator: Exists + - key: nodeenv # 鍖归厤鏍囩鐨刱ey涓簄odeenv,涓攙alue鏄"xxx"鎴"yyy"鐨勮妭鐐 + operator: In + values: ["xxx","yyy"] + - key: nodeenv # 鍖归厤鏍囩鐨刱ey涓簄odeenv,涓攙alue澶т簬"xxx"鐨勮妭鐐 + operator: Gt + values: "xxx" +``` + +鎺ヤ笅鏉ラ鍏堟紨绀轰竴涓媊requiredDuringSchedulingIgnoredDuringExecution` , + +鍒涘缓pod-nodeaffinity-required.yaml + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-nodeaffinity-required + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + affinity: #浜插拰鎬ц缃 + nodeAffinity: #璁剧疆node浜插拰鎬 + requiredDuringSchedulingIgnoredDuringExecution: # 纭檺鍒 + nodeSelectorTerms: + - matchExpressions: # 鍖归厤env鐨勫煎湪["xxx","yyy"]涓殑鏍囩 + - key: nodeenv + operator: In + values: ["xxx","yyy"] +``` + +```shell +# 鍒涘缓pod +[root@k8s-master01 ~]# kubectl create -f pod-nodeaffinity-required.yaml +pod/pod-nodeaffinity-required created + +# 鏌ョ湅pod鐘舵 锛堣繍琛屽け璐ワ級 +[root@k8s-master01 ~]# kubectl get pods pod-nodeaffinity-required -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE ...... +pod-nodeaffinity-required 0/1 Pending 0 16s ...... + +# 鏌ョ湅Pod鐨勮鎯 +# 鍙戠幇璋冨害澶辫触锛屾彁绀簄ode閫夋嫨澶辫触 +[root@k8s-master01 ~]# kubectl describe pod pod-nodeaffinity-required -n dev +...... + Warning FailedScheduling default-scheduler 0/3 nodes are available: 3 node(s) didn't match node selector. + Warning FailedScheduling default-scheduler 0/3 nodes are available: 3 node(s) didn't match node selector. + +#鎺ヤ笅鏉ワ紝鍋滄pod +[root@k8s-master01 ~]# kubectl delete -f pod-nodeaffinity-required.yaml +pod "pod-nodeaffinity-required" deleted + +# 淇敼鏂囦欢锛屽皢values: ["xxx","yyy"]------> ["pro","yyy"] +[root@k8s-master01 ~]# vim pod-nodeaffinity-required.yaml + +# 鍐嶆鍚姩 +[root@k8s-master01 ~]# kubectl create -f pod-nodeaffinity-required.yaml +pod/pod-nodeaffinity-required created + +# 姝ゆ椂鏌ョ湅锛屽彂鐜拌皟搴︽垚鍔燂紝宸茬粡灏唒od璋冨害鍒颁簡node1涓 +[root@k8s-master01 ~]# kubectl get pods pod-nodeaffinity-required -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE ...... +pod-nodeaffinity-required 1/1 Running 0 11s 10.244.1.89 node1 ...... +``` + +鎺ヤ笅鏉ュ啀婕旂ず涓涓媊requiredDuringSchedulingIgnoredDuringExecution` , + +鍒涘缓pod-nodeaffinity-preferred.yaml + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-nodeaffinity-preferred + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + affinity: #浜插拰鎬ц缃 + nodeAffinity: #璁剧疆node浜插拰鎬 + preferredDuringSchedulingIgnoredDuringExecution: # 杞檺鍒 + - weight: 1 + preference: + matchExpressions: # 鍖归厤env鐨勫煎湪["xxx","yyy"]涓殑鏍囩(褰撳墠鐜娌℃湁) + - key: nodeenv + operator: In + values: ["xxx","yyy"] +``` + +```shell +# 鍒涘缓pod +[root@k8s-master01 ~]# kubectl create -f pod-nodeaffinity-preferred.yaml +pod/pod-nodeaffinity-preferred created + +# 鏌ョ湅pod鐘舵 锛堣繍琛屾垚鍔燂級 +[root@k8s-master01 ~]# kubectl get pod pod-nodeaffinity-preferred -n dev +NAME READY STATUS RESTARTS AGE +pod-nodeaffinity-preferred 1/1 Running 0 40s +``` + +``` +NodeAffinity瑙勫垯璁剧疆鐨勬敞鎰忎簨椤癸細 + 1 濡傛灉鍚屾椂瀹氫箟浜唍odeSelector鍜宯odeAffinity锛岄偅涔堝繀椤讳袱涓潯浠堕兘寰楀埌婊¤冻锛孭od鎵嶈兘杩愯鍦ㄦ寚瀹氱殑Node涓 + 2 濡傛灉nodeAffinity鎸囧畾浜嗗涓猲odeSelectorTerms锛岄偅涔堝彧闇瑕佸叾涓竴涓兘澶熷尮閰嶆垚鍔熷嵆鍙 + 3 濡傛灉涓涓猲odeSelectorTerms涓湁澶氫釜matchExpressions 锛屽垯涓涓妭鐐瑰繀椤绘弧瓒虫墍鏈夌殑鎵嶈兘鍖归厤鎴愬姛 + 4 濡傛灉涓涓猵od鎵鍦ㄧ殑Node鍦≒od杩愯鏈熼棿鍏舵爣绛惧彂鐢熶簡鏀瑰彉锛屼笉鍐嶇鍚堣Pod鐨勮妭鐐逛翰鍜屾ч渶姹傦紝鍒欑郴缁熷皢蹇界暐姝ゅ彉鍖 +``` + +**PodAffinity** + +PodAffinity涓昏瀹炵幇浠ヨ繍琛岀殑Pod涓哄弬鐓э紝瀹炵幇璁╂柊鍒涘缓鐨凱od璺熷弬鐓od鍦ㄤ竴涓尯鍩熺殑鍔熻兘銆 + +棣栧厛鏉ョ湅涓涓媊PodAffinity`鐨勫彲閰嶇疆椤癸細 + +```shell +pod.spec.affinity.podAffinity + requiredDuringSchedulingIgnoredDuringExecution 纭檺鍒 + namespaces 鎸囧畾鍙傜収pod鐨刵amespace + topologyKey 鎸囧畾璋冨害浣滅敤鍩 + labelSelector 鏍囩閫夋嫨鍣 + matchExpressions 鎸夎妭鐐规爣绛惧垪鍑虹殑鑺傜偣閫夋嫨鍣ㄨ姹傚垪琛(鎺ㄨ崘) + key 閿 + values 鍊 + operator 鍏崇郴绗 鏀寔In, NotIn, Exists, DoesNotExist. + matchLabels 鎸囧涓猰atchExpressions鏄犲皠鐨勫唴瀹 + preferredDuringSchedulingIgnoredDuringExecution 杞檺鍒 + podAffinityTerm 閫夐」 + namespaces + topologyKey + labelSelector + matchExpressions + key 閿 + values 鍊 + operator + matchLabels + weight 鍊惧悜鏉冮噸锛屽湪鑼冨洿1-100 +``` + +``` +topologyKey鐢ㄤ簬鎸囧畾璋冨害鏃朵綔鐢ㄥ煙,渚嬪: + 濡傛灉鎸囧畾涓簁ubernetes.io/hostname锛岄偅灏辨槸浠ode鑺傜偣涓哄尯鍒嗚寖鍥 + 濡傛灉鎸囧畾涓篵eta.kubernetes.io/os,鍒欎互Node鑺傜偣鐨勬搷浣滅郴缁熺被鍨嬫潵鍖哄垎 +``` + +鎺ヤ笅鏉ワ紝婕旂ず涓媊requiredDuringSchedulingIgnoredDuringExecution`, + +1锛夐鍏堝垱寤轰竴涓弬鐓od锛宲od-podaffinity-target.yaml锛 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-podaffinity-target + namespace: dev + labels: + podenv: pro #璁剧疆鏍囩 +spec: + containers: + - name: nginx + image: nginx:1.17.1 + nodeName: node1 # 灏嗙洰鏍噋od鍚嶇‘鎸囧畾鍒皀ode1涓 +``` + +```shell +# 鍚姩鐩爣pod +[root@k8s-master01 ~]# kubectl create -f pod-podaffinity-target.yaml +pod/pod-podaffinity-target created + +# 鏌ョ湅pod鐘跺喌 +[root@k8s-master01 ~]# kubectl get pods pod-podaffinity-target -n dev +NAME READY STATUS RESTARTS AGE +pod-podaffinity-target 1/1 Running 0 4s +``` + +2锛夊垱寤簆od-podaffinity-required.yaml锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-podaffinity-required + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + affinity: #浜插拰鎬ц缃 + podAffinity: #璁剧疆pod浜插拰鎬 + requiredDuringSchedulingIgnoredDuringExecution: # 纭檺鍒 + - labelSelector: + matchExpressions: # 鍖归厤env鐨勫煎湪["xxx","yyy"]涓殑鏍囩 + - key: podenv + operator: In + values: ["xxx","yyy"] + topologyKey: kubernetes.io/hostname +``` + +涓婇潰閰嶇疆琛ㄨ揪鐨勬剰鎬濇槸锛氭柊Pod蹇呴』瑕佷笌鎷ユ湁鏍囩nodeenv=xxx鎴栬卬odeenv=yyy鐨刾od鍦ㄥ悓涓Node涓婏紝鏄剧劧鐜板湪娌℃湁杩欐牱pod锛屾帴涓嬫潵锛岃繍琛屾祴璇曚竴涓嬨 + +```shell +# 鍚姩pod +[root@k8s-master01 ~]# kubectl create -f pod-podaffinity-required.yaml +pod/pod-podaffinity-required created + +# 鏌ョ湅pod鐘舵侊紝鍙戠幇鏈繍琛 +[root@k8s-master01 ~]# kubectl get pods pod-podaffinity-required -n dev +NAME READY STATUS RESTARTS AGE +pod-podaffinity-required 0/1 Pending 0 9s + +# 鏌ョ湅璇︾粏淇℃伅 +[root@k8s-master01 ~]# kubectl describe pods pod-podaffinity-required -n dev +...... +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Warning FailedScheduling default-scheduler 0/3 nodes are available: 2 node(s) didn't match pod affinity rules, 1 node(s) had taints that the pod didn't tolerate. + +# 鎺ヤ笅鏉ヤ慨鏀 values: ["xxx","yyy"]----->values:["pro","yyy"] +# 鎰忔濇槸锛氭柊Pod蹇呴』瑕佷笌鎷ユ湁鏍囩nodeenv=xxx鎴栬卬odeenv=yyy鐨刾od鍦ㄥ悓涓Node涓 +[root@k8s-master01 ~]# vim pod-podaffinity-required.yaml + +# 鐒跺悗閲嶆柊鍒涘缓pod锛屾煡鐪嬫晥鏋 +[root@k8s-master01 ~]# kubectl delete -f pod-podaffinity-required.yaml +pod "pod-podaffinity-required" deleted +[root@k8s-master01 ~]# kubectl create -f pod-podaffinity-required.yaml +pod/pod-podaffinity-required created + +# 鍙戠幇姝ゆ椂Pod杩愯姝e父 +[root@k8s-master01 ~]# kubectl get pods pod-podaffinity-required -n dev +NAME READY STATUS RESTARTS AGE LABELS +pod-podaffinity-required 1/1 Running 0 6s +``` + +鍏充簬`PodAffinity`鐨 `preferredDuringSchedulingIgnoredDuringExecution`锛岃繖閲屼笉鍐嶆紨绀恒 + +**PodAntiAffinity** + +PodAntiAffinity涓昏瀹炵幇浠ヨ繍琛岀殑Pod涓哄弬鐓э紝璁╂柊鍒涘缓鐨凱od璺熷弬鐓od涓嶅湪涓涓尯鍩熶腑鐨勫姛鑳姐 + +瀹冪殑閰嶇疆鏂瑰紡鍜岄夐」璺烶odAffinty鏄竴鏍风殑锛岃繖閲屼笉鍐嶅仛璇︾粏瑙i噴锛岀洿鎺ュ仛涓涓祴璇曟渚嬨 + +1锛夌户缁娇鐢ㄤ笂涓渚嬩腑鐩爣pod + +```shell +[root@k8s-master01 ~]# kubectl get pods -n dev -o wide --show-labels +NAME READY STATUS RESTARTS AGE IP NODE LABELS +pod-podaffinity-required 1/1 Running 0 3m29s 10.244.1.38 node1 +pod-podaffinity-target 1/1 Running 0 9m25s 10.244.1.37 node1 podenv=pro +``` + +2锛夊垱寤簆od-podantiaffinity-required.yaml锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-podantiaffinity-required + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + affinity: #浜插拰鎬ц缃 + podAntiAffinity: #璁剧疆pod浜插拰鎬 + requiredDuringSchedulingIgnoredDuringExecution: # 纭檺鍒 + - labelSelector: + matchExpressions: # 鍖归厤podenv鐨勫煎湪["pro"]涓殑鏍囩 + - key: podenv + operator: In + values: ["pro"] + topologyKey: kubernetes.io/hostname +``` + +涓婇潰閰嶇疆琛ㄨ揪鐨勬剰鎬濇槸锛氭柊Pod蹇呴』瑕佷笌鎷ユ湁鏍囩nodeenv=pro鐨刾od涓嶅湪鍚屼竴Node涓婏紝杩愯娴嬭瘯涓涓嬨 + +```shell +# 鍒涘缓pod +[root@k8s-master01 ~]# kubectl create -f pod-podantiaffinity-required.yaml +pod/pod-podantiaffinity-required created + +# 鏌ョ湅pod +# 鍙戠幇璋冨害鍒颁簡node2涓 +[root@k8s-master01 ~]# kubectl get pods pod-podantiaffinity-required -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE .. +pod-podantiaffinity-required 1/1 Running 0 30s 10.244.1.96 node2 .. +``` + +### 5.4.3 姹$偣鍜屽蹇 + +瀹炶返涓紝鑻ラ泦缇や腑鐨勪竴缁勬満鍣ㄤ笓鐢ㄤ簬涓鸿繍琛岄潪鐢熶骇鍨嬬殑瀹瑰櫒搴旂敤鑰屽缃紝鑰屼笖瀹冧滑鍙兘闅忔椂鎸夐渶涓婁笅绾匡紝閭d箞灏卞簲璇ヤ负鍏舵坊鍔犳薄鐐逛俊鎭紝浠ョ‘淇濅粎閭d簺鑳藉蹇嶆姹$偣鐨勯潪鐢熶骇鍨婸od瀵硅薄鍙互璋冨害鍏朵笂銆傚彟澶栵紝鏌愪簺鏈夌潃鐗规畩纭欢鐨勮妭鐐归渶瑕佷笓鐢ㄤ簬杩愯涓绫绘湁鐫姝ょ被纭欢璧勬簮闇姹傜殑Pod瀵硅薄鏃讹紝渚嬪锛岄偅浜涙湁鐫SSD鎴朑PU鐨勮澶囷紝涔熷簲璇ヤ负鍏舵坊鍔犳薄鐐逛俊鎭互鎺掗櫎鍏朵粬鐨凱od瀵硅薄銆 + +**姹$偣锛圱aints锛** + +鍓嶉潰鐨勮皟搴︽柟寮忛兘鏄珯鍦≒od鐨勮搴︿笂锛岄氳繃鍦≒od涓婃坊鍔犲睘鎬э紝鏉ョ‘瀹歅od鏄惁瑕佽皟搴﹀埌鎸囧畾鐨凬ode涓婏紝鍏跺疄鎴戜滑涔熷彲浠ョ珯鍦∟ode鐨勮搴︿笂锛岄氳繃鍦∟ode涓婃坊鍔**姹$偣**灞炴э紝鏉ュ喅瀹氭槸鍚﹀厑璁窹od璋冨害杩囨潵銆 + +Node琚缃笂姹$偣涔嬪悗灏卞拰Pod涔嬮棿瀛樺湪浜嗕竴绉嶇浉鏂ョ殑鍏崇郴锛岃繘鑰屾嫆缁漃od璋冨害杩涙潵锛岀敋鑷冲彲浠ュ皢宸茬粡瀛樺湪鐨凱od椹遍愬嚭鍘汇 + +姹$偣鐨勬牸寮忎负锛歚key=value:effect`, key鍜寁alue鏄薄鐐圭殑鏍囩锛宔ffect鎻忚堪姹$偣鐨勪綔鐢紝鏀寔濡備笅涓変釜閫夐」锛 + +- PreferNoSchedule锛歬ubernetes灏嗗敖閲忛伩鍏嶆妸Pod璋冨害鍒板叿鏈夎姹$偣鐨凬ode涓婏紝闄ら潪娌℃湁鍏朵粬鑺傜偣鍙皟搴 +- NoSchedule锛歬ubernetes灏嗕笉浼氭妸Pod璋冨害鍒板叿鏈夎姹$偣鐨凬ode涓婏紝浣嗕笉浼氬奖鍝嶅綋鍓峃ode涓婂凡瀛樺湪鐨凱od +- NoExecute锛歬ubernetes灏嗕笉浼氭妸Pod璋冨害鍒板叿鏈夎姹$偣鐨凬ode涓婏紝鍚屾椂涔熶細灏哊ode涓婂凡瀛樺湪鐨凱od椹辩 + +![image-20200605021606508](Kubenetes.assets/image-20200605021831545.png) + +浣跨敤kubectl璁剧疆鍜屽幓闄ゆ薄鐐圭殑鍛戒护绀轰緥濡備笅锛 + +```shell +# 璁剧疆姹$偣 +kubectl taint nodes node1 key=value:effect + +# 鍘婚櫎姹$偣 +kubectl taint nodes node1 key:effect- + +# 鍘婚櫎鎵鏈夋薄鐐 +kubectl taint nodes node1 key- +``` + +鎺ヤ笅鏉ワ紝婕旂ず涓嬫薄鐐圭殑鏁堟灉锛 + +1. 鍑嗗鑺傜偣node1锛堜负浜嗘紨绀烘晥鏋滄洿鍔犳槑鏄撅紝鏆傛椂鍋滄node2鑺傜偣锛 +2. 涓簄ode1鑺傜偣璁剧疆涓涓薄鐐: `tag=heima:PreferNoSchedule`锛涚劧鍚庡垱寤簆od1( pod1 鍙互 ) +3. 淇敼涓簄ode1鑺傜偣璁剧疆涓涓薄鐐: `tag=heima:NoSchedule`锛涚劧鍚庡垱寤簆od2( pod1 姝e父 pod2 澶辫触 ) +4. 淇敼涓簄ode1鑺傜偣璁剧疆涓涓薄鐐: `tag=heima:NoExecute`锛涚劧鍚庡垱寤簆od3 ( 3涓猵od閮藉け璐 ) + +```shell +# 涓簄ode1璁剧疆姹$偣(PreferNoSchedule) +[root@k8s-master01 ~]# kubectl taint nodes node1 tag=heima:PreferNoSchedule + +# 鍒涘缓pod1 +[root@k8s-master01 ~]# kubectl run taint1 --image=nginx:1.17.1 -n dev +[root@k8s-master01 ~]# kubectl get pods -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE +taint1-7665f7fd85-574h4 1/1 Running 0 2m24s 10.244.1.59 node1 + +# 涓簄ode1璁剧疆姹$偣(鍙栨秷PreferNoSchedule锛岃缃甆oSchedule) +[root@k8s-master01 ~]# kubectl taint nodes node1 tag:PreferNoSchedule- +[root@k8s-master01 ~]# kubectl taint nodes node1 tag=heima:NoSchedule + +# 鍒涘缓pod2 +[root@k8s-master01 ~]# kubectl run taint2 --image=nginx:1.17.1 -n dev +[root@k8s-master01 ~]# kubectl get pods taint2 -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE +taint1-7665f7fd85-574h4 1/1 Running 0 2m24s 10.244.1.59 node1 +taint2-544694789-6zmlf 0/1 Pending 0 21s + +# 涓簄ode1璁剧疆姹$偣(鍙栨秷NoSchedule锛岃缃甆oExecute) +[root@k8s-master01 ~]# kubectl taint nodes node1 tag:NoSchedule- +[root@k8s-master01 ~]# kubectl taint nodes node1 tag=heima:NoExecute + +# 鍒涘缓pod3 +[root@k8s-master01 ~]# kubectl run taint3 --image=nginx:1.17.1 -n dev +[root@k8s-master01 ~]# kubectl get pods -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE NOMINATED +taint1-7665f7fd85-htkmp 0/1 Pending 0 35s +taint2-544694789-bn7wb 0/1 Pending 0 35s +taint3-6d78dbd749-tktkq 0/1 Pending 0 6s +``` + +``` +灏忔彁绀猴細 + 浣跨敤kubeadm鎼缓鐨勯泦缇わ紝榛樿灏变細缁檓aster鑺傜偣娣诲姞涓涓薄鐐规爣璁,鎵浠od灏变笉浼氳皟搴﹀埌master鑺傜偣涓. +``` + +**瀹瑰繊锛圱oleration锛** + +涓婇潰浠嬬粛浜嗘薄鐐圭殑浣滅敤锛屾垜浠彲浠ュ湪node涓婃坊鍔犳薄鐐圭敤浜庢嫆缁漰od璋冨害涓婃潵锛屼絾鏄鏋滃氨鏄兂灏嗕竴涓猵od璋冨害鍒颁竴涓湁姹$偣鐨刵ode涓婂幓锛岃繖鏃跺欏簲璇ユ庝箞鍋氬憿锛熻繖灏辫浣跨敤鍒**瀹瑰繊**銆 + +![image-20200514095913741](Kubenetes.assets/image-20200514095913741.png) + +> 姹$偣灏辨槸鎷掔粷锛屽蹇嶅氨鏄拷鐣ワ紝Node閫氳繃姹$偣鎷掔粷pod璋冨害涓婂幓锛孭od閫氳繃瀹瑰繊蹇界暐鎷掔粷 + +涓嬮潰鍏堥氳繃涓涓渚嬬湅涓嬫晥鏋滐細 + +1. 涓婁竴灏忚妭锛屽凡缁忓湪node1鑺傜偣涓婃墦涓婁簡`NoExecute`鐨勬薄鐐癸紝姝ゆ椂pod鏄皟搴︿笉涓婂幓鐨 +2. 鏈皬鑺傦紝鍙互閫氳繃缁檖od娣诲姞瀹瑰繊锛岀劧鍚庡皢鍏惰皟搴︿笂鍘 + +鍒涘缓pod-toleration.yaml,鍐呭濡備笅 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-toleration + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + tolerations: # 娣诲姞瀹瑰繊 + - key: "tag" # 瑕佸蹇嶇殑姹$偣鐨刱ey + operator: "Equal" # 鎿嶄綔绗 + value: "heima" # 瀹瑰繊鐨勬薄鐐圭殑value + effect: "NoExecute" # 娣诲姞瀹瑰繊鐨勮鍒欙紝杩欓噷蹇呴』鍜屾爣璁扮殑姹$偣瑙勫垯鐩稿悓 +``` + +```shell +# 娣诲姞瀹瑰繊涔嬪墠鐨刾od +[root@k8s-master01 ~]# kubectl get pods -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE NOMINATED +pod-toleration 0/1 Pending 0 3s + +# 娣诲姞瀹瑰繊涔嬪悗鐨刾od +[root@k8s-master01 ~]# kubectl get pods -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE NOMINATED +pod-toleration 1/1 Running 0 3s 10.244.1.62 node1 +``` + +涓嬮潰鐪嬩竴涓嬪蹇嶇殑璇︾粏閰嶇疆: + +```shell +[root@k8s-master01 ~]# kubectl explain pod.spec.tolerations +...... +FIELDS: + key # 瀵瑰簲鐫瑕佸蹇嶇殑姹$偣鐨勯敭锛岀┖鎰忓懗鐫鍖归厤鎵鏈夌殑閿 + value # 瀵瑰簲鐫瑕佸蹇嶇殑姹$偣鐨勫 + operator # key-value鐨勮繍绠楃锛屾敮鎸丒qual鍜孍xists锛堥粯璁わ級 + effect # 瀵瑰簲姹$偣鐨別ffect锛岀┖鎰忓懗鐫鍖归厤鎵鏈夊奖鍝 + tolerationSeconds # 瀹瑰繊鏃堕棿, 褰揺ffect涓篘oExecute鏃剁敓鏁堬紝琛ㄧずpod鍦∟ode涓婄殑鍋滅暀鏃堕棿 +``` + + + +# 6. Pod鎺у埗鍣ㄨ瑙 + +## 6.1 Pod鎺у埗鍣ㄤ粙缁 + +Pod鏄痥ubernetes鐨勬渶灏忕鐞嗗崟鍏冿紝鍦╧ubernetes涓紝鎸夌収pod鐨勫垱寤烘柟寮忓彲浠ュ皢鍏跺垎涓轰袱绫伙細 + +- 鑷富寮弍od锛歬ubernetes鐩存帴鍒涘缓鍑烘潵鐨凱od锛岃繖绉峱od鍒犻櫎鍚庡氨娌℃湁浜嗭紝涔熶笉浼氶噸寤 +- 鎺у埗鍣ㄥ垱寤虹殑pod锛歬ubernetes閫氳繃鎺у埗鍣ㄥ垱寤虹殑pod锛岃繖绉峱od鍒犻櫎浜嗕箣鍚庤繕浼氳嚜鍔ㄩ噸寤 + +> **`浠涔堟槸Pod鎺у埗鍣╜** +> +> Pod鎺у埗鍣ㄦ槸绠$悊pod鐨勪腑闂村眰锛屼娇鐢≒od鎺у埗鍣ㄤ箣鍚庯紝鍙渶瑕佸憡璇塒od鎺у埗鍣紝鎯宠澶氬皯涓粈涔堟牱鐨凱od灏卞彲浠ヤ簡锛屽畠浼氬垱寤哄嚭婊¤冻鏉′欢鐨凱od骞剁‘淇濇瘡涓涓狿od璧勬簮澶勪簬鐢ㄦ埛鏈熸湜鐨勭洰鏍囩姸鎬併傚鏋淧od璧勬簮鍦ㄨ繍琛屼腑鍑虹幇鏁呴殰锛屽畠浼氬熀浜庢寚瀹氱瓥鐣ラ噸鏂扮紪鎺扨od銆 + +鍦╧ubernetes涓紝鏈夊緢澶氱被鍨嬬殑pod鎺у埗鍣紝姣忕閮芥湁鑷繁鐨勯傚悎鐨勫満鏅紝甯歌鐨勬湁涓嬮潰杩欎簺锛 + +- ReplicationController锛氭瘮杈冨師濮嬬殑pod鎺у埗鍣紝宸茬粡琚簾寮冿紝鐢盧eplicaSet鏇夸唬 +- ReplicaSet锛氫繚璇佸壇鏈暟閲忎竴鐩寸淮鎸佸湪鏈熸湜鍊硷紝骞舵敮鎸乸od鏁伴噺鎵╃缉瀹癸紝闀滃儚鐗堟湰鍗囩骇 +- Deployment锛氶氳繃鎺у埗ReplicaSet鏉ユ帶鍒禤od锛屽苟鏀寔婊氬姩鍗囩骇銆佸洖閫鐗堟湰 +- Horizontal Pod Autoscaler锛氬彲浠ユ牴鎹泦缇よ礋杞借嚜鍔ㄦ按骞宠皟鏁碢od鐨勬暟閲忥紝瀹炵幇鍓婂嘲濉胺 +- DaemonSet锛氬湪闆嗙兢涓殑鎸囧畾Node涓婅繍琛屼笖浠呰繍琛屼竴涓壇鏈紝涓鑸敤浜庡畧鎶よ繘绋嬬被鐨勪换鍔 +- Job锛氬畠鍒涘缓鍑烘潵鐨刾od鍙瀹屾垚浠诲姟灏辩珛鍗抽鍑猴紝涓嶉渶瑕侀噸鍚垨閲嶅缓锛岀敤浜庢墽琛屼竴娆℃т换鍔 +- Cronjob锛氬畠鍒涘缓鐨凱od璐熻矗鍛ㄦ湡鎬т换鍔℃帶鍒讹紝涓嶉渶瑕佹寔缁悗鍙拌繍琛 +- StatefulSet锛氱鐞嗘湁鐘舵佸簲鐢 + +## 6.2 ReplicaSet(RS) + +ReplicaSet鐨勪富瑕佷綔鐢ㄦ槸**淇濊瘉涓瀹氭暟閲忕殑pod姝e父杩愯**锛屽畠浼氭寔缁洃鍚繖浜汸od鐨勮繍琛岀姸鎬侊紝涓鏃od鍙戠敓鏁呴殰锛屽氨浼氶噸鍚垨閲嶅缓銆傚悓鏃跺畠杩樻敮鎸佸pod鏁伴噺鐨勬墿缂╁鍜岄暅鍍忕増鏈殑鍗囬檷绾с + +![img](Kubenetes.assets/image-20200612005334159.png) + +ReplicaSet鐨勮祫婧愭竻鍗曟枃浠讹細 + +```yaml +apiVersion: apps/v1 # 鐗堟湰鍙 +kind: ReplicaSet # 绫诲瀷 +metadata: # 鍏冩暟鎹 + name: # rs鍚嶇О + namespace: # 鎵灞炲懡鍚嶇┖闂 + labels: #鏍囩 + controller: rs +spec: # 璇︽儏鎻忚堪 + replicas: 3 # 鍓湰鏁伴噺 + selector: # 閫夋嫨鍣紝閫氳繃瀹冩寚瀹氳鎺у埗鍣ㄧ鐞嗗摢浜沺od + matchLabels: # Labels鍖归厤瑙勫垯 + app: nginx-pod + matchExpressions: # Expressions鍖归厤瑙勫垯 + - {key: app, operator: In, values: [nginx-pod]} + template: # 妯℃澘锛屽綋鍓湰鏁伴噺涓嶈冻鏃讹紝浼氭牴鎹笅闈㈢殑妯℃澘鍒涘缓pod鍓湰 + metadata: + labels: + app: nginx-pod + spec: + containers: + - name: nginx + image: nginx:1.17.1 + ports: + - containerPort: 80 +``` + +鍦ㄨ繖閲岄潰锛岄渶瑕佹柊浜嗚В鐨勯厤缃」灏辨槸`spec`涓嬮潰鍑犱釜閫夐」锛 + +- replicas锛氭寚瀹氬壇鏈暟閲忥紝鍏跺疄灏辨槸褰撳墠rs鍒涘缓鍑烘潵鐨刾od鐨勬暟閲忥紝榛樿涓1 + +- selector锛氶夋嫨鍣紝瀹冪殑浣滅敤鏄缓绔媝od鎺у埗鍣ㄥ拰pod涔嬮棿鐨勫叧鑱斿叧绯伙紝閲囩敤鐨凩abel Selector鏈哄埗 + + 鍦╬od妯℃澘涓婂畾涔塴abel锛屽湪鎺у埗鍣ㄤ笂瀹氫箟閫夋嫨鍣紝灏卞彲浠ヨ〃鏄庡綋鍓嶆帶鍒跺櫒鑳界鐞嗗摢浜沺od浜 + +- template锛氭ā鏉匡紝灏辨槸褰撳墠鎺у埗鍣ㄥ垱寤簆od鎵浣跨敤鐨勬ā鏉挎澘锛岄噷闈㈠叾瀹炲氨鏄墠涓绔犲杩囩殑pod鐨勫畾涔 + +**鍒涘缓ReplicaSet** + +鍒涘缓pc-replicaset.yaml鏂囦欢锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: apps/v1 +kind: ReplicaSet +metadata: + name: pc-replicaset + namespace: dev +spec: + replicas: 3 + selector: + matchLabels: + app: nginx-pod + template: + metadata: + labels: + app: nginx-pod + spec: + containers: + - name: nginx + image: nginx:1.17.1 +``` + +```shell +# 鍒涘缓rs +[root@k8s-master01 ~]# kubectl create -f pc-replicaset.yaml +replicaset.apps/pc-replicaset created + +# 鏌ョ湅rs +# DESIRED:鏈熸湜鍓湰鏁伴噺 +# CURRENT:褰撳墠鍓湰鏁伴噺 +# READY:宸茬粡鍑嗗濂芥彁渚涙湇鍔$殑鍓湰鏁伴噺 +[root@k8s-master01 ~]# kubectl get rs pc-replicaset -n dev -o wide +NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR +pc-replicaset 3 3 3 22s nginx nginx:1.17.1 app=nginx-pod + +# 鏌ョ湅褰撳墠鎺у埗鍣ㄥ垱寤哄嚭鏉ョ殑pod +# 杩欓噷鍙戠幇鎺у埗鍣ㄥ垱寤哄嚭鏉ョ殑pod鐨勫悕绉版槸鍦ㄦ帶鍒跺櫒鍚嶇О鍚庨潰鎷兼帴浜-xxxxx闅忔満鐮 +[root@k8s-master01 ~]# kubectl get pod -n dev +NAME READY STATUS RESTARTS AGE +pc-replicaset-6vmvt 1/1 Running 0 54s +pc-replicaset-fmb8f 1/1 Running 0 54s +pc-replicaset-snrk2 1/1 Running 0 54s +``` + +**鎵╃缉瀹** + +```shell +# 缂栬緫rs鐨勫壇鏈暟閲忥紝淇敼spec:replicas: 6鍗冲彲 +[root@k8s-master01 ~]# kubectl edit rs pc-replicaset -n dev +replicaset.apps/pc-replicaset edited + +# 鏌ョ湅pod +[root@k8s-master01 ~]# kubectl get pods -n dev +NAME READY STATUS RESTARTS AGE +pc-replicaset-6vmvt 1/1 Running 0 114m +pc-replicaset-cftnp 1/1 Running 0 10s +pc-replicaset-fjlm6 1/1 Running 0 10s +pc-replicaset-fmb8f 1/1 Running 0 114m +pc-replicaset-s2whj 1/1 Running 0 10s +pc-replicaset-snrk2 1/1 Running 0 114m + +# 褰撶劧涔熷彲浠ョ洿鎺ヤ娇鐢ㄥ懡浠ゅ疄鐜 +# 浣跨敤scale鍛戒护瀹炵幇鎵╃缉瀹癸紝 鍚庨潰--replicas=n鐩存帴鎸囧畾鐩爣鏁伴噺鍗冲彲 +[root@k8s-master01 ~]# kubectl scale rs pc-replicaset --replicas=2 -n dev +replicaset.apps/pc-replicaset scaled + +# 鍛戒护杩愯瀹屾瘯锛岀珛鍗虫煡鐪嬶紝鍙戠幇宸茬粡鏈4涓紑濮嬪噯澶囬鍑轰簡 +[root@k8s-master01 ~]# kubectl get pods -n dev +NAME READY STATUS RESTARTS AGE +pc-replicaset-6vmvt 0/1 Terminating 0 118m +pc-replicaset-cftnp 0/1 Terminating 0 4m17s +pc-replicaset-fjlm6 0/1 Terminating 0 4m17s +pc-replicaset-fmb8f 1/1 Running 0 118m +pc-replicaset-s2whj 0/1 Terminating 0 4m17s +pc-replicaset-snrk2 1/1 Running 0 118m + +#绋嶇瓑鐗囧埢锛屽氨鍙墿涓2涓簡 +[root@k8s-master01 ~]# kubectl get pods -n dev +NAME READY STATUS RESTARTS AGE +pc-replicaset-fmb8f 1/1 Running 0 119m +pc-replicaset-snrk2 1/1 Running 0 119m +``` + +**闀滃儚鍗囩骇** + +```shell +# 缂栬緫rs鐨勫鍣ㄩ暅鍍 - image: nginx:1.17.2 +[root@k8s-master01 ~]# kubectl edit rs pc-replicaset -n dev +replicaset.apps/pc-replicaset edited + +# 鍐嶆鏌ョ湅锛屽彂鐜伴暅鍍忕増鏈凡缁忓彉鏇翠簡 +[root@k8s-master01 ~]# kubectl get rs -n dev -o wide +NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES ... +pc-replicaset 2 2 2 140m nginx nginx:1.17.2 ... + +# 鍚屾牱鐨勯亾鐞嗭紝涔熷彲浠ヤ娇鐢ㄥ懡浠ゅ畬鎴愯繖涓伐浣 +# kubectl set image rs rs鍚嶇О 瀹瑰櫒=闀滃儚鐗堟湰 -n namespace +[root@k8s-master01 ~]# kubectl set image rs pc-replicaset nginx=nginx:1.17.1 -n dev +replicaset.apps/pc-replicaset image updated + +# 鍐嶆鏌ョ湅锛屽彂鐜伴暅鍍忕増鏈凡缁忓彉鏇翠簡 +[root@k8s-master01 ~]# kubectl get rs -n dev -o wide +NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES ... +pc-replicaset 2 2 2 145m nginx nginx:1.17.1 ... +``` + +**鍒犻櫎ReplicaSet** + +```shell +# 浣跨敤kubectl delete鍛戒护浼氬垹闄ゆRS浠ュ強瀹冪鐞嗙殑Pod +# 鍦╧ubernetes鍒犻櫎RS鍓嶏紝浼氬皢RS鐨剅eplicasclear璋冩暣涓0锛岀瓑寰呮墍鏈夌殑Pod琚垹闄ゅ悗锛屽湪鎵цRS瀵硅薄鐨勫垹闄 +[root@k8s-master01 ~]# kubectl delete rs pc-replicaset -n dev +replicaset.apps "pc-replicaset" deleted +[root@k8s-master01 ~]# kubectl get pod -n dev -o wide +No resources found in dev namespace. + +# 濡傛灉甯屾湜浠呬粎鍒犻櫎RS瀵硅薄锛堜繚鐣橮od锛夛紝鍙互浣跨敤kubectl delete鍛戒护鏃舵坊鍔--cascade=false閫夐」锛堜笉鎺ㄨ崘锛夈 +[root@k8s-master01 ~]# kubectl delete rs pc-replicaset -n dev --cascade=false +replicaset.apps "pc-replicaset" deleted +[root@k8s-master01 ~]# kubectl get pods -n dev +NAME READY STATUS RESTARTS AGE +pc-replicaset-cl82j 1/1 Running 0 75s +pc-replicaset-dslhb 1/1 Running 0 75s + +# 涔熷彲浠ヤ娇鐢▂aml鐩存帴鍒犻櫎(鎺ㄨ崘) +[root@k8s-master01 ~]# kubectl delete -f pc-replicaset.yaml +replicaset.apps "pc-replicaset" deleted +``` + +## 6.3 Deployment(Deploy) + +涓轰簡鏇村ソ鐨勮В鍐虫湇鍔$紪鎺掔殑闂锛宬ubernetes鍦╒1.2鐗堟湰寮濮嬶紝寮曞叆浜咲eployment鎺у埗鍣ㄣ傚煎緱涓鎻愮殑鏄紝杩欑鎺у埗鍣ㄥ苟涓嶇洿鎺ョ鐞唒od锛岃屾槸閫氳繃绠$悊ReplicaSet鏉ョ畝浠嬬鐞哖od锛屽嵆锛欴eployment绠$悊ReplicaSet锛孯eplicaSet绠$悊Pod銆傛墍浠eployment姣擱eplicaSet鍔熻兘鏇村姞寮哄ぇ銆 + +![img](Kubenetes.assets/image-20200612005524778.png) + +Deployment涓昏鍔熻兘鏈変笅闈㈠嚑涓細 + +- 鏀寔ReplicaSet鐨勬墍鏈夊姛鑳 +- 鏀寔鍙戝竷鐨勫仠姝€佺户缁 +- 鏀寔婊氬姩鍗囩骇鍜屽洖婊氱増鏈 + +Deployment鐨勮祫婧愭竻鍗曟枃浠讹細 + +```yaml +apiVersion: apps/v1 # 鐗堟湰鍙 +kind: Deployment # 绫诲瀷 +metadata: # 鍏冩暟鎹 + name: # rs鍚嶇О + namespace: # 鎵灞炲懡鍚嶇┖闂 + labels: #鏍囩 + controller: deploy +spec: # 璇︽儏鎻忚堪 + replicas: 3 # 鍓湰鏁伴噺 + revisionHistoryLimit: 3 # 淇濈暀鍘嗗彶鐗堟湰 + paused: false # 鏆傚仠閮ㄧ讲锛岄粯璁ゆ槸false + progressDeadlineSeconds: 600 # 閮ㄧ讲瓒呮椂鏃堕棿锛坰锛夛紝榛樿鏄600 + strategy: # 绛栫暐 + type: RollingUpdate # 婊氬姩鏇存柊绛栫暐 + rollingUpdate: # 婊氬姩鏇存柊 + maxSurge: 30% # 鏈澶ч澶栧彲浠ュ瓨鍦ㄧ殑鍓湰鏁帮紝鍙互涓虹櫨鍒嗘瘮锛屼篃鍙互涓烘暣鏁 + maxUnavailable: 30% # 鏈澶т笉鍙敤鐘舵佺殑 Pod 鐨勬渶澶у硷紝鍙互涓虹櫨鍒嗘瘮锛屼篃鍙互涓烘暣鏁 + selector: # 閫夋嫨鍣紝閫氳繃瀹冩寚瀹氳鎺у埗鍣ㄧ鐞嗗摢浜沺od + matchLabels: # Labels鍖归厤瑙勫垯 + app: nginx-pod + matchExpressions: # Expressions鍖归厤瑙勫垯 + - {key: app, operator: In, values: [nginx-pod]} + template: # 妯℃澘锛屽綋鍓湰鏁伴噺涓嶈冻鏃讹紝浼氭牴鎹笅闈㈢殑妯℃澘鍒涘缓pod鍓湰 + metadata: + labels: + app: nginx-pod + spec: + containers: + - name: nginx + image: nginx:1.17.1 + ports: + - containerPort: 80 +``` + +**鍒涘缓deployment** + +鍒涘缓pc-deployment.yaml锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: pc-deployment + namespace: dev +spec: + replicas: 3 + selector: + matchLabels: + app: nginx-pod + template: + metadata: + labels: + app: nginx-pod + spec: + containers: + - name: nginx + image: nginx:1.17.1 +``` + +```shell +# 鍒涘缓deployment +[root@k8s-master01 ~]# kubectl create -f pc-deployment.yaml --record=true +deployment.apps/pc-deployment created + +# 鏌ョ湅deployment +# UP-TO-DATE 鏈鏂扮増鏈殑pod鐨勬暟閲 +# AVAILABLE 褰撳墠鍙敤鐨刾od鐨勬暟閲 +[root@k8s-master01 ~]# kubectl get deploy pc-deployment -n dev +NAME READY UP-TO-DATE AVAILABLE AGE +pc-deployment 3/3 3 3 15s + +# 鏌ョ湅rs +# 鍙戠幇rs鐨勫悕绉版槸鍦ㄥ師鏉eployment鐨勫悕瀛楀悗闈㈡坊鍔犱簡涓涓10浣嶆暟鐨勯殢鏈轰覆 +[root@k8s-master01 ~]# kubectl get rs -n dev +NAME DESIRED CURRENT READY AGE +pc-deployment-6696798b78 3 3 3 23s + +# 鏌ョ湅pod +[root@k8s-master01 ~]# kubectl get pods -n dev +NAME READY STATUS RESTARTS AGE +pc-deployment-6696798b78-d2c8n 1/1 Running 0 107s +pc-deployment-6696798b78-smpvp 1/1 Running 0 107s +pc-deployment-6696798b78-wvjd8 1/1 Running 0 107s +``` + +**鎵╃缉瀹** + +```shell +# 鍙樻洿鍓湰鏁伴噺涓5涓 +[root@k8s-master01 ~]# kubectl scale deploy pc-deployment --replicas=5 -n dev +deployment.apps/pc-deployment scaled + +# 鏌ョ湅deployment +[root@k8s-master01 ~]# kubectl get deploy pc-deployment -n dev +NAME READY UP-TO-DATE AVAILABLE AGE +pc-deployment 5/5 5 5 2m + +# 鏌ョ湅pod +[root@k8s-master01 ~]# kubectl get pods -n dev +NAME READY STATUS RESTARTS AGE +pc-deployment-6696798b78-d2c8n 1/1 Running 0 4m19s +pc-deployment-6696798b78-jxmdq 1/1 Running 0 94s +pc-deployment-6696798b78-mktqv 1/1 Running 0 93s +pc-deployment-6696798b78-smpvp 1/1 Running 0 4m19s +pc-deployment-6696798b78-wvjd8 1/1 Running 0 4m19s + +# 缂栬緫deployment鐨勫壇鏈暟閲忥紝淇敼spec:replicas: 4鍗冲彲 +[root@k8s-master01 ~]# kubectl edit deploy pc-deployment -n dev +deployment.apps/pc-deployment edited + +# 鏌ョ湅pod +[root@k8s-master01 ~]# kubectl get pods -n dev +NAME READY STATUS RESTARTS AGE +pc-deployment-6696798b78-d2c8n 1/1 Running 0 5m23s +pc-deployment-6696798b78-jxmdq 1/1 Running 0 2m38s +pc-deployment-6696798b78-smpvp 1/1 Running 0 5m23s +pc-deployment-6696798b78-wvjd8 1/1 Running 0 5m23s +``` + +**闀滃儚鏇存柊** + +deployment鏀寔涓ょ鏇存柊绛栫暐:`閲嶅缓鏇存柊`鍜宍婊氬姩鏇存柊`,鍙互閫氳繃`strategy`鎸囧畾绛栫暐绫诲瀷,鏀寔涓や釜灞炴: + +```yaml +strategy锛氭寚瀹氭柊鐨凱od鏇挎崲鏃х殑Pod鐨勭瓥鐣ワ紝 鏀寔涓や釜灞炴э細 + type锛氭寚瀹氱瓥鐣ョ被鍨嬶紝鏀寔涓ょ绛栫暐 + Recreate锛氬湪鍒涘缓鍑烘柊鐨凱od涔嬪墠浼氬厛鏉鎺夋墍鏈夊凡瀛樺湪鐨凱od + RollingUpdate锛氭粴鍔ㄦ洿鏂帮紝灏辨槸鏉姝讳竴閮ㄥ垎锛屽氨鍚姩涓閮ㄥ垎锛屽湪鏇存柊杩囩▼涓紝瀛樺湪涓や釜鐗堟湰Pod + rollingUpdate锛氬綋type涓篟ollingUpdate鏃剁敓鏁堬紝鐢ㄤ簬涓篟ollingUpdate璁剧疆鍙傛暟锛屾敮鎸佷袱涓睘鎬э細 + maxUnavailable锛氱敤鏉ユ寚瀹氬湪鍗囩骇杩囩▼涓笉鍙敤Pod鐨勬渶澶ф暟閲忥紝榛樿涓25%銆 + maxSurge锛 鐢ㄦ潵鎸囧畾鍦ㄥ崌绾ц繃绋嬩腑鍙互瓒呰繃鏈熸湜鐨凱od鐨勬渶澶ф暟閲忥紝榛樿涓25%銆 +``` + +閲嶅缓鏇存柊 + +1) 缂栬緫pc-deployment.yaml,鍦╯pec鑺傜偣涓嬫坊鍔犳洿鏂扮瓥鐣 + +```yaml +spec: + strategy: # 绛栫暐 + type: Recreate # 閲嶅缓鏇存柊 +``` + +2) 鍒涘缓deploy杩涜楠岃瘉 + +```shell +# 鍙樻洿闀滃儚 +[root@k8s-master01 ~]# kubectl set image deployment pc-deployment nginx=nginx:1.17.2 -n dev +deployment.apps/pc-deployment image updated + +# 瑙傚療鍗囩骇杩囩▼ +[root@k8s-master01 ~]# kubectl get pods -n dev -w +NAME READY STATUS RESTARTS AGE +pc-deployment-5d89bdfbf9-65qcw 1/1 Running 0 31s +pc-deployment-5d89bdfbf9-w5nzv 1/1 Running 0 31s +pc-deployment-5d89bdfbf9-xpt7w 1/1 Running 0 31s + +pc-deployment-5d89bdfbf9-xpt7w 1/1 Terminating 0 41s +pc-deployment-5d89bdfbf9-65qcw 1/1 Terminating 0 41s +pc-deployment-5d89bdfbf9-w5nzv 1/1 Terminating 0 41s + +pc-deployment-675d469f8b-grn8z 0/1 Pending 0 0s +pc-deployment-675d469f8b-hbl4v 0/1 Pending 0 0s +pc-deployment-675d469f8b-67nz2 0/1 Pending 0 0s + +pc-deployment-675d469f8b-grn8z 0/1 ContainerCreating 0 0s +pc-deployment-675d469f8b-hbl4v 0/1 ContainerCreating 0 0s +pc-deployment-675d469f8b-67nz2 0/1 ContainerCreating 0 0s + +pc-deployment-675d469f8b-grn8z 1/1 Running 0 1s +pc-deployment-675d469f8b-67nz2 1/1 Running 0 1s +pc-deployment-675d469f8b-hbl4v 1/1 Running 0 2s +``` + +婊氬姩鏇存柊 + +1) 缂栬緫pc-deployment.yaml,鍦╯pec鑺傜偣涓嬫坊鍔犳洿鏂扮瓥鐣 + +```yaml +spec: + strategy: # 绛栫暐 + type: RollingUpdate # 婊氬姩鏇存柊绛栫暐 + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% +``` + +2) 鍒涘缓deploy杩涜楠岃瘉 + +```shell +# 鍙樻洿闀滃儚 +[root@k8s-master01 ~]# kubectl set image deployment pc-deployment nginx=nginx:1.17.3 -n dev +deployment.apps/pc-deployment image updated + +# 瑙傚療鍗囩骇杩囩▼ +[root@k8s-master01 ~]# kubectl get pods -n dev -w +NAME READY STATUS RESTARTS AGE +pc-deployment-c848d767-8rbzt 1/1 Running 0 31m +pc-deployment-c848d767-h4p68 1/1 Running 0 31m +pc-deployment-c848d767-hlmz4 1/1 Running 0 31m +pc-deployment-c848d767-rrqcn 1/1 Running 0 31m + +pc-deployment-966bf7f44-226rx 0/1 Pending 0 0s +pc-deployment-966bf7f44-226rx 0/1 ContainerCreating 0 0s +pc-deployment-966bf7f44-226rx 1/1 Running 0 1s +pc-deployment-c848d767-h4p68 0/1 Terminating 0 34m + +pc-deployment-966bf7f44-cnd44 0/1 Pending 0 0s +pc-deployment-966bf7f44-cnd44 0/1 ContainerCreating 0 0s +pc-deployment-966bf7f44-cnd44 1/1 Running 0 2s +pc-deployment-c848d767-hlmz4 0/1 Terminating 0 34m + +pc-deployment-966bf7f44-px48p 0/1 Pending 0 0s +pc-deployment-966bf7f44-px48p 0/1 ContainerCreating 0 0s +pc-deployment-966bf7f44-px48p 1/1 Running 0 0s +pc-deployment-c848d767-8rbzt 0/1 Terminating 0 34m + +pc-deployment-966bf7f44-dkmqp 0/1 Pending 0 0s +pc-deployment-966bf7f44-dkmqp 0/1 ContainerCreating 0 0s +pc-deployment-966bf7f44-dkmqp 1/1 Running 0 2s +pc-deployment-c848d767-rrqcn 0/1 Terminating 0 34m + +# 鑷虫锛屾柊鐗堟湰鐨刾od鍒涘缓瀹屾瘯锛屽氨鐗堟湰鐨刾od閿姣佸畬姣 +# 涓棿杩囩▼鏄粴鍔ㄨ繘琛岀殑锛屼篃灏辨槸杈归攢姣佽竟鍒涘缓 +``` + +婊氬姩鏇存柊鐨勮繃绋嬶細 + +![img](Kubenetes.assets/image-20200416140251491.png) + +闀滃儚鏇存柊涓璻s鐨勫彉鍖 + +```shell +# 鏌ョ湅rs,鍙戠幇鍘熸潵鐨剅s鐨勪緷鏃у瓨鍦紝鍙槸pod鏁伴噺鍙樹负浜0锛岃屽悗鍙堟柊浜х敓浜嗕竴涓猺s锛宲od鏁伴噺涓4 +# 鍏跺疄杩欏氨鏄痙eployment鑳藉杩涜鐗堟湰鍥為鐨勫ゥ濡欐墍鍦紝鍚庨潰浼氳缁嗚В閲 +[root@k8s-master01 ~]# kubectl get rs -n dev +NAME DESIRED CURRENT READY AGE +pc-deployment-6696798b78 0 0 0 7m37s +pc-deployment-6696798b11 0 0 0 5m37s +pc-deployment-c848d76789 4 4 4 72s +``` + +**鐗堟湰鍥為** + +deployment鏀寔鐗堟湰鍗囩骇杩囩▼涓殑鏆傚仠銆佺户缁姛鑳戒互鍙婄増鏈洖閫绛夎澶氬姛鑳斤紝涓嬮潰鍏蜂綋鏉ョ湅. + +kubectl rollout锛 鐗堟湰鍗囩骇鐩稿叧鍔熻兘锛屾敮鎸佷笅闈㈢殑閫夐」锛 + +- status 鏄剧ず褰撳墠鍗囩骇鐘舵 +- history 鏄剧ず 鍗囩骇鍘嗗彶璁板綍 +- pause 鏆傚仠鐗堟湰鍗囩骇杩囩▼ +- resume 缁х画宸茬粡鏆傚仠鐨勭増鏈崌绾ц繃绋 +- restart 閲嶅惎鐗堟湰鍗囩骇杩囩▼ +- undo 鍥炴粴鍒颁笂涓绾х増鏈紙鍙互浣跨敤--to-revision鍥炴粴鍒版寚瀹氱増鏈級 + +```shell +# 鏌ョ湅褰撳墠鍗囩骇鐗堟湰鐨勭姸鎬 +[root@k8s-master01 ~]# kubectl rollout status deploy pc-deployment -n dev +deployment "pc-deployment" successfully rolled out + +# 鏌ョ湅鍗囩骇鍘嗗彶璁板綍 +[root@k8s-master01 ~]# kubectl rollout history deploy pc-deployment -n dev +deployment.apps/pc-deployment +REVISION CHANGE-CAUSE +1 kubectl create --filename=pc-deployment.yaml --record=true +2 kubectl create --filename=pc-deployment.yaml --record=true +3 kubectl create --filename=pc-deployment.yaml --record=true +# 鍙互鍙戠幇鏈変笁娆$増鏈褰曪紝璇存槑瀹屾垚杩囦袱娆″崌绾 + +# 鐗堟湰鍥炴粴 +# 杩欓噷鐩存帴浣跨敤--to-revision=1鍥炴粴鍒颁簡1鐗堟湰锛 濡傛灉鐪佺暐杩欎釜閫夐」锛屽氨鏄洖閫鍒颁笂涓増鏈紝灏辨槸2鐗堟湰 +[root@k8s-master01 ~]# kubectl rollout undo deployment pc-deployment --to-revision=1 -n dev +deployment.apps/pc-deployment rolled back + +# 鏌ョ湅鍙戠幇锛岄氳繃nginx闀滃儚鐗堟湰鍙互鍙戠幇鍒颁簡绗竴鐗 +[root@k8s-master01 ~]# kubectl get deploy -n dev -o wide +NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES +pc-deployment 4/4 4 4 74m nginx nginx:1.17.1 + +# 鏌ョ湅rs锛屽彂鐜扮涓涓猺s涓湁4涓猵od杩愯锛屽悗闈袱涓増鏈殑rs涓璸od涓鸿繍琛 +# 鍏跺疄deployment涔嬫墍浠ュ彲鏄疄鐜扮増鏈殑鍥炴粴锛屽氨鏄氳繃璁板綍涓嬪巻鍙瞨s鏉ュ疄鐜扮殑锛 +# 涓鏃︽兂鍥炴粴鍒板摢涓増鏈紝鍙渶瑕佸皢褰撳墠鐗堟湰pod鏁伴噺闄嶄负0锛岀劧鍚庡皢鍥炴粴鐗堟湰鐨刾od鎻愬崌涓虹洰鏍囨暟閲忓氨鍙互浜 +[root@k8s-master01 ~]# kubectl get rs -n dev +NAME DESIRED CURRENT READY AGE +pc-deployment-6696798b78 4 4 4 78m +pc-deployment-966bf7f44 0 0 0 37m +pc-deployment-c848d767 0 0 0 71m +``` + +**閲戜笣闆鍙戝竷** + +Deployment鎺у埗鍣ㄦ敮鎸佹帶鍒舵洿鏂拌繃绋嬩腑鐨勬帶鍒讹紝濡傗滄殏鍋(pause)鈥濇垨鈥滅户缁(resume)鈥濇洿鏂版搷浣溿 + +[reference-depolyment](deployment.md) + +姣斿鏈変竴鎵规柊鐨凱od璧勬簮鍒涘缓瀹屾垚鍚庣珛鍗虫殏鍋滄洿鏂拌繃绋嬶紝姝ゆ椂锛屼粎瀛樺湪涓閮ㄥ垎鏂扮増鏈殑搴旂敤锛屼富浣撻儴鍒嗚繕鏄棫鐨勭増鏈傜劧鍚庯紝鍐嶇瓫閫変竴灏忛儴鍒嗙殑鐢ㄦ埛璇锋眰璺敱鍒版柊鐗堟湰鐨凱od搴旂敤锛岀户缁瀵熻兘鍚︾ǔ瀹氬湴鎸夋湡鏈涚殑鏂瑰紡杩愯銆傜‘瀹氭病闂涔嬪悗鍐嶇户缁畬鎴愪綑涓嬬殑Pod璧勬簮婊氬姩鏇存柊锛屽惁鍒欑珛鍗冲洖婊氭洿鏂版搷浣溿傝繖灏辨槸鎵璋撶殑閲戜笣闆鍙戝竷銆 + +```shell +# 鏇存柊deployment鐨勭増鏈紝骞堕厤缃殏鍋渄eployment +[root@k8s-master01 ~]# kubectl set image deploy pc-deployment nginx=nginx:1.17.4 -n dev && kubectl rollout pause deployment pc-deployment -n dev +deployment.apps/pc-deployment image updated +deployment.apps/pc-deployment paused + +#瑙傚療鏇存柊鐘舵 +[root@k8s-master01 ~]# kubectl rollout status deploy pc-deployment -n dev銆 +Waiting for deployment "pc-deployment" rollout to finish: 2 out of 4 new replicas have been updated... + +# 鐩戞帶鏇存柊鐨勮繃绋嬶紝鍙互鐪嬪埌宸茬粡鏂板浜嗕竴涓祫婧愶紝浣嗘槸骞舵湭鎸夌収棰勬湡鐨勭姸鎬佸幓鍒犻櫎涓涓棫鐨勮祫婧愶紝灏辨槸鍥犱负浣跨敤浜唒ause鏆傚仠鍛戒护 + +[root@k8s-master01 ~]# kubectl get rs -n dev -o wide +NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES +pc-deployment-5d89bdfbf9 3 3 3 19m nginx nginx:1.17.1 +pc-deployment-675d469f8b 0 0 0 14m nginx nginx:1.17.2 +pc-deployment-6c9f56fcfb 2 2 2 3m16s nginx nginx:1.17.4 +[root@k8s-master01 ~]# kubectl get pods -n dev +NAME READY STATUS RESTARTS AGE +pc-deployment-5d89bdfbf9-rj8sq 1/1 Running 0 7m33s +pc-deployment-5d89bdfbf9-ttwgg 1/1 Running 0 7m35s +pc-deployment-5d89bdfbf9-v4wvc 1/1 Running 0 7m34s +pc-deployment-6c9f56fcfb-996rt 1/1 Running 0 3m31s +pc-deployment-6c9f56fcfb-j2gtj 1/1 Running 0 3m31s + +# 纭繚鏇存柊鐨刾od娌¢棶棰樹簡锛岀户缁洿鏂 +[root@k8s-master01 ~]# kubectl rollout resume deploy pc-deployment -n dev +deployment.apps/pc-deployment resumed + +# 鏌ョ湅鏈鍚庣殑鏇存柊鎯呭喌 +[root@k8s-master01 ~]# kubectl get rs -n dev -o wide +NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES +pc-deployment-5d89bdfbf9 0 0 0 21m nginx nginx:1.17.1 +pc-deployment-675d469f8b 0 0 0 16m nginx nginx:1.17.2 +pc-deployment-6c9f56fcfb 4 4 4 5m11s nginx nginx:1.17.4 + +[root@k8s-master01 ~]# kubectl get pods -n dev +NAME READY STATUS RESTARTS AGE +pc-deployment-6c9f56fcfb-7bfwh 1/1 Running 0 37s +pc-deployment-6c9f56fcfb-996rt 1/1 Running 0 5m27s +pc-deployment-6c9f56fcfb-j2gtj 1/1 Running 0 5m27s +pc-deployment-6c9f56fcfb-rf84v 1/1 Running 0 37s +``` + +**鍒犻櫎Deployment** + +```shell +# 鍒犻櫎deployment锛屽叾涓嬬殑rs鍜宲od涔熷皢琚垹闄 +[root@k8s-master01 ~]# kubectl delete -f pc-deployment.yaml +deployment.apps "pc-deployment" deleted +``` + +## 6.4 Horizontal Pod Autoscaler(HPA) + +鍦ㄥ墠闈㈢殑璇剧▼涓紝鎴戜滑宸茬粡鍙互瀹炵幇閫氳繃鎵嬪伐鎵ц`kubectl scale`鍛戒护瀹炵幇Pod鎵╁鎴栫缉瀹癸紝浣嗘槸杩欐樉鐒朵笉绗﹀悎Kubernetes鐨勫畾浣嶇洰鏍--鑷姩鍖栥佹櫤鑳藉寲銆 Kubernetes鏈熸湜鍙互瀹炵幇閫氳繃鐩戞祴Pod鐨勪娇鐢ㄦ儏鍐碉紝瀹炵幇pod鏁伴噺鐨勮嚜鍔ㄨ皟鏁达紝浜庢槸灏变骇鐢熶簡Horizontal Pod Autoscaler锛圚PA锛夎繖绉嶆帶鍒跺櫒銆 + +HPA鍙互鑾峰彇姣忎釜Pod鍒╃敤鐜囷紝鐒跺悗鍜孒PA涓畾涔夌殑鎸囨爣杩涜瀵规瘮锛屽悓鏃惰绠楀嚭闇瑕佷几缂╃殑鍏蜂綋鍊硷紝鏈鍚庡疄鐜癙od鐨勬暟閲忕殑璋冩暣銆傚叾瀹濰PA涓庝箣鍓嶇殑Deployment涓鏍凤紝涔熷睘浜庝竴绉岾ubernetes璧勬簮瀵硅薄锛屽畠閫氳繃杩借釜鍒嗘瀽RC鎺у埗鐨勬墍鏈夌洰鏍嘝od鐨勮礋杞藉彉鍖栨儏鍐碉紝鏉ョ‘瀹氭槸鍚﹂渶瑕侀拡瀵规у湴璋冩暣鐩爣Pod鐨勫壇鏈暟锛岃繖鏄疕PA鐨勫疄鐜板師鐞嗐 + +![img](Kubenetes.assets/image-20200608155858271.png) + +鎺ヤ笅鏉ワ紝鎴戜滑鏉ュ仛涓涓疄楠 + +**1 瀹夎metrics-server** + +metrics-server鍙互鐢ㄦ潵鏀堕泦闆嗙兢涓殑璧勬簮浣跨敤鎯呭喌 + +```shell +# 瀹夎git +[root@k8s-master01 ~]# yum install git -y +# 鑾峰彇metrics-server, 娉ㄦ剰浣跨敤鐨勭増鏈 +[root@k8s-master01 ~]# git clone -b v0.3.6 https://github.com/kubernetes-incubator/metrics-server +# 淇敼deployment, 娉ㄦ剰淇敼鐨勬槸闀滃儚鍜屽垵濮嬪寲鍙傛暟 +[root@k8s-master01 ~]# cd /root/metrics-server/deploy/1.8+/ +[root@k8s-master01 1.8+]# vim metrics-server-deployment.yaml +鎸夊浘涓坊鍔犱笅闈㈤夐」 +hostNetwork: true +image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6 +args: +- --kubelet-insecure-tls +- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP +``` + +![image-20200608163326496](Kubenetes.assets/image-20200608163326496.png) + +```shell +# 瀹夎metrics-server +[root@k8s-master01 1.8+]# kubectl apply -f ./ + +# 鏌ョ湅pod杩愯鎯呭喌 +[root@k8s-master01 1.8+]# kubectl get pod -n kube-system +metrics-server-6b976979db-2xwbj 1/1 Running 0 90s + +# 浣跨敤kubectl top node 鏌ョ湅璧勬簮浣跨敤鎯呭喌 +[root@k8s-master01 1.8+]# kubectl top node +NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% +k8s-master01 289m 14% 1582Mi 54% +k8s-node01 81m 4% 1195Mi 40% +k8s-node02 72m 3% 1211Mi 41% +[root@k8s-master01 1.8+]# kubectl top pod -n kube-system +NAME CPU(cores) MEMORY(bytes) +coredns-6955765f44-7ptsb 3m 9Mi +coredns-6955765f44-vcwr5 3m 8Mi +etcd-master 14m 145Mi +... +# 鑷虫,metrics-server瀹夎瀹屾垚 +``` + +**2 鍑嗗deployment鍜宻ervie** + +鍒涘缓pc-hpa-pod.yaml鏂囦欢锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx + namespace: dev +spec: + strategy: # 绛栫暐 + type: RollingUpdate # 婊氬姩鏇存柊绛栫暐 + replicas: 1 + selector: + matchLabels: + app: nginx-pod + template: + metadata: + labels: + app: nginx-pod + spec: + containers: + - name: nginx + image: nginx:1.17.1 + resources: # 璧勬簮閰嶉 + limits: # 闄愬埗璧勬簮锛堜笂闄愶級 + cpu: "1" # CPU闄愬埗锛屽崟浣嶆槸core鏁 + requests: # 璇锋眰璧勬簮锛堜笅闄愶級 + cpu: "100m" # CPU闄愬埗锛屽崟浣嶆槸core鏁 +``` + +```shell +# 鍒涘缓service +[root@k8s-master01 1.8+]# kubectl expose deployment nginx --type=NodePort --port=80 -n dev +``` + +```shell +# 鏌ョ湅 +[root@k8s-master01 1.8+]# kubectl get deployment,pod,svc -n dev +NAME READY UP-TO-DATE AVAILABLE AGE +deployment.apps/nginx 1/1 1 1 47s + +NAME READY STATUS RESTARTS AGE +pod/nginx-7df9756ccc-bh8dr 1/1 Running 0 47s + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/nginx NodePort 10.101.18.29 80:31830/TCP 35s +``` + +**3 閮ㄧ讲HPA** + +鍒涘缓pc-hpa.yaml鏂囦欢锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: autoscaling/v1 +kind: HorizontalPodAutoscaler +metadata: + name: pc-hpa + namespace: dev +spec: + minReplicas: 1 #鏈灏弍od鏁伴噺 + maxReplicas: 10 #鏈澶od鏁伴噺 + targetCPUUtilizationPercentage: 3 # CPU浣跨敤鐜囨寚鏍 + scaleTargetRef: # 鎸囧畾瑕佹帶鍒剁殑nginx淇℃伅 + apiVersion: apps/v1 + kind: Deployment + name: nginx +``` + +```shell +# 鍒涘缓hpa +[root@k8s-master01 1.8+]# kubectl create -f pc-hpa.yaml +horizontalpodautoscaler.autoscaling/pc-hpa created + +# 鏌ョ湅hpa + [root@k8s-master01 1.8+]# kubectl get hpa -n dev +NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE +pc-hpa Deployment/nginx 0%/3% 1 10 1 62s +``` + +**4 娴嬭瘯** + +浣跨敤鍘嬫祴宸ュ叿瀵箂ervice鍦板潃`192.168.5.4:31830`杩涜鍘嬫祴锛岀劧鍚庨氳繃鎺у埗鍙版煡鐪媓pa鍜宲od鐨勫彉鍖 + +hpa鍙樺寲 + +```shell +[root@k8s-master01 ~]# kubectl get hpa -n dev -w +NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE +pc-hpa Deployment/nginx 0%/3% 1 10 1 4m11s +pc-hpa Deployment/nginx 0%/3% 1 10 1 5m19s +pc-hpa Deployment/nginx 22%/3% 1 10 1 6m50s +pc-hpa Deployment/nginx 22%/3% 1 10 4 7m5s +pc-hpa Deployment/nginx 22%/3% 1 10 8 7m21s +pc-hpa Deployment/nginx 6%/3% 1 10 8 7m51s +pc-hpa Deployment/nginx 0%/3% 1 10 8 9m6s +pc-hpa Deployment/nginx 0%/3% 1 10 8 13m +pc-hpa Deployment/nginx 0%/3% 1 10 1 14m +``` + +deployment鍙樺寲 + +```shell +[root@k8s-master01 ~]# kubectl get deployment -n dev -w +NAME READY UP-TO-DATE AVAILABLE AGE +nginx 1/1 1 1 11m +nginx 1/4 1 1 13m +nginx 1/4 1 1 13m +nginx 1/4 1 1 13m +nginx 1/4 4 1 13m +nginx 1/8 4 1 14m +nginx 1/8 4 1 14m +nginx 1/8 4 1 14m +nginx 1/8 8 1 14m +nginx 2/8 8 2 14m +nginx 3/8 8 3 14m +nginx 4/8 8 4 14m +nginx 5/8 8 5 14m +nginx 6/8 8 6 14m +nginx 7/8 8 7 14m +nginx 8/8 8 8 15m +nginx 8/1 8 8 20m +nginx 8/1 8 8 20m +nginx 1/1 1 1 20m +``` + +pod鍙樺寲 + +``` +[root@k8s-master01 ~]# kubectl get pods -n dev -w +NAME READY STATUS RESTARTS AGE +nginx-7df9756ccc-bh8dr 1/1 Running 0 11m +nginx-7df9756ccc-cpgrv 0/1 Pending 0 0s +nginx-7df9756ccc-8zhwk 0/1 Pending 0 0s +nginx-7df9756ccc-rr9bn 0/1 Pending 0 0s +nginx-7df9756ccc-cpgrv 0/1 ContainerCreating 0 0s +nginx-7df9756ccc-8zhwk 0/1 ContainerCreating 0 0s +nginx-7df9756ccc-rr9bn 0/1 ContainerCreating 0 0s +nginx-7df9756ccc-m9gsj 0/1 Pending 0 0s +nginx-7df9756ccc-g56qb 0/1 Pending 0 0s +nginx-7df9756ccc-sl9c6 0/1 Pending 0 0s +nginx-7df9756ccc-fgst7 0/1 Pending 0 0s +nginx-7df9756ccc-g56qb 0/1 ContainerCreating 0 0s +nginx-7df9756ccc-m9gsj 0/1 ContainerCreating 0 0s +nginx-7df9756ccc-sl9c6 0/1 ContainerCreating 0 0s +nginx-7df9756ccc-fgst7 0/1 ContainerCreating 0 0s +nginx-7df9756ccc-8zhwk 1/1 Running 0 19s +nginx-7df9756ccc-rr9bn 1/1 Running 0 30s +nginx-7df9756ccc-m9gsj 1/1 Running 0 21s +nginx-7df9756ccc-cpgrv 1/1 Running 0 47s +nginx-7df9756ccc-sl9c6 1/1 Running 0 33s +nginx-7df9756ccc-g56qb 1/1 Running 0 48s +nginx-7df9756ccc-fgst7 1/1 Running 0 66s +nginx-7df9756ccc-fgst7 1/1 Terminating 0 6m50s +nginx-7df9756ccc-8zhwk 1/1 Terminating 0 7m5s +nginx-7df9756ccc-cpgrv 1/1 Terminating 0 7m5s +nginx-7df9756ccc-g56qb 1/1 Terminating 0 6m50s +nginx-7df9756ccc-rr9bn 1/1 Terminating 0 7m5s +nginx-7df9756ccc-m9gsj 1/1 Terminating 0 6m50s +nginx-7df9756ccc-sl9c6 1/1 Terminating 0 6m50s +``` + +## 6.5 DaemonSet(DS) + +DaemonSet绫诲瀷鐨勬帶鍒跺櫒鍙互淇濊瘉鍦ㄩ泦缇や腑鐨勬瘡涓鍙帮紙鎴栨寚瀹氾級鑺傜偣涓婇兘杩愯涓涓壇鏈備竴鑸傜敤浜庢棩蹇楁敹闆嗐佽妭鐐圭洃鎺х瓑鍦烘櫙銆備篃灏辨槸璇达紝濡傛灉涓涓狿od鎻愪緵鐨勫姛鑳芥槸鑺傜偣绾у埆鐨勶紙姣忎釜鑺傜偣閮介渶瑕佷笖鍙渶瑕佷竴涓級锛岄偅涔堣繖绫籔od灏遍傚悎浣跨敤DaemonSet绫诲瀷鐨勬帶鍒跺櫒鍒涘缓銆 + +![img](Kubenetes.assets/image-20200612010223537.png) + +DaemonSet鎺у埗鍣ㄧ殑鐗圭偣锛 + +- 姣忓綋鍚戦泦缇や腑娣诲姞涓涓妭鐐规椂锛屾寚瀹氱殑 Pod 鍓湰涔熷皢娣诲姞鍒拌鑺傜偣涓 +- 褰撹妭鐐逛粠闆嗙兢涓Щ闄ゆ椂锛孭od 涔熷氨琚瀮鍦惧洖鏀朵簡 + +涓嬮潰鍏堟潵鐪嬩笅DaemonSet鐨勮祫婧愭竻鍗曟枃浠 + +```yaml +apiVersion: apps/v1 # 鐗堟湰鍙 +kind: DaemonSet # 绫诲瀷 +metadata: # 鍏冩暟鎹 + name: # rs鍚嶇О + namespace: # 鎵灞炲懡鍚嶇┖闂 + labels: #鏍囩 + controller: daemonset +spec: # 璇︽儏鎻忚堪 + revisionHistoryLimit: 3 # 淇濈暀鍘嗗彶鐗堟湰 + updateStrategy: # 鏇存柊绛栫暐 + type: RollingUpdate # 婊氬姩鏇存柊绛栫暐 + rollingUpdate: # 婊氬姩鏇存柊 + maxUnavailable: 1 # 鏈澶т笉鍙敤鐘舵佺殑 Pod 鐨勬渶澶у硷紝鍙互涓虹櫨鍒嗘瘮锛屼篃鍙互涓烘暣鏁 + selector: # 閫夋嫨鍣紝閫氳繃瀹冩寚瀹氳鎺у埗鍣ㄧ鐞嗗摢浜沺od + matchLabels: # Labels鍖归厤瑙勫垯 + app: nginx-pod + matchExpressions: # Expressions鍖归厤瑙勫垯 + - {key: app, operator: In, values: [nginx-pod]} + template: # 妯℃澘锛屽綋鍓湰鏁伴噺涓嶈冻鏃讹紝浼氭牴鎹笅闈㈢殑妯℃澘鍒涘缓pod鍓湰 + metadata: + labels: + app: nginx-pod + spec: + containers: + - name: nginx + image: nginx:1.17.1 + ports: + - containerPort: 80 +``` + +鍒涘缓pc-daemonset.yaml锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: pc-daemonset + namespace: dev +spec: + selector: + matchLabels: + app: nginx-pod + template: + metadata: + labels: + app: nginx-pod + spec: + containers: + - name: nginx + image: nginx:1.17.1 +``` + +```shell +# 鍒涘缓daemonset +[root@k8s-master01 ~]# kubectl create -f pc-daemonset.yaml +daemonset.apps/pc-daemonset created + +# 鏌ョ湅daemonset +[root@k8s-master01 ~]# kubectl get ds -n dev -o wide +NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES +pc-daemonset 2 2 2 2 2 24s nginx nginx:1.17.1 + +# 鏌ョ湅pod,鍙戠幇鍦ㄦ瘡涓狽ode涓婇兘杩愯涓涓猵od +[root@k8s-master01 ~]# kubectl get pods -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE +pc-daemonset-9bck8 1/1 Running 0 37s 10.244.1.43 node1 +pc-daemonset-k224w 1/1 Running 0 37s 10.244.2.74 node2 + +# 鍒犻櫎daemonset +[root@k8s-master01 ~]# kubectl delete -f pc-daemonset.yaml +daemonset.apps "pc-daemonset" deleted +``` + +## 6.6 Job + +Job锛屼富瑕佺敤浜庤礋璐**鎵归噺澶勭悊(涓娆¤澶勭悊鎸囧畾鏁伴噺浠诲姟)**鐭殏鐨**涓娆℃(姣忎釜浠诲姟浠呰繍琛屼竴娆″氨缁撴潫)**浠诲姟銆侸ob鐗圭偣濡備笅锛 + +- 褰揓ob鍒涘缓鐨刾od鎵ц鎴愬姛缁撴潫鏃讹紝Job灏嗚褰曟垚鍔熺粨鏉熺殑pod鏁伴噺 +- 褰撴垚鍔熺粨鏉熺殑pod杈惧埌鎸囧畾鐨勬暟閲忔椂锛孞ob灏嗗畬鎴愭墽琛 + +![img](Kubenetes.assets/image-20200618213054113.png) + +Job鐨勮祫婧愭竻鍗曟枃浠讹細 + + + +```yaml +apiVersion: batch/v1 # 鐗堟湰鍙 +kind: Job # 绫诲瀷 +metadata: # 鍏冩暟鎹 + name: # rs鍚嶇О + namespace: # 鎵灞炲懡鍚嶇┖闂 + labels: #鏍囩 + controller: job +spec: # 璇︽儏鎻忚堪 + completions: 1 # 鎸囧畾job闇瑕佹垚鍔熻繍琛孭ods鐨勬鏁般傞粯璁ゅ: 1 + parallelism: 1 # 鎸囧畾job鍦ㄤ换涓鏃跺埢搴旇骞跺彂杩愯Pods鐨勬暟閲忋傞粯璁ゅ: 1 + activeDeadlineSeconds: 30 # 鎸囧畾job鍙繍琛岀殑鏃堕棿鏈熼檺锛岃秴杩囨椂闂磋繕鏈粨鏉燂紝绯荤粺灏嗕細灏濊瘯杩涜缁堟銆 + backoffLimit: 6 # 鎸囧畾job澶辫触鍚庤繘琛岄噸璇曠殑娆℃暟銆傞粯璁ゆ槸6 + manualSelector: true # 鏄惁鍙互浣跨敤selector閫夋嫨鍣ㄩ夋嫨pod锛岄粯璁ゆ槸false + selector: # 閫夋嫨鍣紝閫氳繃瀹冩寚瀹氳鎺у埗鍣ㄧ鐞嗗摢浜沺od + matchLabels: # Labels鍖归厤瑙勫垯 + app: counter-pod + matchExpressions: # Expressions鍖归厤瑙勫垯 + - {key: app, operator: In, values: [counter-pod]} + template: # 妯℃澘锛屽綋鍓湰鏁伴噺涓嶈冻鏃讹紝浼氭牴鎹笅闈㈢殑妯℃澘鍒涘缓pod鍓湰 + metadata: + labels: + app: counter-pod + spec: + restartPolicy: Never # 閲嶅惎绛栫暐鍙兘璁剧疆涓篘ever鎴栬匫nFailure + containers: + - name: counter + image: busybox:1.30 + command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 2;done"] +``` + +``` +鍏充簬閲嶅惎绛栫暐璁剧疆鐨勮鏄庯細 + 濡傛灉鎸囧畾涓篛nFailure锛屽垯job浼氬湪pod鍑虹幇鏁呴殰鏃堕噸鍚鍣紝鑰屼笉鏄垱寤簆od锛宖ailed娆℃暟涓嶅彉 + 濡傛灉鎸囧畾涓篘ever锛屽垯job浼氬湪pod鍑虹幇鏁呴殰鏃跺垱寤烘柊鐨刾od锛屽苟涓旀晠闅減od涓嶄細娑堝け锛屼篃涓嶄細閲嶅惎锛宖ailed娆℃暟鍔1 + 濡傛灉鎸囧畾涓篈lways鐨勮瘽锛屽氨鎰忓懗鐫涓鐩撮噸鍚紝鎰忓懗鐫job浠诲姟浼氶噸澶嶅幓鎵ц浜嗭紝褰撶劧涓嶅锛屾墍浠ヤ笉鑳借缃负Always +``` + +鍒涘缓pc-job.yaml锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: pc-job + namespace: dev +spec: + manualSelector: true + selector: + matchLabels: + app: counter-pod + template: + metadata: + labels: + app: counter-pod + spec: + restartPolicy: Never + containers: + - name: counter + image: busybox:1.30 + command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 3;done"] +``` + +```shell +# 鍒涘缓job +[root@k8s-master01 ~]# kubectl create -f pc-job.yaml +job.batch/pc-job created + +# 鏌ョ湅job +[root@k8s-master01 ~]# kubectl get job -n dev -o wide -w +NAME COMPLETIONS DURATION AGE CONTAINERS IMAGES SELECTOR +pc-job 0/1 21s 21s counter busybox:1.30 app=counter-pod +pc-job 1/1 31s 79s counter busybox:1.30 app=counter-pod + +# 閫氳繃瑙傚療pod鐘舵佸彲浠ョ湅鍒帮紝pod鍦ㄨ繍琛屽畬姣曚换鍔″悗锛屽氨浼氬彉鎴怌ompleted鐘舵 +[root@k8s-master01 ~]# kubectl get pods -n dev -w +NAME READY STATUS RESTARTS AGE +pc-job-rxg96 1/1 Running 0 29s +pc-job-rxg96 0/1 Completed 0 33s + +# 鎺ヤ笅鏉ワ紝璋冩暣涓媝od杩愯鐨勬绘暟閲忓拰骞惰鏁伴噺 鍗筹細鍦╯pec涓嬭缃笅闈袱涓夐」 +# completions: 6 # 鎸囧畾job闇瑕佹垚鍔熻繍琛孭ods鐨勬鏁颁负6 +# parallelism: 3 # 鎸囧畾job骞跺彂杩愯Pods鐨勬暟閲忎负3 +# 鐒跺悗閲嶆柊杩愯job锛岃瀵熸晥鏋滐紝姝ゆ椂浼氬彂鐜帮紝job浼氭瘡娆¤繍琛3涓猵od锛屾诲叡鎵ц浜6涓猵od +[root@k8s-master01 ~]# kubectl get pods -n dev -w +NAME READY STATUS RESTARTS AGE +pc-job-684ft 1/1 Running 0 5s +pc-job-jhj49 1/1 Running 0 5s +pc-job-pfcvh 1/1 Running 0 5s +pc-job-684ft 0/1 Completed 0 11s +pc-job-v7rhr 0/1 Pending 0 0s +pc-job-v7rhr 0/1 Pending 0 0s +pc-job-v7rhr 0/1 ContainerCreating 0 0s +pc-job-jhj49 0/1 Completed 0 11s +pc-job-fhwf7 0/1 Pending 0 0s +pc-job-fhwf7 0/1 Pending 0 0s +pc-job-pfcvh 0/1 Completed 0 11s +pc-job-5vg2j 0/1 Pending 0 0s +pc-job-fhwf7 0/1 ContainerCreating 0 0s +pc-job-5vg2j 0/1 Pending 0 0s +pc-job-5vg2j 0/1 ContainerCreating 0 0s +pc-job-fhwf7 1/1 Running 0 2s +pc-job-v7rhr 1/1 Running 0 2s +pc-job-5vg2j 1/1 Running 0 3s +pc-job-fhwf7 0/1 Completed 0 12s +pc-job-v7rhr 0/1 Completed 0 12s +pc-job-5vg2j 0/1 Completed 0 12s + +# 鍒犻櫎job +[root@k8s-master01 ~]# kubectl delete -f pc-job.yaml +job.batch "pc-job" deleted +``` + +## 6.7 CronJob(CJ) + +CronJob鎺у埗鍣ㄤ互Job鎺у埗鍣ㄨ祫婧愪负鍏剁鎺у璞★紝骞跺熷姪瀹冪鐞唒od璧勬簮瀵硅薄锛孞ob鎺у埗鍣ㄥ畾涔夌殑浣滀笟浠诲姟鍦ㄥ叾鎺у埗鍣ㄨ祫婧愬垱寤轰箣鍚庝究浼氱珛鍗虫墽琛岋紝浣咰ronJob鍙互浠ョ被浼间簬Linux鎿嶄綔绯荤粺鐨勫懆鏈熸т换鍔′綔涓氳鍒掔殑鏂瑰紡鎺у埗鍏惰繍琛**鏃堕棿鐐**鍙**閲嶅杩愯**鐨勬柟寮忋備篃灏辨槸璇达紝**CronJob鍙互鍦ㄧ壒瀹氱殑鏃堕棿鐐(鍙嶅鐨)鍘昏繍琛宩ob浠诲姟**銆 + +![img](Kubenetes.assets/image-20200618213149531.png) + +CronJob鐨勮祫婧愭竻鍗曟枃浠讹細 + +```yaml +apiVersion: batch/v1beta1 # 鐗堟湰鍙 +kind: CronJob # 绫诲瀷 +metadata: # 鍏冩暟鎹 + name: # rs鍚嶇О + namespace: # 鎵灞炲懡鍚嶇┖闂 + labels: #鏍囩 + controller: cronjob +spec: # 璇︽儏鎻忚堪 + schedule: # cron鏍煎紡鐨勪綔涓氳皟搴﹁繍琛屾椂闂寸偣,鐢ㄤ簬鎺у埗浠诲姟鍦ㄤ粈涔堟椂闂存墽琛 + concurrencyPolicy: # 骞跺彂鎵ц绛栫暐锛岀敤浜庡畾涔夊墠涓娆′綔涓氳繍琛屽皻鏈畬鎴愭椂鏄惁浠ュ強濡備綍杩愯鍚庝竴娆$殑浣滀笟 + failedJobHistoryLimit: # 涓哄け璐ョ殑浠诲姟鎵ц淇濈暀鐨勫巻鍙茶褰曟暟锛岄粯璁や负1 + successfulJobHistoryLimit: # 涓烘垚鍔熺殑浠诲姟鎵ц淇濈暀鐨勫巻鍙茶褰曟暟锛岄粯璁や负3 + startingDeadlineSeconds: # 鍚姩浣滀笟閿欒鐨勮秴鏃舵椂闀 + jobTemplate: # job鎺у埗鍣ㄦā鏉匡紝鐢ㄤ簬涓篶ronjob鎺у埗鍣ㄧ敓鎴恓ob瀵硅薄;涓嬮潰鍏跺疄灏辨槸job鐨勫畾涔 + metadata: + spec: + completions: 1 + parallelism: 1 + activeDeadlineSeconds: 30 + backoffLimit: 6 + manualSelector: true + selector: + matchLabels: + app: counter-pod + matchExpressions: 瑙勫垯 + - {key: app, operator: In, values: [counter-pod]} + template: + metadata: + labels: + app: counter-pod + spec: + restartPolicy: Never + containers: + - name: counter + image: busybox:1.30 + command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 20;done"] +``` + +```yaml +闇瑕侀噸鐐硅В閲婄殑鍑犱釜閫夐」锛 +schedule: cron琛ㄨ揪寮忥紝鐢ㄤ簬鎸囧畾浠诲姟鐨勬墽琛屾椂闂 + */1 * * * * + <鍒嗛挓> <灏忔椂> <鏃> <鏈堜唤> <鏄熸湡> + + 鍒嗛挓 鍊间粠 0 鍒 59. + 灏忔椂 鍊间粠 0 鍒 23. + 鏃 鍊间粠 1 鍒 31. + 鏈 鍊间粠 1 鍒 12. + 鏄熸湡 鍊间粠 0 鍒 6, 0 浠h〃鏄熸湡鏃 + 澶氫釜鏃堕棿鍙互鐢ㄩ楀彿闅斿紑锛 鑼冨洿鍙互鐢ㄨ繛瀛楃缁欏嚭锛*鍙互浣滀负閫氶厤绗︼紱 /琛ㄧず姣... +concurrencyPolicy: + Allow: 鍏佽Jobs骞跺彂杩愯(榛樿) + Forbid: 绂佹骞跺彂杩愯锛屽鏋滀笂涓娆¤繍琛屽皻鏈畬鎴愶紝鍒欒烦杩囦笅涓娆¤繍琛 + Replace: 鏇挎崲锛屽彇娑堝綋鍓嶆鍦ㄨ繍琛岀殑浣滀笟骞剁敤鏂颁綔涓氭浛鎹㈠畠 +``` + +鍒涘缓pc-cronjob.yaml锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: batch/v1beta1 +kind: CronJob +metadata: + name: pc-cronjob + namespace: dev + labels: + controller: cronjob +spec: + schedule: "*/1 * * * *" + jobTemplate: + metadata: + spec: + template: + spec: + restartPolicy: Never + containers: + - name: counter + image: busybox:1.30 + command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 3;done"] +``` + +```shell +# 鍒涘缓cronjob +[root@k8s-master01 ~]# kubectl create -f pc-cronjob.yaml +cronjob.batch/pc-cronjob created + +# 鏌ョ湅cronjob +[root@k8s-master01 ~]# kubectl get cronjobs -n dev +NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE +pc-cronjob */1 * * * * False 0 6s + +# 鏌ョ湅job +[root@k8s-master01 ~]# kubectl get jobs -n dev +NAME COMPLETIONS DURATION AGE +pc-cronjob-1592587800 1/1 28s 3m26s +pc-cronjob-1592587860 1/1 28s 2m26s +pc-cronjob-1592587920 1/1 28s 86s + +# 鏌ョ湅pod +[root@k8s-master01 ~]# kubectl get pods -n dev +pc-cronjob-1592587800-x4tsm 0/1 Completed 0 2m24s +pc-cronjob-1592587860-r5gv4 0/1 Completed 0 84s +pc-cronjob-1592587920-9dxxq 1/1 Running 0 24s + + +# 鍒犻櫎cronjob +[root@k8s-master01 ~]# kubectl delete -f pc-cronjob.yaml +cronjob.batch "pc-cronjob" deleted +``` + + + + + +# 7. Service璇﹁В + +## 7.1 Service浠嬬粛 + +鍦╧ubernetes涓紝pod鏄簲鐢ㄧ▼搴忕殑杞戒綋锛屾垜浠彲浠ラ氳繃pod鐨刬p鏉ヨ闂簲鐢ㄧ▼搴忥紝浣嗘槸pod鐨刬p鍦板潃涓嶆槸鍥哄畾鐨勶紝杩欎篃灏辨剰鍛崇潃涓嶆柟渚跨洿鎺ラ噰鐢╬od鐨刬p瀵规湇鍔¤繘琛岃闂 + +涓轰簡瑙e喅杩欎釜闂锛宬ubernetes鎻愪緵浜哠ervice璧勬簮锛孲ervice浼氬鎻愪緵鍚屼竴涓湇鍔$殑澶氫釜pod杩涜鑱氬悎锛屽苟涓旀彁渚涗竴涓粺涓鐨勫叆鍙e湴鍧銆傞氳繃璁块棶Service鐨勫叆鍙e湴鍧灏辫兘璁块棶鍒板悗闈㈢殑pod鏈嶅姟銆 + +![img](Kubenetes.assets/image-20200408194716912-1626783758946.png) + +Service鍦ㄥ緢澶氭儏鍐典笅鍙槸涓涓蹇碉紝鐪熸璧蜂綔鐢ㄧ殑鍏跺疄鏄痥ube-proxy鏈嶅姟杩涚▼锛屾瘡涓狽ode鑺傜偣涓婇兘杩愯鐫涓涓猭ube-proxy鏈嶅姟杩涚▼銆傚綋鍒涘缓Service鐨勬椂鍊欎細閫氳繃api-server鍚慹tcd鍐欏叆鍒涘缓鐨剆ervice鐨勪俊鎭紝鑰宬ube-proxy浼氬熀浜庣洃鍚殑鏈哄埗鍙戠幇杩欑Service鐨勫彉鍔紝鐒跺悗**瀹冧細灏嗘渶鏂扮殑Service淇℃伅杞崲鎴愬搴旂殑璁块棶瑙勫垯**銆 + +![img](Kubenetes.assets/image-20200509121254425.png) + + + +``` +# 10.97.97.97:80 鏄痵ervice鎻愪緵鐨勮闂叆鍙 +# 褰撹闂繖涓叆鍙g殑鏃跺欙紝鍙互鍙戠幇鍚庨潰鏈変笁涓猵od鐨勬湇鍔″湪绛夊緟璋冪敤锛 +# kube-proxy浼氬熀浜巖r锛堣疆璇級鐨勭瓥鐣ワ紝灏嗚姹傚垎鍙戝埌鍏朵腑涓涓猵od涓婂幓 +# 杩欎釜瑙勫垯浼氬悓鏃跺湪闆嗙兢鍐呯殑鎵鏈夎妭鐐逛笂閮界敓鎴愶紝鎵浠ュ湪浠讳綍涓涓妭鐐逛笂璁块棶閮藉彲浠ャ +[root@node1 ~]# ipvsadm -Ln +IP Virtual Server version 1.2.1 (size=4096) +Prot LocalAddress:Port Scheduler Flags + -> RemoteAddress:Port Forward Weight ActiveConn InActConn +TCP 10.97.97.97:80 rr + -> 10.244.1.39:80 Masq 1 0 0 + -> 10.244.1.40:80 Masq 1 0 0 + -> 10.244.2.33:80 Masq 1 0 0 +``` + +kube-proxy鐩墠鏀寔涓夌宸ヤ綔妯″紡: + +**userspace 妯″紡** + +userspace妯″紡涓嬶紝kube-proxy浼氫负姣忎竴涓猄ervice鍒涘缓涓涓洃鍚鍙o紝鍙戝悜Cluster IP鐨勮姹傝Iptables瑙勫垯閲嶅畾鍚戝埌kube-proxy鐩戝惉鐨勭鍙d笂锛宬ube-proxy鏍规嵁LB绠楁硶閫夋嫨涓涓彁渚涙湇鍔$殑Pod骞跺拰鍏跺缓绔嬮摼鎺ワ紝浠ュ皢璇锋眰杞彂鍒癙od涓娿 璇ユā寮忎笅锛宬ube-proxy鍏呭綋浜嗕竴涓洓灞傝礋璐e潎琛″櫒鐨勮鑹层傜敱浜巏ube-proxy杩愯鍦╱serspace涓紝鍦ㄨ繘琛岃浆鍙戝鐞嗘椂浼氬鍔犲唴鏍稿拰鐢ㄦ埛绌洪棿涔嬮棿鐨勬暟鎹嫹璐濓紝铏界劧姣旇緝绋冲畾锛屼絾鏄晥鐜囨瘮杈冧綆銆 + +![img](Kubenetes.assets/image-20200509151424280.png) + +**鍏充簬Nginx/LVS/HAProxy璐熻浇鍧囪 ,鍙奓4/L7鐭ヨ瘑鍙弬鑰冭繖绡 锛 [Nginx/LVS/HAProxy璐熻浇鍧囪 杞欢鐨勪紭缂虹偣璇﹁В](http://www.ha97.com/5646.html)** + +**iptables 妯″紡** + +iptables妯″紡涓嬶紝kube-proxy涓簊ervice鍚庣鐨勬瘡涓狿od鍒涘缓瀵瑰簲鐨刬ptables瑙勫垯锛岀洿鎺ュ皢鍙戝悜Cluster IP鐨勮姹傞噸瀹氬悜鍒颁竴涓狿od IP銆 璇ユā寮忎笅kube-proxy涓嶆壙鎷呭洓灞傝礋璐e潎琛″櫒鐨勮鑹诧紝鍙礋璐e垱寤篿ptables瑙勫垯銆傝妯″紡鐨勪紭鐐规槸杈僽serspace妯″紡鏁堢巼鏇撮珮锛屼絾涓嶈兘鎻愪緵鐏垫椿鐨凩B绛栫暐锛屽綋鍚庣Pod涓嶅彲鐢ㄦ椂涔熸棤娉曡繘琛岄噸璇曘 + +![img](Kubenetes.assets/image-20200509152947714.png) + +**ipvs 妯″紡** + +ipvs妯″紡鍜宨ptables绫讳技锛宬ube-proxy鐩戞帶Pod鐨勫彉鍖栧苟鍒涘缓鐩稿簲鐨刬pvs瑙勫垯銆俰pvs鐩稿iptables杞彂鏁堢巼鏇撮珮銆傞櫎姝や互澶栵紝ipvs鏀寔鏇村鐨凩B绠楁硶銆 + +![img](Kubenetes.assets/image-20200509153731363.png) + +```shell +# 姝ゆā寮忓繀椤诲畨瑁卛pvs鍐呮牳妯″潡锛屽惁鍒欎細闄嶇骇涓篿ptables +# 寮鍚痠pvs +[root@k8s-master01 ~]# kubectl edit cm kube-proxy -n kube-system +# 淇敼mode: "ipvs" +[root@k8s-master01 ~]# kubectl delete pod -l k8s-app=kube-proxy -n kube-system +[root@node1 ~]# ipvsadm -Ln +IP Virtual Server version 1.2.1 (size=4096) +Prot LocalAddress:Port Scheduler Flags + -> RemoteAddress:Port Forward Weight ActiveConn InActConn +TCP 10.97.97.97:80 rr + -> 10.244.1.39:80 Masq 1 0 0 + -> 10.244.1.40:80 Masq 1 0 0 + -> 10.244.2.33:80 Masq 1 0 0 +``` + +## 7.2 Service绫诲瀷 + +Service鐨勮祫婧愭竻鍗曟枃浠讹細 + +```yaml +kind: Service # 璧勬簮绫诲瀷 +apiVersion: v1 # 璧勬簮鐗堟湰 +metadata: # 鍏冩暟鎹 + name: service # 璧勬簮鍚嶇О + namespace: dev # 鍛藉悕绌洪棿 +spec: # 鎻忚堪 + selector: # 鏍囩閫夋嫨鍣紝鐢ㄤ簬纭畾褰撳墠service浠g悊鍝簺pod + app: nginx + type: # Service绫诲瀷锛屾寚瀹歴ervice鐨勮闂柟寮 + clusterIP: # 铏氭嫙鏈嶅姟鐨刬p鍦板潃 + sessionAffinity: # session浜插拰鎬э紝鏀寔ClientIP銆丯one涓や釜閫夐」 + ports: # 绔彛淇℃伅 + - protocol: TCP + port: 3017 # service绔彛 + targetPort: 5003 # pod绔彛 + nodePort: 31122 # 涓绘満绔彛 +``` + +- ClusterIP锛氶粯璁ゅ硷紝瀹冩槸Kubernetes绯荤粺鑷姩鍒嗛厤鐨勮櫄鎷烮P锛屽彧鑳藉湪闆嗙兢鍐呴儴璁块棶 +- NodePort锛氬皢Service閫氳繃鎸囧畾鐨凬ode涓婄殑绔彛鏆撮湶缁欏閮紝閫氳繃姝ゆ柟娉曪紝灏卞彲浠ュ湪闆嗙兢澶栭儴璁块棶鏈嶅姟 +- LoadBalancer锛氫娇鐢ㄥ鎺ヨ礋杞藉潎琛″櫒瀹屾垚鍒版湇鍔$殑璐熻浇鍒嗗彂锛屾敞鎰忔妯″紡闇瑕佸閮ㄤ簯鐜鏀寔 +- ExternalName锛 鎶婇泦缇ゅ閮ㄧ殑鏈嶅姟寮曞叆闆嗙兢鍐呴儴锛岀洿鎺ヤ娇鐢 + +## 7.3 Service浣跨敤 + +### 7.3.1 瀹為獙鐜鍑嗗 + +鍦ㄤ娇鐢╯ervice涔嬪墠锛岄鍏堝埄鐢―eployment鍒涘缓鍑3涓猵od锛屾敞鎰忚涓簆od璁剧疆`app=nginx-pod`鐨勬爣绛 + +鍒涘缓deployment.yaml锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: pc-deployment + namespace: dev +spec: + replicas: 3 + selector: + matchLabels: + app: nginx-pod + template: + metadata: + labels: + app: nginx-pod + spec: + containers: + - name: nginx + image: nginx:1.17.1 + ports: + - containerPort: 80 +``` + +```shell +[root@k8s-master01 ~]# kubectl create -f deployment.yaml +deployment.apps/pc-deployment created + +# 鏌ョ湅pod璇︽儏 +[root@k8s-master01 ~]# kubectl get pods -n dev -o wide --show-labels +NAME READY STATUS IP NODE LABELS +pc-deployment-66cb59b984-8p84h 1/1 Running 10.244.1.39 node1 app=nginx-pod +pc-deployment-66cb59b984-vx8vx 1/1 Running 10.244.2.33 node2 app=nginx-pod +pc-deployment-66cb59b984-wnncx 1/1 Running 10.244.1.40 node1 app=nginx-pod + +# 涓轰簡鏂逛究鍚庨潰鐨勬祴璇曪紝淇敼涓嬩笁鍙皀ginx鐨刬ndex.html椤甸潰锛堜笁鍙颁慨鏀圭殑IP鍦板潃涓嶄竴鑷达級 +# kubectl exec -it pc-deployment-66cb59b984-8p84h -n dev /bin/sh +# echo "10.244.1.39" > /usr/share/nginx/html/index.html + +#淇敼瀹屾瘯涔嬪悗锛岃闂祴璇 +[root@k8s-master01 ~]# curl 10.244.1.39 +10.244.1.39 +[root@k8s-master01 ~]# curl 10.244.2.33 +10.244.2.33 +[root@k8s-master01 ~]# curl 10.244.1.40 +10.244.1.40 +``` + +### 7.3.2 ClusterIP绫诲瀷鐨凷ervice + +鍒涘缓service-clusterip.yaml鏂囦欢 + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: service-clusterip + namespace: dev +spec: + selector: + app: nginx-pod + clusterIP: 10.97.97.97 # service鐨刬p鍦板潃锛屽鏋滀笉鍐欙紝榛樿浼氱敓鎴愪竴涓 + type: ClusterIP + ports: + - port: 80 # Service绔彛 + targetPort: 80 # pod绔彛 +``` + +```shell +# 鍒涘缓service +[root@k8s-master01 ~]# kubectl create -f service-clusterip.yaml +service/service-clusterip created + +# 鏌ョ湅service +[root@k8s-master01 ~]# kubectl get svc -n dev -o wide +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR +service-clusterip ClusterIP 10.97.97.97 80/TCP 13s app=nginx-pod + +# 鏌ョ湅service鐨勮缁嗕俊鎭 +# 鍦ㄨ繖閲屾湁涓涓狤ndpoints鍒楄〃锛岄噷闈㈠氨鏄綋鍓峴ervice鍙互璐熻浇鍒扮殑鏈嶅姟鍏ュ彛 +[root@k8s-master01 ~]# kubectl describe svc service-clusterip -n dev +Name: service-clusterip +Namespace: dev +Labels: +Annotations: +Selector: app=nginx-pod +Type: ClusterIP +IP: 10.97.97.97 +Port: 80/TCP +TargetPort: 80/TCP +Endpoints: 10.244.1.39:80,10.244.1.40:80,10.244.2.33:80 +Session Affinity: None +Events: + +# 鏌ョ湅ipvs鐨勬槧灏勮鍒 +[root@k8s-master01 ~]# ipvsadm -Ln +TCP 10.97.97.97:80 rr + -> 10.244.1.39:80 Masq 1 0 0 + -> 10.244.1.40:80 Masq 1 0 0 + -> 10.244.2.33:80 Masq 1 0 0 + +# 璁块棶10.97.97.97:80瑙傚療鏁堟灉 +[root@k8s-master01 ~]# curl 10.97.97.97:80 +10.244.2.33 +``` + +**Endpoint** + +Endpoint鏄痥ubernetes涓殑涓涓祫婧愬璞★紝瀛樺偍鍦╡tcd涓紝鐢ㄦ潵璁板綍涓涓猻ervice瀵瑰簲鐨勬墍鏈塸od鐨勮闂湴鍧锛屽畠鏄牴鎹畇ervice閰嶇疆鏂囦欢涓璼elector鎻忚堪浜х敓鐨勩 + +涓涓猄ervice鐢变竴缁凱od缁勬垚锛岃繖浜汸od閫氳繃Endpoints鏆撮湶鍑烘潵锛**Endpoints鏄疄鐜板疄闄呮湇鍔$殑绔偣闆嗗悎**銆傛崲鍙ヨ瘽璇达紝service鍜宲od涔嬮棿鐨勮仈绯绘槸閫氳繃endpoints瀹炵幇鐨勩 + +![image-20200509191917069](Kubenetes.assets/image-20200509191917069.png) + +**璐熻浇鍒嗗彂绛栫暐** + +瀵筍ervice鐨勮闂鍒嗗彂鍒颁簡鍚庣鐨凱od涓婂幓锛岀洰鍓峩ubernetes鎻愪緵浜嗕袱绉嶈礋杞藉垎鍙戠瓥鐣ワ細 + +- 濡傛灉涓嶅畾涔夛紝榛樿浣跨敤kube-proxy鐨勭瓥鐣ワ紝姣斿闅忔満銆佽疆璇 + +- 鍩轰簬瀹㈡埛绔湴鍧鐨勪細璇濅繚鎸佹ā寮忥紝鍗虫潵鑷悓涓涓鎴风鍙戣捣鐨勬墍鏈夎姹傞兘浼氳浆鍙戝埌鍥哄畾鐨勪竴涓狿od涓 + + 姝ゆā寮忓彲浠ヤ娇鍦╯pec涓坊鍔燻sessionAffinity:ClientIP`閫夐」 + +```shell +# 鏌ョ湅ipvs鐨勬槧灏勮鍒欍恟r 杞銆 +[root@k8s-master01 ~]# ipvsadm -Ln +TCP 10.97.97.97:80 rr + -> 10.244.1.39:80 Masq 1 0 0 + -> 10.244.1.40:80 Masq 1 0 0 + -> 10.244.2.33:80 Masq 1 0 0 + +# 寰幆璁块棶娴嬭瘯 +[root@k8s-master01 ~]# while true;do curl 10.97.97.97:80; sleep 5; done; +10.244.1.40 +10.244.1.39 +10.244.2.33 +10.244.1.40 +10.244.1.39 +10.244.2.33 + +# 淇敼鍒嗗彂绛栫暐----sessionAffinity:ClientIP + +# 鏌ョ湅ipvs瑙勫垯銆恜ersistent 浠h〃鎸佷箙銆 +[root@k8s-master01 ~]# ipvsadm -Ln +TCP 10.97.97.97:80 rr persistent 10800 + -> 10.244.1.39:80 Masq 1 0 0 + -> 10.244.1.40:80 Masq 1 0 0 + -> 10.244.2.33:80 Masq 1 0 0 + +# 寰幆璁块棶娴嬭瘯 +[root@k8s-master01 ~]# while true;do curl 10.97.97.97; sleep 5; done; +10.244.2.33 +10.244.2.33 +10.244.2.33 + +# 鍒犻櫎service +[root@k8s-master01 ~]# kubectl delete -f service-clusterip.yaml +service "service-clusterip" deleted +``` + +### 7.3.3 HeadLiness绫诲瀷鐨凷ervice + +鍦ㄦ煇浜涘満鏅腑锛屽紑鍙戜汉鍛樺彲鑳戒笉鎯充娇鐢⊿ervice鎻愪緵鐨勮礋杞藉潎琛″姛鑳斤紝鑰屽笇鏈涜嚜宸辨潵鎺у埗璐熻浇鍧囪 绛栫暐锛岄拡瀵硅繖绉嶆儏鍐碉紝kubernetes鎻愪緵浜咹eadLiness Service锛岃繖绫籗ervice涓嶄細鍒嗛厤Cluster IP锛屽鏋滄兂瑕佽闂畇ervice锛屽彧鑳介氳繃service鐨勫煙鍚嶈繘琛屾煡璇€ + +鍒涘缓service-headliness.yaml + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: service-headliness + namespace: dev +spec: + selector: + app: nginx-pod + clusterIP: None # 灏哻lusterIP璁剧疆涓篘one锛屽嵆鍙垱寤篽eadliness Service + type: ClusterIP + ports: + - port: 80 + targetPort: 80 +``` + +```shell +# 鍒涘缓service +[root@k8s-master01 ~]# kubectl create -f service-headliness.yaml +service/service-headliness created + +# 鑾峰彇service锛 鍙戠幇CLUSTER-IP鏈垎閰 +[root@k8s-master01 ~]# kubectl get svc service-headliness -n dev -o wide +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR +service-headliness ClusterIP None 80/TCP 11s app=nginx-pod + +# 鏌ョ湅service璇︽儏 +[root@k8s-master01 ~]# kubectl describe svc service-headliness -n dev +Name: service-headliness +Namespace: dev +Labels: +Annotations: +Selector: app=nginx-pod +Type: ClusterIP +IP: None +Port: 80/TCP +TargetPort: 80/TCP +Endpoints: 10.244.1.39:80,10.244.1.40:80,10.244.2.33:80 +Session Affinity: None +Events: + +# 鏌ョ湅鍩熷悕鐨勮В鏋愭儏鍐 +[root@k8s-master01 ~]# kubectl exec -it pc-deployment-66cb59b984-8p84h -n dev /bin/sh +/ # cat /etc/resolv.conf +nameserver 10.96.0.10 +search dev.svc.cluster.local svc.cluster.local cluster.local + +[root@k8s-master01 ~]# dig @10.96.0.10 service-headliness.dev.svc.cluster.local +service-headliness.dev.svc.cluster.local. 30 IN A 10.244.1.40 +service-headliness.dev.svc.cluster.local. 30 IN A 10.244.1.39 +service-headliness.dev.svc.cluster.local. 30 IN A 10.244.2.33 +``` + +### 7.3.4 NodePort绫诲瀷鐨凷ervice + +鍦ㄤ箣鍓嶇殑鏍蜂緥涓紝鍒涘缓鐨凷ervice鐨刬p鍦板潃鍙湁闆嗙兢鍐呴儴鎵嶅彲浠ヨ闂紝濡傛灉甯屾湜灏哠ervice鏆撮湶缁欓泦缇ゅ閮ㄤ娇鐢紝閭d箞灏辫浣跨敤鍒板彟澶栦竴绉嶇被鍨嬬殑Service锛岀О涓篘odePort绫诲瀷銆侼odePort鐨勫伐浣滃師鐞嗗叾瀹炲氨鏄**灏唖ervice鐨勭鍙f槧灏勫埌Node鐨勪竴涓鍙d笂**锛岀劧鍚庡氨鍙互閫氳繃`NodeIp:NodePort`鏉ヨ闂畇ervice浜嗐 + +![img](Kubenetes.assets/image-20200620175731338.png) + +鍒涘缓service-nodeport.yaml + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: service-nodeport + namespace: dev +spec: + selector: + app: nginx-pod + type: NodePort # service绫诲瀷 + ports: + - port: 80 + nodePort: 30002 # 鎸囧畾缁戝畾鐨刵ode鐨勭鍙(榛樿鐨勫彇鍊艰寖鍥存槸锛30000-32767), 濡傛灉涓嶆寚瀹氾紝浼氶粯璁ゅ垎閰 + targetPort: 80 +``` + +```shell +# 鍒涘缓service +[root@k8s-master01 ~]# kubectl create -f service-nodeport.yaml +service/service-nodeport created + +# 鏌ョ湅service +[root@k8s-master01 ~]# kubectl get svc -n dev -o wide +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) SELECTOR +service-nodeport NodePort 10.105.64.191 80:30002/TCP app=nginx-pod + +# 鎺ヤ笅鏉ュ彲浠ラ氳繃鐢佃剳涓绘満鐨勬祻瑙堝櫒鍘昏闂泦缇や腑浠绘剰涓涓猲odeip鐨30002绔彛锛屽嵆鍙闂埌pod +``` + +### 7.3.5 LoadBalancer绫诲瀷鐨凷ervice + +LoadBalancer鍜孨odePort寰堢浉浼硷紝鐩殑閮芥槸鍚戝閮ㄦ毚闇蹭竴涓鍙o紝鍖哄埆鍦ㄤ簬LoadBalancer浼氬湪闆嗙兢鐨勫閮ㄥ啀鏉ュ仛涓涓礋杞藉潎琛¤澶囷紝鑰岃繖涓澶囬渶瑕佸閮ㄧ幆澧冩敮鎸佺殑锛屽閮ㄦ湇鍔″彂閫佸埌杩欎釜璁惧涓婄殑璇锋眰锛屼細琚澶囪礋杞戒箣鍚庤浆鍙戝埌闆嗙兢涓 + +![img](Kubenetes.assets/image-20200510103945494.png) + +### 7.3.6 ExternalName绫诲瀷鐨凷ervice + +ExternalName绫诲瀷鐨凷ervice鐢ㄤ簬寮曞叆闆嗙兢澶栭儴鐨勬湇鍔★紝瀹冮氳繃`externalName`灞炴ф寚瀹氬閮ㄤ竴涓湇鍔$殑鍦板潃锛岀劧鍚庡湪闆嗙兢鍐呴儴璁块棶姝ervice灏卞彲浠ヨ闂埌澶栭儴鐨勬湇鍔′簡銆 + +![img](Kubenetes.assets/image-20200510113311209.png) + +```shell +apiVersion: v1 +kind: Service +metadata: + name: service-externalname + namespace: dev +spec: + type: ExternalName # service绫诲瀷 + externalName: www.baidu.com #鏀规垚ip鍦板潃涔熷彲浠 +``` + +```shell +# 鍒涘缓service +[root@k8s-master01 ~]# kubectl create -f service-externalname.yaml +service/service-externalname created + +# 鍩熷悕瑙f瀽 +[root@k8s-master01 ~]# dig @10.96.0.10 service-externalname.dev.svc.cluster.local +service-externalname.dev.svc.cluster.local. 30 IN CNAME www.baidu.com. +www.baidu.com. 30 IN CNAME www.a.shifen.com. +www.a.shifen.com. 30 IN A 39.156.66.18 +www.a.shifen.com. 30 IN A 39.156.66.14 +``` + +## 7.4 Ingress浠嬬粛 + +鍦ㄥ墠闈㈣绋嬩腑宸茬粡鎻愬埌锛孲ervice瀵归泦缇や箣澶栨毚闇叉湇鍔$殑涓昏鏂瑰紡鏈変袱绉嶏細NotePort鍜孡oadBalancer锛屼絾鏄繖涓ょ鏂瑰紡锛岄兘鏈変竴瀹氱殑缂虹偣锛 + +- NodePort鏂瑰紡鐨勭己鐐规槸浼氬崰鐢ㄥ緢澶氶泦缇ゆ満鍣ㄧ殑绔彛锛岄偅涔堝綋闆嗙兢鏈嶅姟鍙樺鐨勬椂鍊欙紝杩欎釜缂虹偣灏辨剤鍙戞槑鏄 +- LB鏂瑰紡鐨勭己鐐规槸姣忎釜service闇瑕佷竴涓狶B锛屾氮璐广侀夯鐑︼紝骞朵笖闇瑕乲ubernetes涔嬪璁惧鐨勬敮鎸 + +鍩轰簬杩欑鐜扮姸锛宬ubernetes鎻愪緵浜咺ngress璧勬簮瀵硅薄锛孖ngress鍙渶瑕佷竴涓狽odePort鎴栬呬竴涓狶B灏卞彲浠ユ弧瓒虫毚闇插涓猄ervice鐨勯渶姹傘傚伐浣滄満鍒跺ぇ鑷村涓嬪浘琛ㄧず锛 + +![img](Kubenetes.assets/image-20200623092808049.png) + +瀹為檯涓婏紝Ingress鐩稿綋浜庝竴涓7灞傜殑璐熻浇鍧囪 鍣紝鏄痥ubernetes瀵瑰弽鍚戜唬鐞嗙殑涓涓娊璞★紝瀹冪殑宸ヤ綔鍘熺悊绫讳技浜嶯ginx锛屽彲浠ョ悊瑙f垚鍦**Ingress閲屽缓绔嬭澶氭槧灏勮鍒欙紝Ingress Controller閫氳繃鐩戝惉杩欎簺閰嶇疆瑙勫垯骞惰浆鍖栨垚Nginx鐨勫弽鍚戜唬鐞嗛厤缃 , 鐒跺悗瀵瑰閮ㄦ彁渚涙湇鍔**銆傚湪杩欓噷鏈変袱涓牳蹇冩蹇碉細 + +- ingress锛歬ubernetes涓殑涓涓璞★紝浣滅敤鏄畾涔夎姹傚浣曡浆鍙戝埌service鐨勮鍒 +- ingress controller锛氬叿浣撳疄鐜板弽鍚戜唬鐞嗗強璐熻浇鍧囪 鐨勭▼搴忥紝瀵筰ngress瀹氫箟鐨勮鍒欒繘琛岃В鏋愶紝鏍规嵁閰嶇疆鐨勮鍒欐潵瀹炵幇璇锋眰杞彂锛屽疄鐜版柟寮忔湁寰堝锛屾瘮濡侼ginx, Contour, Haproxy绛夌瓑 + +Ingress锛堜互Nginx涓轰緥锛夌殑宸ヤ綔鍘熺悊濡備笅锛 + +1. 鐢ㄦ埛缂栧啓Ingress瑙勫垯锛岃鏄庡摢涓煙鍚嶅搴攌ubernetes闆嗙兢涓殑鍝釜Service +2. Ingress鎺у埗鍣ㄥ姩鎬佹劅鐭ngress鏈嶅姟瑙勫垯鐨勫彉鍖栵紝鐒跺悗鐢熸垚涓娈靛搴旂殑Nginx鍙嶅悜浠g悊閰嶇疆 +3. Ingress鎺у埗鍣ㄤ細灏嗙敓鎴愮殑Nginx閰嶇疆鍐欏叆鍒颁竴涓繍琛岀潃鐨凬ginx鏈嶅姟涓紝骞跺姩鎬佹洿鏂 +4. 鍒版涓烘锛屽叾瀹炵湡姝e湪宸ヤ綔鐨勫氨鏄竴涓狽ginx浜嗭紝鍐呴儴閰嶇疆浜嗙敤鎴峰畾涔夌殑璇锋眰杞彂瑙勫垯 + +![img](Kubenetes.assets/image-20200516112704764.png) + +## 7.5 Ingress浣跨敤 + +### 7.5.1 鐜鍑嗗 + +**鎼缓ingress鐜** + +``` +# 鍒涘缓鏂囦欢澶 +[root@k8s-master01 ~]# mkdir ingress-controller +[root@k8s-master01 ~]# cd ingress-controller/ + +# 鑾峰彇ingress-nginx锛屾湰娆℃渚嬩娇鐢ㄧ殑鏄0.30鐗堟湰 +[root@k8s-master01 ingress-controller]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml +[root@k8s-master01 ingress-controller]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml + +# 淇敼mandatory.yaml鏂囦欢涓殑浠撳簱 +# 淇敼quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0 +# 涓簈uay-mirror.qiniu.com/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0 +# 鍒涘缓ingress-nginx +[root@k8s-master01 ingress-controller]# kubectl apply -f ./ + +# 鏌ョ湅ingress-nginx +[root@k8s-master01 ingress-controller]# kubectl get pod -n ingress-nginx +NAME READY STATUS RESTARTS AGE +pod/nginx-ingress-controller-fbf967dd5-4qpbp 1/1 Running 0 12h + +# 鏌ョ湅service +[root@k8s-master01 ingress-controller]# kubectl get svc -n ingress-nginx +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +ingress-nginx NodePort 10.98.75.163 80:32240/TCP,443:31335/TCP 11h +``` + +**鍑嗗service鍜宲od** + +涓轰簡鍚庨潰鐨勫疄楠屾瘮杈冩柟渚匡紝鍒涘缓濡備笅鍥炬墍绀虹殑妯″瀷 + +![img](Kubenetes.assets/image-20200516102419998.png) + +鍒涘缓tomcat-nginx.yaml + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment + namespace: dev +spec: + replicas: 3 + selector: + matchLabels: + app: nginx-pod + template: + metadata: + labels: + app: nginx-pod + spec: + containers: + - name: nginx + image: nginx:1.17.1 + ports: + - containerPort: 80 + +--- + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: tomcat-deployment + namespace: dev +spec: + replicas: 3 + selector: + matchLabels: + app: tomcat-pod + template: + metadata: + labels: + app: tomcat-pod + spec: + containers: + - name: tomcat + image: tomcat:8.5-jre10-slim + ports: + - containerPort: 8080 + +--- + +apiVersion: v1 +kind: Service +metadata: + name: nginx-service + namespace: dev +spec: + selector: + app: nginx-pod + clusterIP: None + type: ClusterIP + ports: + - port: 80 + targetPort: 80 + +--- + +apiVersion: v1 +kind: Service +metadata: + name: tomcat-service + namespace: dev +spec: + selector: + app: tomcat-pod + clusterIP: None + type: ClusterIP + ports: + - port: 8080 + targetPort: 8080 +``` + +```shell +# 鍒涘缓 +[root@k8s-master01 ~]# kubectl create -f tomcat-nginx.yaml + +# 鏌ョ湅 +[root@k8s-master01 ~]# kubectl get svc -n dev +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +nginx-service ClusterIP None 80/TCP 48s +tomcat-service ClusterIP None 8080/TCP 48s +``` + +### 7.5.2 Http浠g悊 + +鍒涘缓ingress-http.yaml + +```yaml +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: ingress-http + namespace: dev +spec: + rules: + - host: nginx.itheima.com + http: + paths: + - path: / + backend: + serviceName: nginx-service + servicePort: 80 + - host: tomcat.itheima.com + http: + paths: + - path: / + backend: + serviceName: tomcat-service + servicePort: 8080 +``` + +```shell +# 鍒涘缓 +[root@k8s-master01 ~]# kubectl create -f ingress-http.yaml +ingress.extensions/ingress-http created + +# 鏌ョ湅 +[root@k8s-master01 ~]# kubectl get ing ingress-http -n dev +NAME HOSTS ADDRESS PORTS AGE +ingress-http nginx.itheima.com,tomcat.itheima.com 80 22s + +# 鏌ョ湅璇︽儏 +[root@k8s-master01 ~]# kubectl describe ing ingress-http -n dev +... +Rules: +Host Path Backends +---- ---- -------- +nginx.itheima.com / nginx-service:80 (10.244.1.96:80,10.244.1.97:80,10.244.2.112:80) +tomcat.itheima.com / tomcat-service:8080(10.244.1.94:8080,10.244.1.95:8080,10.244.2.111:8080) +... + +# 鎺ヤ笅鏉,鍦ㄦ湰鍦扮數鑴戜笂閰嶇疆host鏂囦欢,瑙f瀽涓婇潰鐨勪袱涓煙鍚嶅埌192.168.109.100(master)涓 +# 鐒跺悗,灏卞彲浠ュ垎鍒闂畉omcat.itheima.com:32240 鍜 nginx.itheima.com:32240 鏌ョ湅鏁堟灉浜 +``` + +### 7.5.3 Https浠g悊 + +鍒涘缓璇佷功 + +```shell +# 鐢熸垚璇佷功 +openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/C=CN/ST=BJ/L=BJ/O=nginx/CN=itheima.com" + +# 鍒涘缓瀵嗛挜 +kubectl create secret tls tls-secret --key tls.key --cert tls.crt +``` + +鍒涘缓ingress-https.yaml + +```yaml +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: ingress-https + namespace: dev +spec: + tls: + - hosts: + - nginx.itheima.com + - tomcat.itheima.com + secretName: tls-secret # 鎸囧畾绉橀挜 + rules: + - host: nginx.itheima.com + http: + paths: + - path: / + backend: + serviceName: nginx-service + servicePort: 80 + - host: tomcat.itheima.com + http: + paths: + - path: / + backend: + serviceName: tomcat-service + servicePort: 8080 +``` + +```shell +# 鍒涘缓 +[root@k8s-master01 ~]# kubectl create -f ingress-https.yaml +ingress.extensions/ingress-https created + +# 鏌ョ湅 +[root@k8s-master01 ~]# kubectl get ing ingress-https -n dev +NAME HOSTS ADDRESS PORTS AGE +ingress-https nginx.itheima.com,tomcat.itheima.com 10.104.184.38 80, 443 2m42s + +# 鏌ョ湅璇︽儏 +[root@k8s-master01 ~]# kubectl describe ing ingress-https -n dev +... +TLS: + tls-secret terminates nginx.itheima.com,tomcat.itheima.com +Rules: +Host Path Backends +---- ---- -------- +nginx.itheima.com / nginx-service:80 (10.244.1.97:80,10.244.1.98:80,10.244.2.119:80) +tomcat.itheima.com / tomcat-service:8080(10.244.1.99:8080,10.244.2.117:8080,10.244.2.120:8080) +... + +# 涓嬮潰鍙互閫氳繃娴忚鍣ㄨ闂甴ttps://nginx.itheima.com:31335 鍜 https://tomcat.itheima.com:31335鏉ユ煡鐪嬩簡 +``` + +# 8. 鏁版嵁瀛樺偍 + +鍦ㄥ墠闈㈠凡缁忔彁鍒帮紝瀹瑰櫒鐨勭敓鍛藉懆鏈熷彲鑳藉緢鐭紝浼氳棰戠箒鍦板垱寤哄拰閿姣併傞偅涔堝鍣ㄥ湪閿姣佹椂锛屼繚瀛樺湪瀹瑰櫒涓殑鏁版嵁涔熶細琚竻闄ゃ傝繖绉嶇粨鏋滃鐢ㄦ埛鏉ヨ锛屽湪鏌愪簺鎯呭喌涓嬫槸涓嶄箰鎰忕湅鍒扮殑銆備负浜嗘寔涔呭寲淇濆瓨瀹瑰櫒鐨勬暟鎹紝kubernetes寮曞叆浜哣olume鐨勬蹇点 + +Volume鏄疨od涓兘澶熻澶氫釜瀹瑰櫒璁块棶鐨勫叡浜洰褰曪紝瀹冭瀹氫箟鍦≒od涓婏紝鐒跺悗琚竴涓狿od閲岀殑澶氫釜瀹瑰櫒鎸傝浇鍒板叿浣撶殑鏂囦欢鐩綍涓嬶紝kubernetes閫氳繃Volume瀹炵幇鍚屼竴涓狿od涓笉鍚屽鍣ㄤ箣闂寸殑鏁版嵁鍏变韩浠ュ強鏁版嵁鐨勬寔涔呭寲瀛樺偍銆俈olume鐨勭敓鍛藉鍣ㄤ笉涓嶱od涓崟涓鍣ㄧ殑鐢熷懡鍛ㄦ湡鐩稿叧锛屽綋瀹瑰櫒缁堟鎴栬呴噸鍚椂锛孷olume涓殑鏁版嵁涔熶笉浼氫涪澶便 + +kubernetes鐨刅olume鏀寔澶氱绫诲瀷锛屾瘮杈冨父瑙佺殑鏈変笅闈㈠嚑涓細 + +- 绠鍗曞瓨鍌細EmptyDir銆丠ostPath銆丯FS +- 楂樼骇瀛樺偍锛歅V銆丳VC +- 閰嶇疆瀛樺偍锛欳onfigMap銆丼ecret + +CG: +- Dynamic Provisioning + - 鍒涘缓PVC + - Kubernetes鑳芥牴鎹敤鎴锋彁浜ょ殑PVC鎵惧埌StorageClass鑷姩鍒涘缓pv锛宻torageclass鏄垱寤簆v鐨勬ā鏉 + - 杩愮淮浜哄憳鍙鍒涘缓鏈夐檺鐨剆torageclass妯℃澘 + - 鐩殑鏄噺杞昏繍缁村垱寤簆v鐨勫伐浣滈噺銆 +- Local PV锛岄珮浼樺厛绾у簲鐢,鏈湴缂撳瓨銆備笉鍙敤瀹夸富鏈轰笂鐨勭洰褰,涓嶅彲鎺с傛湰鍦伴澶栫鐩橈紝涓鑸滀竴涓猵v涓鍧楃洏銆 +- 鎻掍欢FlexVolumn / CSI, 鐢ㄤ簬鑷畾 + + +## 8.1 鍩烘湰瀛樺偍 + +### 8.1.1 EmptyDir + +EmptyDir鏄渶鍩虹鐨刅olume绫诲瀷锛屼竴涓狤mptyDir灏辨槸Host涓婄殑涓涓┖鐩綍銆 + +EmptyDir鏄湪Pod琚垎閰嶅埌Node鏃跺垱寤虹殑锛屽畠鐨勫垵濮嬪唴瀹逛负绌猴紝骞朵笖鏃犻』鎸囧畾瀹夸富鏈轰笂瀵瑰簲鐨勭洰褰曟枃浠讹紝鍥犱负kubernetes浼氳嚜鍔ㄥ垎閰嶄竴涓洰褰曪紝褰揚od閿姣佹椂锛 EmptyDir涓殑鏁版嵁涔熶細琚案涔呭垹闄ゃ EmptyDir鐢ㄩ斿涓嬶細 + +- 涓存椂绌洪棿锛屼緥濡傜敤浜庢煇浜涘簲鐢ㄧ▼搴忚繍琛屾椂鎵闇鐨勪复鏃剁洰褰曪紝涓旀棤椤绘案涔呬繚鐣 +- 涓涓鍣ㄩ渶瑕佷粠鍙︿竴涓鍣ㄤ腑鑾峰彇鏁版嵁鐨勭洰褰曪紙澶氬鍣ㄥ叡浜洰褰曪級 + +鎺ヤ笅鏉ワ紝閫氳繃涓涓鍣ㄤ箣闂存枃浠跺叡浜殑妗堜緥鏉ヤ娇鐢ㄤ竴涓婨mptyDir銆 + +鍦ㄤ竴涓狿od涓噯澶囦袱涓鍣╪ginx鍜宐usybox锛岀劧鍚庡0鏄庝竴涓猇olume鍒嗗埆鎸傚湪鍒颁袱涓鍣ㄧ殑鐩綍涓紝鐒跺悗nginx瀹瑰櫒璐熻矗鍚慥olume涓啓鏃ュ織锛宐usybox涓氳繃鍛戒护灏嗘棩蹇楀唴瀹硅鍒版帶鍒跺彴銆 + +![img](Kubenetes.assets/image-20200413174713773.png) + +鍒涘缓涓涓獀olume-emptydir.yaml + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: volume-emptydir + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + ports: + - containerPort: 80 + volumeMounts: # 灏唋ogs-volume鎸傚湪鍒皀ginx瀹瑰櫒涓紝瀵瑰簲鐨勭洰褰曚负 /var/log/nginx + - name: logs-volume + mountPath: /var/log/nginx + - name: busybox + image: busybox:1.30 + command: ["/bin/sh","-c","tail -f /logs/access.log"] # 鍒濆鍛戒护锛屽姩鎬佽鍙栨寚瀹氭枃浠朵腑鍐呭 + volumeMounts: # 灏唋ogs-volume 鎸傚湪鍒癰usybox瀹瑰櫒涓紝瀵瑰簲鐨勭洰褰曚负 /logs + - name: logs-volume + mountPath: /logs + volumes: # 澹版槑volume锛 name涓簂ogs-volume锛岀被鍨嬩负emptyDir + - name: logs-volume + emptyDir: {} +``` + +```shell +# 鍒涘缓Pod +[root@k8s-master01 ~]# kubectl create -f volume-emptydir.yaml +pod/volume-emptydir created + +# 鏌ョ湅pod +[root@k8s-master01 ~]# kubectl get pods volume-emptydir -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE ...... +volume-emptydir 2/2 Running 0 97s 10.42.2.9 node1 ...... + +# 閫氳繃podIp璁块棶nginx +[root@k8s-master01 ~]# curl 10.42.2.9 +...... + +# 閫氳繃kubectl logs鍛戒护鏌ョ湅鎸囧畾瀹瑰櫒鐨勬爣鍑嗚緭鍑 +[root@k8s-master01 ~]# kubectl logs -f volume-emptydir -n dev -c busybox +10.42.1.0 - - [27/Jun/2021:15:08:54 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-" +``` + +### 8.1.2 HostPath + +涓婅妭璇炬彁鍒帮紝EmptyDir涓暟鎹笉浼氳鎸佷箙鍖栵紝瀹冧細闅忕潃Pod鐨勭粨鏉熻岄攢姣侊紝濡傛灉鎯崇畝鍗曠殑灏嗘暟鎹寔涔呭寲鍒颁富鏈轰腑锛屽彲浠ラ夋嫨HostPath銆 + +HostPath灏辨槸灏哊ode涓绘満涓竴涓疄闄呯洰褰曟寕鍦ㄥ埌Pod涓紝浠ヤ緵瀹瑰櫒浣跨敤锛岃繖鏍风殑璁捐灏卞彲浠ヤ繚璇丳od閿姣佷簡锛屼絾鏄暟鎹緷鎹彲浠ュ瓨鍦ㄤ簬Node涓绘満涓娿 + +![img](Kubenetes.assets/image-20200413214031331.png) + +鍒涘缓涓涓獀olume-hostpath.yaml锛 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: volume-hostpath + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + ports: + - containerPort: 80 + volumeMounts: + - name: logs-volume + mountPath: /var/log/nginx + - name: busybox + image: busybox:1.30 + command: ["/bin/sh","-c","tail -f /logs/access.log"] + volumeMounts: + - name: logs-volume + mountPath: /logs + volumes: + - name: logs-volume + hostPath: + path: /root/logs + type: DirectoryOrCreate # 鐩綍瀛樺湪灏变娇鐢紝涓嶅瓨鍦ㄥ氨鍏堝垱寤哄悗浣跨敤 +``` + +``` +鍏充簬type鐨勫肩殑涓鐐硅鏄庯細 + DirectoryOrCreate 鐩綍瀛樺湪灏变娇鐢紝涓嶅瓨鍦ㄥ氨鍏堝垱寤哄悗浣跨敤 + Directory 鐩綍蹇呴』瀛樺湪 + FileOrCreate 鏂囦欢瀛樺湪灏变娇鐢紝涓嶅瓨鍦ㄥ氨鍏堝垱寤哄悗浣跨敤 + File 鏂囦欢蹇呴』瀛樺湪 + Socket unix濂楁帴瀛楀繀椤诲瓨鍦 + CharDevice 瀛楃璁惧蹇呴』瀛樺湪 + BlockDevice 鍧楄澶囧繀椤诲瓨鍦 +``` + +```shell +# 鍒涘缓Pod +[root@k8s-master01 ~]# kubectl create -f volume-hostpath.yaml +pod/volume-hostpath created + +# 鏌ョ湅Pod +[root@k8s-master01 ~]# kubectl get pods volume-hostpath -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE ...... +pod-volume-hostpath 2/2 Running 0 16s 10.42.2.10 node1 ...... + +#璁块棶nginx +[root@k8s-master01 ~]# curl 10.42.2.10 + +# 鎺ヤ笅鏉ュ氨鍙互鍘籬ost鐨/root/logs鐩綍涓嬫煡鐪嬪瓨鍌ㄧ殑鏂囦欢浜 +### 娉ㄦ剰: 涓嬮潰鐨勬搷浣滈渶瑕佸埌Pod鎵鍦ㄧ殑鑺傜偣杩愯锛堟渚嬩腑鏄痭ode1锛 +[root@node1 ~]# ls /root/logs/ +access.log error.log + +# 鍚屾牱鐨勯亾鐞嗭紝濡傛灉鍦ㄦ鐩綍涓嬪垱寤轰竴涓枃浠讹紝鍒板鍣ㄤ腑涔熸槸鍙互鐪嬪埌鐨 +``` + +### 8.1.3 NFS + +HostPath鍙互瑙e喅鏁版嵁鎸佷箙鍖栫殑闂锛屼絾鏄竴鏃ode鑺傜偣鏁呴殰浜嗭紝Pod濡傛灉杞Щ鍒颁簡鍒殑鑺傜偣锛屽張浼氬嚭鐜伴棶棰樹簡锛屾鏃堕渶瑕佸噯澶囧崟鐙殑缃戠粶瀛樺偍绯荤粺锛屾瘮杈冨父鐢ㄧ殑鐢∟FS銆丆IFS銆 + +NFS鏄竴涓綉缁滄枃浠跺瓨鍌ㄧ郴缁燂紝鍙互鎼缓涓鍙癗FS鏈嶅姟鍣紝鐒跺悗灏哖od涓殑瀛樺偍鐩存帴杩炴帴鍒癗FS绯荤粺涓婏紝杩欐牱鐨勮瘽锛屾棤璁篜od鍦ㄨ妭鐐逛笂鎬庝箞杞Щ锛屽彧瑕丯ode璺烴FS鐨勫鎺ユ病闂锛屾暟鎹氨鍙互鎴愬姛璁块棶銆 + +![img](Kubenetes.assets/image-20200413215133559.png) + +1锛夐鍏堣鍑嗗nfs鐨勬湇鍔″櫒锛岃繖閲屼负浜嗙畝鍗曪紝鐩存帴鏄痬aster鑺傜偣鍋歯fs鏈嶅姟鍣 + +```shell +# 鍦╪fs涓婂畨瑁卬fs鏈嶅姟 +[root@nfs ~]# yum install nfs-utils -y + +# 鍑嗗涓涓叡浜洰褰 +[root@nfs ~]# mkdir /root/data/nfs -pv + +# 灏嗗叡浜洰褰曚互璇诲啓鏉冮檺鏆撮湶缁192.168.5.0/24缃戞涓殑鎵鏈変富鏈 +[root@nfs ~]# vim /etc/exports +[root@nfs ~]# more /etc/exports +/root/data/nfs 192.168.5.0/24(rw,no_root_squash) + +# 鍚姩nfs鏈嶅姟 +[root@nfs ~]# systemctl restart nfs +``` + +2锛夋帴涓嬫潵锛岃鍦ㄧ殑姣忎釜node鑺傜偣涓婇兘瀹夎涓媙fs锛岃繖鏍风殑鐩殑鏄负浜唍ode鑺傜偣鍙互椹卞姩nfs璁惧 + +```shell +# 鍦╪ode涓婂畨瑁卬fs鏈嶅姟锛屾敞鎰忎笉闇瑕佸惎鍔 +[root@k8s-master01 ~]# yum install nfs-utils -y +``` + +3锛夋帴涓嬫潵锛屽氨鍙互缂栧啓pod鐨勯厤缃枃浠朵簡锛屽垱寤簐olume-nfs.yaml + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: volume-nfs + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + ports: + - containerPort: 80 + volumeMounts: + - name: logs-volume + mountPath: /var/log/nginx + - name: busybox + image: busybox:1.30 + command: ["/bin/sh","-c","tail -f /logs/access.log"] + volumeMounts: + - name: logs-volume + mountPath: /logs + volumes: + - name: logs-volume + nfs: + server: 192.168.5.6 #nfs鏈嶅姟鍣ㄥ湴鍧 + path: /root/data/nfs #鍏变韩鏂囦欢璺緞 +``` + +4锛夋渶鍚庯紝杩愯涓媝od锛岃瀵熺粨鏋 + +```shell +# 鍒涘缓pod +[root@k8s-master01 ~]# kubectl create -f volume-nfs.yaml +pod/volume-nfs created + +# 鏌ョ湅pod +[root@k8s-master01 ~]# kubectl get pods volume-nfs -n dev +NAME READY STATUS RESTARTS AGE +volume-nfs 2/2 Running 0 2m9s + +# 鏌ョ湅nfs鏈嶅姟鍣ㄤ笂鐨勫叡浜洰褰曪紝鍙戠幇宸茬粡鏈夋枃浠朵簡 +[root@k8s-master01 ~]# ls /root/data/ +access.log error.log +``` + +## 8.2 楂樼骇瀛樺偍 + +鍓嶉潰宸茬粡瀛︿範浜嗕娇鐢∟FS鎻愪緵瀛樺偍锛屾鏃跺氨瑕佹眰鐢ㄦ埛浼氭惌寤篘FS绯荤粺锛屽苟涓斾細鍦▂aml閰嶇疆nfs銆傜敱浜巏ubernetes鏀寔鐨勫瓨鍌ㄧ郴缁熸湁寰堝锛岃姹傚鎴峰叏閮芥帉鎻★紝鏄剧劧涓嶇幇瀹炪備负浜嗚兘澶熷睆钄藉簳灞傚瓨鍌ㄥ疄鐜扮殑缁嗚妭锛屾柟渚跨敤鎴蜂娇鐢紝 kubernetes寮曞叆PV鍜孭VC涓ょ璧勬簮瀵硅薄銆 + +PV锛圥ersistent Volume锛夋槸鎸佷箙鍖栧嵎鐨勬剰鎬濓紝鏄搴曞眰鐨勫叡浜瓨鍌ㄧ殑涓绉嶆娊璞°備竴鑸儏鍐典笅PV鐢眐ubernetes绠$悊鍛樿繘琛屽垱寤哄拰閰嶇疆锛屽畠涓庡簳灞傚叿浣撶殑鍏变韩瀛樺偍鎶鏈湁鍏筹紝骞堕氳繃鎻掍欢瀹屾垚涓庡叡浜瓨鍌ㄧ殑瀵规帴銆 + +PVC锛圥ersistent Volume Claim锛夋槸鎸佷箙鍗峰0鏄庣殑鎰忔濓紝鏄敤鎴峰浜庡瓨鍌ㄩ渶姹傜殑涓绉嶅0鏄庛傛崲鍙ヨ瘽璇达紝PVC鍏跺疄灏辨槸鐢ㄦ埛鍚慿ubernetes绯荤粺鍙戝嚭鐨勪竴绉嶈祫婧愰渶姹傜敵璇枫 + +![img](Kubenetes.assets/image-20200514194111567.png) + +浣跨敤浜哖V鍜孭VC涔嬪悗锛屽伐浣滃彲浠ュ緱鍒拌繘涓姝ョ殑缁嗗垎锛 + +- 瀛樺偍锛氬瓨鍌ㄥ伐绋嬪笀缁存姢 +- PV锛 kubernetes绠$悊鍛樼淮鎶 +- PVC锛歬ubernetes鐢ㄦ埛缁存姢 + +### 8.2.1 PV + +PV鏄瓨鍌ㄨ祫婧愮殑鎶借薄锛屼笅闈㈡槸璧勬簮娓呭崟鏂囦欢: + +```yaml +apiVersion: v1 +kind: PersistentVolume +metadata: + name: pv2 +spec: + nfs: # 瀛樺偍绫诲瀷锛屼笌搴曞眰鐪熸瀛樺偍瀵瑰簲 + capacity: # 瀛樺偍鑳藉姏锛岀洰鍓嶅彧鏀寔瀛樺偍绌洪棿鐨勮缃 + storage: 2Gi + accessModes: # 璁块棶妯″紡 + storageClassName: # 瀛樺偍绫诲埆 + persistentVolumeReclaimPolicy: # 鍥炴敹绛栫暐 +``` + +PV 鐨勫叧閿厤缃弬鏁拌鏄庯細 + +- **瀛樺偍绫诲瀷** + + 搴曞眰瀹為檯瀛樺偍鐨勭被鍨嬶紝kubernetes鏀寔澶氱瀛樺偍绫诲瀷锛屾瘡绉嶅瓨鍌ㄧ被鍨嬬殑閰嶇疆閮芥湁鎵宸紓 + +- **瀛樺偍鑳藉姏锛坈apacity锛** + +鐩墠鍙敮鎸佸瓨鍌ㄧ┖闂寸殑璁剧疆( storage=1Gi )锛屼笉杩囨湭鏉ュ彲鑳戒細鍔犲叆IOPS銆佸悶鍚愰噺绛夋寚鏍囩殑閰嶇疆 + +- **璁块棶妯″紡锛坅ccessModes锛** + + 鐢ㄤ簬鎻忚堪鐢ㄦ埛搴旂敤瀵瑰瓨鍌ㄨ祫婧愮殑璁块棶鏉冮檺锛岃闂潈闄愬寘鎷笅闈㈠嚑绉嶆柟寮忥細 + + - ReadWriteOnce锛圧WO锛夛細璇诲啓鏉冮檺锛屼絾鏄彧鑳借鍗曚釜鑺傜偣鎸傝浇 + - ReadOnlyMany锛圧OX锛夛細 鍙鏉冮檺锛屽彲浠ヨ澶氫釜鑺傜偣鎸傝浇 + - ReadWriteMany锛圧WX锛夛細璇诲啓鏉冮檺锛屽彲浠ヨ澶氫釜鑺傜偣鎸傝浇 + + `闇瑕佹敞鎰忕殑鏄紝搴曞眰涓嶅悓鐨勫瓨鍌ㄧ被鍨嬪彲鑳芥敮鎸佺殑璁块棶妯″紡涓嶅悓` + +- **鍥炴敹绛栫暐锛坧ersistentVolumeReclaimPolicy锛** + + 褰揚V涓嶅啀琚娇鐢ㄤ簡涔嬪悗锛屽鍏剁殑澶勭悊鏂瑰紡銆傜洰鍓嶆敮鎸佷笁绉嶇瓥鐣ワ細 + + - Retain 锛堜繚鐣欙級 淇濈暀鏁版嵁锛岄渶瑕佺鐞嗗憳鎵嬪伐娓呯悊鏁版嵁 + - Recycle锛堝洖鏀讹級 娓呴櫎 PV 涓殑鏁版嵁锛屾晥鏋滅浉褰撲簬鎵ц rm -rf /thevolume/\* + - Delete 锛堝垹闄わ級 涓 PV 鐩歌繛鐨勫悗绔瓨鍌ㄥ畬鎴 volume 鐨勫垹闄ゆ搷浣滐紝褰撶劧杩欏父瑙佷簬浜戞湇鍔″晢鐨勫瓨鍌ㄦ湇鍔 + + `闇瑕佹敞鎰忕殑鏄紝搴曞眰涓嶅悓鐨勫瓨鍌ㄧ被鍨嬪彲鑳芥敮鎸佺殑鍥炴敹绛栫暐涓嶅悓` + +- **瀛樺偍绫诲埆** + + PV鍙互閫氳繃storageClassName鍙傛暟鎸囧畾涓涓瓨鍌ㄧ被鍒 + + - 鍏锋湁鐗瑰畾绫诲埆鐨凱V鍙兘涓庤姹備簡璇ョ被鍒殑PVC杩涜缁戝畾 + - 鏈瀹氱被鍒殑PV鍒欏彧鑳戒笌涓嶈姹備换浣曠被鍒殑PVC杩涜缁戝畾 + +- **鐘舵侊紙status锛** + + 涓涓 PV 鐨勭敓鍛藉懆鏈熶腑锛屽彲鑳戒細澶勪簬4涓笉鍚岀殑闃舵锛 + + - Available锛堝彲鐢級锛 琛ㄧず鍙敤鐘舵侊紝杩樻湭琚换浣 PVC 缁戝畾 + - Bound锛堝凡缁戝畾锛夛細 琛ㄧず PV 宸茬粡琚 PVC 缁戝畾 + - Released锛堝凡閲婃斁锛夛細 琛ㄧず PVC 琚垹闄わ紝浣嗘槸璧勬簮杩樻湭琚泦缇ら噸鏂板0鏄 + - Failed锛堝け璐ワ級锛 琛ㄧず璇 PV 鐨勮嚜鍔ㄥ洖鏀跺け璐 + +**瀹為獙** + +浣跨敤NFS浣滀负瀛樺偍锛屾潵婕旂ずPV鐨勪娇鐢紝鍒涘缓3涓狿V锛屽搴擭FS涓殑3涓毚闇茬殑璺緞銆 + +1) 鍑嗗NFS鐜 + +```shell +# 鍒涘缓鐩綍 +[root@nfs ~]# mkdir /root/data/{pv1,pv2,pv3} -pv + +# 鏆撮湶鏈嶅姟 +[root@nfs ~]# more /etc/exports +/root/data/pv1 192.168.5.0/24(rw,no_root_squash) +/root/data/pv2 192.168.5.0/24(rw,no_root_squash) +/root/data/pv3 192.168.5.0/24(rw,no_root_squash) + +# 閲嶅惎鏈嶅姟 +[root@nfs ~]# systemctl restart nfs +``` + +2) 鍒涘缓pv.yaml + +```yaml +apiVersion: v1 +kind: PersistentVolume +metadata: + name: pv1 +spec: + capacity: + storage: 1Gi + accessModes: + - ReadWriteMany + persistentVolumeReclaimPolicy: Retain + nfs: + path: /root/data/pv1 + server: 192.168.5.6 + +--- + +apiVersion: v1 +kind: PersistentVolume +metadata: + name: pv2 +spec: + capacity: + storage: 2Gi + accessModes: + - ReadWriteMany + persistentVolumeReclaimPolicy: Retain + nfs: + path: /root/data/pv2 + server: 192.168.5.6 + +--- + +apiVersion: v1 +kind: PersistentVolume +metadata: + name: pv3 +spec: + capacity: + storage: 3Gi + accessModes: + - ReadWriteMany + persistentVolumeReclaimPolicy: Retain + nfs: + path: /root/data/pv3 + server: 192.168.5.6 +``` + +```shell +# 鍒涘缓 pv +[root@k8s-master01 ~]# kubectl create -f pv.yaml +persistentvolume/pv1 created +persistentvolume/pv2 created +persistentvolume/pv3 created + +# 鏌ョ湅pv +[root@k8s-master01 ~]# kubectl get pv -o wide +NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS AGE VOLUMEMODE +pv1 1Gi RWX Retain Available 10s Filesystem +pv2 2Gi RWX Retain Available 10s Filesystem +pv3 3Gi RWX Retain Available 9s Filesystem +``` + +### 8.2.2 PVC + +PVC鏄祫婧愮殑鐢宠锛岀敤鏉ュ0鏄庡瀛樺偍绌洪棿銆佽闂ā寮忋佸瓨鍌ㄧ被鍒渶姹備俊鎭備笅闈㈡槸璧勬簮娓呭崟鏂囦欢: + +```yaml +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc + namespace: dev +spec: + accessModes: # 璁块棶妯″紡 + selector: # 閲囩敤鏍囩瀵筆V閫夋嫨 + storageClassName: # 瀛樺偍绫诲埆 + resources: # 璇锋眰绌洪棿 + requests: + storage: 5Gi +``` + +PVC 鐨勫叧閿厤缃弬鏁拌鏄庯細 + +- **璁块棶妯″紡锛坅ccessModes锛** + +鐢ㄤ簬鎻忚堪鐢ㄦ埛搴旂敤瀵瑰瓨鍌ㄨ祫婧愮殑璁块棶鏉冮檺 + +- **閫夋嫨鏉′欢锛坰elector锛** + + 閫氳繃Label Selector鐨勮缃紝鍙娇PVC瀵逛簬绯荤粺涓繁瀛樺湪鐨凱V杩涜绛涢 + +- **瀛樺偍绫诲埆锛坰torageClassName锛** + + PVC鍦ㄥ畾涔夋椂鍙互璁惧畾闇瑕佺殑鍚庣瀛樺偍鐨勭被鍒紝鍙湁璁剧疆浜嗚class鐨刾v鎵嶈兘琚郴缁熼夊嚭 + +- **璧勬簮璇锋眰锛圧esources 锛** + + 鎻忚堪瀵瑰瓨鍌ㄨ祫婧愮殑璇锋眰 + +**瀹為獙** + +1) 鍒涘缓pvc.yaml锛岀敵璇穚v + +```yaml +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc1 + namespace: dev +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 1Gi +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc2 + namespace: dev +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 1Gi +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc3 + namespace: dev +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 1Gi +``` + +```shell +# 鍒涘缓pvc +[root@k8s-master01 ~]# kubectl create -f pvc.yaml +persistentvolumeclaim/pvc1 created +persistentvolumeclaim/pvc2 created +persistentvolumeclaim/pvc3 created + +# 鏌ョ湅pvc +[root@k8s-master01 ~]# kubectl get pvc -n dev -o wide +NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE VOLUMEMODE +pvc1 Bound pv1 1Gi RWX 15s Filesystem +pvc2 Bound pv2 2Gi RWX 15s Filesystem +pvc3 Bound pv3 3Gi RWX 15s Filesystem + +# 鏌ョ湅pv +[root@k8s-master01 ~]# kubectl get pv -o wide +NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM AGE VOLUMEMODE +pv1 1Gi RWx Retain Bound dev/pvc1 3h37m Filesystem +pv2 2Gi RWX Retain Bound dev/pvc2 3h37m Filesystem +pv3 3Gi RWX Retain Bound dev/pvc3 3h37m Filesystem +``` + +2) 鍒涘缓pods.yaml, 浣跨敤pv + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod1 + namespace: dev +spec: + containers: + - name: busybox + image: busybox:1.30 + command: ["/bin/sh","-c","while true;do echo pod1 >> /root/out.txt; sleep 10; done;"] + volumeMounts: + - name: volume + mountPath: /root/ + volumes: + - name: volume + persistentVolumeClaim: + claimName: pvc1 + readOnly: false +--- +apiVersion: v1 +kind: Pod +metadata: + name: pod2 + namespace: dev +spec: + containers: + - name: busybox + image: busybox:1.30 + command: ["/bin/sh","-c","while true;do echo pod2 >> /root/out.txt; sleep 10; done;"] + volumeMounts: + - name: volume + mountPath: /root/ + volumes: + - name: volume + persistentVolumeClaim: + claimName: pvc2 + readOnly: false +``` + +```shell +# 鍒涘缓pod +[root@k8s-master01 ~]# kubectl create -f pods.yaml +pod/pod1 created +pod/pod2 created + +# 鏌ョ湅pod +[root@k8s-master01 ~]# kubectl get pods -n dev -o wide +NAME READY STATUS RESTARTS AGE IP NODE +pod1 1/1 Running 0 14s 10.244.1.69 node1 +pod2 1/1 Running 0 14s 10.244.1.70 node1 + +# 鏌ョ湅pvc +[root@k8s-master01 ~]# kubectl get pvc -n dev -o wide +NAME STATUS VOLUME CAPACITY ACCESS MODES AGE VOLUMEMODE +pvc1 Bound pv1 1Gi RWX 94m Filesystem +pvc2 Bound pv2 2Gi RWX 94m Filesystem +pvc3 Bound pv3 3Gi RWX 94m Filesystem + +# 鏌ョ湅pv +[root@k8s-master01 ~]# kubectl get pv -n dev -o wide +NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM AGE VOLUMEMODE +pv1 1Gi RWX Retain Bound dev/pvc1 5h11m Filesystem +pv2 2Gi RWX Retain Bound dev/pvc2 5h11m Filesystem +pv3 3Gi RWX Retain Bound dev/pvc3 5h11m Filesystem + +# 鏌ョ湅nfs涓殑鏂囦欢瀛樺偍 +[root@nfs ~]# more /root/data/pv1/out.txt +node1 +node1 +[root@nfs ~]# more /root/data/pv2/out.txt +node2 +node2 +``` + +### 8.2.3 鐢熷懡鍛ㄦ湡 + +PVC鍜孭V鏄竴涓瀵瑰簲鐨勶紝PV鍜孭VC涔嬮棿鐨勭浉浜掍綔鐢ㄩ伒寰互涓嬬敓鍛藉懆鏈燂細 + +- **璧勬簮渚涘簲**锛氱鐞嗗憳鎵嬪姩鍒涘缓搴曞眰瀛樺偍鍜孭V + +- **璧勬簮缁戝畾**锛氱敤鎴峰垱寤篜VC锛宬ubernetes璐熻矗鏍规嵁PVC鐨勫0鏄庡幓瀵绘壘PV锛屽苟缁戝畾 + + 鍦ㄧ敤鎴峰畾涔夊ソPVC涔嬪悗锛岀郴缁熷皢鏍规嵁PVC瀵瑰瓨鍌ㄨ祫婧愮殑璇锋眰鍦ㄥ凡瀛樺湪鐨凱V涓夋嫨涓涓弧瓒虫潯浠剁殑 + + - 涓鏃︽壘鍒帮紝灏卞皢璇V涓庣敤鎴峰畾涔夌殑PVC杩涜缁戝畾锛岀敤鎴风殑搴旂敤灏卞彲浠ヤ娇鐢ㄨ繖涓狿VC浜 + - 濡傛灉鎵句笉鍒帮紝PVC鍒欎細鏃犻檺鏈熷浜嶱ending鐘舵侊紝鐩村埌绛夊埌绯荤粺绠$悊鍛樺垱寤轰簡涓涓鍚堝叾瑕佹眰鐨凱V + + PV涓鏃︾粦瀹氬埌鏌愪釜PVC涓婏紝灏变細琚繖涓狿VC鐙崰锛屼笉鑳藉啀涓庡叾浠朠VC杩涜缁戝畾浜 + +- **璧勬簮浣跨敤**锛氱敤鎴峰彲鍦╬od涓儚volume涓鏍蜂娇鐢╬vc + + Pod浣跨敤Volume鐨勫畾涔夛紝灏哖VC鎸傝浇鍒板鍣ㄥ唴鐨勬煇涓矾寰勮繘琛屼娇鐢ㄣ + +- **璧勬簮閲婃斁**锛氱敤鎴峰垹闄vc鏉ラ噴鏀緋v + + 褰撳瓨鍌ㄨ祫婧愪娇鐢ㄥ畬姣曞悗锛岀敤鎴峰彲浠ュ垹闄VC锛屼笌璇VC缁戝畾鐨凱V灏嗕細琚爣璁颁负鈥滃凡閲婃斁鈥濓紝浣嗚繕涓嶈兘绔嬪埢涓庡叾浠朠VC杩涜缁戝畾銆傞氳繃涔嬪墠PVC鍐欏叆鐨勬暟鎹彲鑳借繕琚暀鍦ㄥ瓨鍌ㄨ澶囦笂锛屽彧鏈夊湪娓呴櫎涔嬪悗璇V鎵嶈兘鍐嶆浣跨敤銆 + +- **璧勬簮鍥炴敹**锛歬ubernetes鏍规嵁pv璁剧疆鐨勫洖鏀剁瓥鐣ヨ繘琛岃祫婧愮殑鍥炴敹 + + 瀵逛簬PV锛岀鐞嗗憳鍙互璁惧畾鍥炴敹绛栫暐锛岀敤浜庤缃笌涔嬬粦瀹氱殑PVC閲婃斁璧勬簮涔嬪悗濡備綍澶勭悊閬楃暀鏁版嵁鐨勯棶棰樸傚彧鏈塒V鐨勫瓨鍌ㄧ┖闂村畬鎴愬洖鏀讹紝鎵嶈兘渚涙柊鐨凱VC缁戝畾鍜屼娇鐢 + +![img](Kubenetes.assets/image-20200515002806726.png) + +## 8.3 閰嶇疆瀛樺偍 + +### 8.3.1 ConfigMap + +ConfigMap鏄竴绉嶆瘮杈冪壒娈婄殑瀛樺偍鍗凤紝瀹冪殑涓昏浣滅敤鏄敤鏉ュ瓨鍌ㄩ厤缃俊鎭殑銆 + +鍒涘缓configmap.yaml锛屽唴瀹瑰涓嬶細 + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: configmap + namespace: dev +data: + info: | + username:admin + password:123456 +``` + +鎺ヤ笅鏉ワ紝浣跨敤姝ら厤缃枃浠跺垱寤篶onfigmap + +```shell +# 鍒涘缓configmap +[root@k8s-master01 ~]# kubectl create -f configmap.yaml +configmap/configmap created + +# 鏌ョ湅configmap璇︽儏 +[root@k8s-master01 ~]# kubectl describe cm configmap -n dev +Name: configmap +Namespace: dev +Labels: +Annotations: + +Data +==== +info: +---- +username:admin +password:123456 + +Events: +``` + +鎺ヤ笅鏉ュ垱寤轰竴涓猵od-configmap.yaml锛屽皢涓婇潰鍒涘缓鐨刢onfigmap鎸傝浇杩涘幓 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-configmap + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + volumeMounts: # 灏哻onfigmap鎸傝浇鍒扮洰褰 + - name: config + mountPath: /configmap/config + volumes: # 寮曠敤configmap + - name: config + configMap: + name: configmap +``` + +```shell +# 鍒涘缓pod +[root@k8s-master01 ~]# kubectl create -f pod-configmap.yaml +pod/pod-configmap created + +# 鏌ョ湅pod +[root@k8s-master01 ~]# kubectl get pod pod-configmap -n dev +NAME READY STATUS RESTARTS AGE +pod-configmap 1/1 Running 0 6s + +#杩涘叆瀹瑰櫒 +[root@k8s-master01 ~]# kubectl exec -it pod-configmap -n dev /bin/sh +# cd /configmap/config/ +# ls +info +# more info +username:admin +password:123456 + +# 鍙互鐪嬪埌鏄犲皠宸茬粡鎴愬姛锛屾瘡涓猚onfigmap閮芥槧灏勬垚浜嗕竴涓洰褰 +# key--->鏂囦欢 value---->鏂囦欢涓殑鍐呭 +# 姝ゆ椂濡傛灉鏇存柊configmap鐨勫唴瀹, 瀹瑰櫒涓殑鍊间篃浼氬姩鎬佹洿鏂 +``` + +### 8.3.2 Secret + +鍦╧ubernetes涓紝杩樺瓨鍦ㄤ竴绉嶅拰ConfigMap闈炲父绫讳技鐨勫璞★紝绉颁负Secret瀵硅薄銆傚畠涓昏鐢ㄤ簬瀛樺偍鏁忔劅淇℃伅锛屼緥濡傚瘑鐮併佺閽ャ佽瘉涔︾瓑绛夈 + +1) 棣栧厛浣跨敤base64瀵规暟鎹繘琛岀紪鐮 + +```shell +[root@k8s-master01 ~]# echo -n 'admin' | base64 #鍑嗗username +YWRtaW4= +[root@k8s-master01 ~]# echo -n '123456' | base64 #鍑嗗password +MTIzNDU2 +``` + +2) 鎺ヤ笅鏉ョ紪鍐檚ecret.yaml锛屽苟鍒涘缓Secret + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: secret + namespace: dev +type: Opaque +data: + username: YWRtaW4= + password: MTIzNDU2 +``` + +```shell +# 鍒涘缓secret +[root@k8s-master01 ~]# kubectl create -f secret.yaml +secret/secret created + +# 鏌ョ湅secret璇︽儏 +[root@k8s-master01 ~]# kubectl describe secret secret -n dev +Name: secret +Namespace: dev +Labels: +Annotations: +Type: Opaque +Data +==== +password: 6 bytes +username: 5 bytes +``` + +3) 鍒涘缓pod-secret.yaml锛屽皢涓婇潰鍒涘缓鐨剆ecret鎸傝浇杩涘幓锛 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: pod-secret + namespace: dev +spec: + containers: + - name: nginx + image: nginx:1.17.1 + volumeMounts: # 灏唖ecret鎸傝浇鍒扮洰褰 + - name: config + mountPath: /secret/config + volumes: + - name: config + secret: + secretName: secret +``` + +```shell +# 鍒涘缓pod +[root@k8s-master01 ~]# kubectl create -f pod-secret.yaml +pod/pod-secret created + +# 鏌ョ湅pod +[root@k8s-master01 ~]# kubectl get pod pod-secret -n dev +NAME READY STATUS RESTARTS AGE +pod-secret 1/1 Running 0 2m28s + +# 杩涘叆瀹瑰櫒锛屾煡鐪媠ecret淇℃伅锛屽彂鐜板凡缁忚嚜鍔ㄨВ鐮佷簡 +[root@k8s-master01 ~]# kubectl exec -it pod-secret /bin/sh -n dev +/ # ls /secret/config/ +password username +/ # more /secret/config/username +admin +/ # more /secret/config/password +123456 +``` + +鑷虫锛屽凡缁忓疄鐜颁簡鍒╃敤secret瀹炵幇浜嗕俊鎭殑缂栫爜銆 + +# 9. 瀹夊叏璁よ瘉 + +## 9.1 璁块棶鎺у埗姒傝堪 + +Kubernetes浣滀负涓涓垎甯冨紡闆嗙兢鐨勭鐞嗗伐鍏凤紝淇濊瘉闆嗙兢鐨勫畨鍏ㄦф槸鍏朵竴涓噸瑕佺殑浠诲姟銆傛墍璋撶殑瀹夊叏鎬у叾瀹炲氨鏄繚璇佸Kubernetes鐨勫悇绉**瀹㈡埛绔**杩涜**璁よ瘉鍜岄壌鏉**鎿嶄綔銆 + +**瀹㈡埛绔** + +鍦↘ubernetes闆嗙兢涓紝瀹㈡埛绔氬父鏈変袱绫伙細 + +- **User Account**锛氫竴鑸槸鐙珛浜巏ubernetes涔嬪鐨勫叾浠栨湇鍔$鐞嗙殑鐢ㄦ埛璐﹀彿銆 +- **Service Account**锛歬ubernetes绠$悊鐨勮处鍙凤紝鐢ㄤ簬涓篜od涓殑鏈嶅姟杩涚▼鍦ㄨ闂甂ubernetes鏃舵彁渚涜韩浠芥爣璇嗐 + +![img](Kubenetes.assets/image-20200520102949189.png) + +**璁よ瘉銆佹巿鏉冧笌鍑嗗叆鎺у埗** + +ApiServer鏄闂強绠$悊璧勬簮瀵硅薄鐨勫敮涓鍏ュ彛銆備换浣曚竴涓姹傝闂瓵piServer锛岄兘瑕佺粡杩囦笅闈笁涓祦绋嬶細 + +- Authentication锛堣璇侊級锛氳韩浠介壌鍒紝鍙湁姝g‘鐨勮处鍙锋墠鑳藉閫氳繃璁よ瘉 +- Authorization锛堟巿鏉冿級锛 鍒ゆ柇鐢ㄦ埛鏄惁鏈夋潈闄愬璁块棶鐨勮祫婧愭墽琛岀壒瀹氱殑鍔ㄤ綔 +- Admission Control锛堝噯鍏ユ帶鍒讹級锛氱敤浜庤ˉ鍏呮巿鏉冩満鍒朵互瀹炵幇鏇村姞绮剧粏鐨勮闂帶鍒跺姛鑳姐 + +![img](Kubenetes.assets/image-20200520103942580.png) + +## 9.2 璁よ瘉绠$悊 + +Kubernetes闆嗙兢瀹夊叏鐨勬渶鍏抽敭鐐瑰湪浜庡浣曡瘑鍒苟璁よ瘉瀹㈡埛绔韩浠斤紝瀹冩彁渚涗簡3绉嶅鎴风韬唤璁よ瘉鏂瑰紡锛 + +- HTTP Base璁よ瘉锛氶氳繃鐢ㄦ埛鍚+瀵嗙爜鐨勬柟寮忚璇 + + ``` + 杩欑璁よ瘉鏂瑰紡鏄妸鈥滅敤鎴峰悕:瀵嗙爜鈥濈敤BASE64绠楁硶杩涜缂栫爜鍚庣殑瀛楃涓叉斁鍦℉TTP璇锋眰涓殑Header Authorization鍩熼噷鍙戦佺粰鏈嶅姟绔傛湇鍔$鏀跺埌鍚庤繘琛岃В鐮侊紝鑾峰彇鐢ㄦ埛鍚嶅強瀵嗙爜锛岀劧鍚庤繘琛岀敤鎴疯韩浠借璇佺殑杩囩▼銆 + ``` + +- HTTP Token璁よ瘉锛氶氳繃涓涓猅oken鏉ヨ瘑鍒悎娉曠敤鎴 + + ``` + 杩欑璁よ瘉鏂瑰紡鏄敤涓涓緢闀跨殑闅句互琚ā浠跨殑瀛楃涓--Token鏉ヨ〃鏄庡鎴疯韩浠界殑涓绉嶆柟寮忋傛瘡涓猅oken瀵瑰簲涓涓敤鎴峰悕锛屽綋瀹㈡埛绔彂璧稟PI璋冪敤璇锋眰鏃讹紝闇瑕佸湪HTTP Header閲屾斁鍏oken锛孉PI Server鎺ュ埌Token鍚庝細璺熸湇鍔″櫒涓繚瀛樼殑token杩涜姣斿锛岀劧鍚庤繘琛岀敤鎴疯韩浠借璇佺殑杩囩▼銆 + ``` + +- HTTPS璇佷功璁よ瘉锛氬熀浜嶤A鏍硅瘉涔︾鍚嶇殑鍙屽悜鏁板瓧璇佷功璁よ瘉鏂瑰紡 + + ``` + 杩欑璁よ瘉鏂瑰紡鏄畨鍏ㄦф渶楂樼殑涓绉嶆柟寮忥紝浣嗘槸鍚屾椂涔熸槸鎿嶄綔璧锋潵鏈楹荤儲鐨勪竴绉嶆柟寮忋 + ``` + +![img](Kubenetes.assets/image-20200518211037434.png) + +**HTTPS璁よ瘉澶т綋鍒嗕负3涓繃绋嬶細** + +1. 璇佷功鐢宠鍜屼笅鍙 + + ``` + HTTPS閫氫俊鍙屾柟鐨勬湇鍔″櫒鍚慍A鏈烘瀯鐢宠璇佷功锛孋A鏈烘瀯涓嬪彂鏍硅瘉涔︺佹湇鍔$璇佷功鍙婄閽ョ粰鐢宠鑰 + ``` + +2. 瀹㈡埛绔拰鏈嶅姟绔殑鍙屽悜璁よ瘉 + + ``` + 1> 瀹㈡埛绔悜鏈嶅姟鍣ㄧ鍙戣捣璇锋眰锛屾湇鍔$涓嬪彂鑷繁鐨勮瘉涔︾粰瀹㈡埛绔紝 + 瀹㈡埛绔帴鏀跺埌璇佷功鍚庯紝閫氳繃绉侀挜瑙e瘑璇佷功锛屽湪璇佷功涓幏寰楁湇鍔$鐨勫叕閽ワ紝 + 瀹㈡埛绔埄鐢ㄦ湇鍔″櫒绔殑鍏挜璁よ瘉璇佷功涓殑淇℃伅锛屽鏋滀竴鑷达紝鍒欒鍙繖涓湇鍔″櫒 + 2> 瀹㈡埛绔彂閫佽嚜宸辩殑璇佷功缁欐湇鍔″櫒绔紝鏈嶅姟绔帴鏀跺埌璇佷功鍚庯紝閫氳繃绉侀挜瑙e瘑璇佷功锛 + 鍦ㄨ瘉涔︿腑鑾峰緱瀹㈡埛绔殑鍏挜锛屽苟鐢ㄨ鍏挜璁よ瘉璇佷功淇℃伅锛岀‘璁ゅ鎴风鏄惁鍚堟硶 + ``` + +3. 鏈嶅姟鍣ㄧ鍜屽鎴风杩涜閫氫俊 + + ``` + 鏈嶅姟鍣ㄧ鍜屽鎴风鍗忓晢濂藉姞瀵嗘柟妗堝悗锛屽鎴风浼氫骇鐢熶竴涓殢鏈虹殑绉橀挜骞跺姞瀵嗭紝鐒跺悗鍙戦佸埌鏈嶅姟鍣ㄧ銆 + 鏈嶅姟鍣ㄧ鎺ユ敹杩欎釜绉橀挜鍚庯紝鍙屾柟鎺ヤ笅鏉ラ氫俊鐨勬墍鏈夊唴瀹归兘閫氳繃璇ラ殢鏈虹閽ュ姞瀵 + ``` + +> 娉ㄦ剰: Kubernetes鍏佽鍚屾椂閰嶇疆澶氱璁よ瘉鏂瑰紡锛屽彧瑕佸叾涓换鎰忎竴涓柟寮忚璇侀氳繃鍗冲彲 + +## 9.3 鎺堟潈绠$悊 + +鎺堟潈鍙戠敓鍦ㄨ璇佹垚鍔熶箣鍚庯紝閫氳繃璁よ瘉灏卞彲浠ョ煡閬撹姹傜敤鎴锋槸璋侊紝 鐒跺悗Kubernetes浼氭牴鎹簨鍏堝畾涔夌殑鎺堟潈绛栫暐鏉ュ喅瀹氱敤鎴锋槸鍚︽湁鏉冮檺璁块棶锛岃繖涓繃绋嬪氨绉颁负鎺堟潈銆 + +姣忎釜鍙戦佸埌ApiServer鐨勮姹傞兘甯︿笂浜嗙敤鎴峰拰璧勬簮鐨勪俊鎭細姣斿鍙戦佽姹傜殑鐢ㄦ埛銆佽姹傜殑璺緞銆佽姹傜殑鍔ㄤ綔绛夛紝鎺堟潈灏辨槸鏍规嵁杩欎簺淇℃伅鍜屾巿鏉冪瓥鐣ヨ繘琛屾瘮杈冿紝濡傛灉绗﹀悎绛栫暐锛屽垯璁や负鎺堟潈閫氳繃锛屽惁鍒欎細杩斿洖閿欒銆 + +API Server鐩墠鏀寔浠ヤ笅鍑犵鎺堟潈绛栫暐锛 + +- AlwaysDeny锛氳〃绀烘嫆缁濇墍鏈夎姹傦紝涓鑸敤浜庢祴璇 +- AlwaysAllow锛氬厑璁告帴鏀舵墍鏈夎姹傦紝鐩稿綋浜庨泦缇や笉闇瑕佹巿鏉冩祦绋嬶紙Kubernetes榛樿鐨勭瓥鐣ワ級 +- ABAC锛氬熀浜庡睘鎬х殑璁块棶鎺у埗锛岃〃绀轰娇鐢ㄧ敤鎴烽厤缃殑鎺堟潈瑙勫垯瀵圭敤鎴疯姹傝繘琛屽尮閰嶅拰鎺у埗 +- Webhook锛氶氳繃璋冪敤澶栭儴REST鏈嶅姟瀵圭敤鎴疯繘琛屾巿鏉 +- Node锛氭槸涓绉嶄笓鐢ㄦā寮忥紝鐢ㄤ簬瀵筴ubelet鍙戝嚭鐨勮姹傝繘琛岃闂帶鍒 +- RBAC锛氬熀浜庤鑹茬殑璁块棶鎺у埗锛坘ubeadm瀹夎鏂瑰紡涓嬬殑榛樿閫夐」锛 + +RBAC(Role-Based Access Control) 鍩轰簬瑙掕壊鐨勮闂帶鍒讹紝涓昏鏄湪鎻忚堪涓浠朵簨鎯咃細**缁欏摢浜涘璞℃巿浜堜簡鍝簺鏉冮檺** + +鍏朵腑娑夊強鍒颁簡涓嬮潰鍑犱釜姒傚康锛 + +- 瀵硅薄锛歎ser銆丟roups銆丼erviceAccount +- 瑙掕壊锛氫唬琛ㄧ潃涓缁勫畾涔夊湪璧勬簮涓婄殑鍙搷浣滃姩浣(鏉冮檺)鐨勯泦鍚 +- 缁戝畾锛氬皢瀹氫箟濂界殑瑙掕壊璺熺敤鎴风粦瀹氬湪涓璧 + +![img](Kubenetes.assets/image-20200519181209566.png) + +RBAC寮曞叆浜4涓《绾ц祫婧愬璞★細 + +- Role銆丆lusterRole锛氳鑹诧紝鐢ㄤ簬鎸囧畾涓缁勬潈闄 +- RoleBinding銆丆lusterRoleBinding锛氳鑹茬粦瀹氾紝鐢ㄤ簬灏嗚鑹诧紙鏉冮檺锛夎祴浜堢粰瀵硅薄 + +**Role銆丆lusterRole** + +涓涓鑹插氨鏄竴缁勬潈闄愮殑闆嗗悎锛岃繖閲岀殑鏉冮檺閮芥槸璁稿彲褰㈠紡鐨勶紙鐧藉悕鍗曪級銆 + +```yaml +# Role鍙兘瀵瑰懡鍚嶇┖闂村唴鐨勮祫婧愯繘琛屾巿鏉冿紝闇瑕佹寚瀹歯ameapce +kind: Role +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + namespace: dev + name: authorization-role +rules: +- apiGroups: [""] # 鏀寔鐨凙PI缁勫垪琛,"" 绌哄瓧绗︿覆锛岃〃绀烘牳蹇傾PI缇 + resources: ["pods"] # 鏀寔鐨勮祫婧愬璞″垪琛 + verbs: ["get", "watch", "list"] # 鍏佽鐨勫璧勬簮瀵硅薄鐨勬搷浣滄柟娉曞垪琛 +``` + +```yaml +# ClusterRole鍙互瀵归泦缇よ寖鍥村唴璧勬簮銆佽法namespaces鐨勮寖鍥磋祫婧愩侀潪璧勬簮绫诲瀷杩涜鎺堟潈 +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: authorization-clusterrole +rules: +- apiGroups: [""] + resources: ["pods"] + verbs: ["get", "watch", "list"] +``` + +闇瑕佽缁嗚鏄庣殑鏄紝rules涓殑鍙傛暟锛 + +- apiGroups: 鏀寔鐨凙PI缁勫垪琛 + + ``` + "","apps", "autoscaling", "batch" + ``` + +- resources锛氭敮鎸佺殑璧勬簮瀵硅薄鍒楄〃 + + ``` + "services", "endpoints", "pods","secrets","configmaps","crontabs","deployments","jobs", + "nodes","rolebindings","clusterroles","daemonsets","replicasets","statefulsets", + "horizontalpodautoscalers","replicationcontrollers","cronjobs" + ``` + +- verbs锛氬璧勬簮瀵硅薄鐨勬搷浣滄柟娉曞垪琛 + + ``` + "get", "list", "watch", "create", "update", "patch", "delete", "exec" + ``` + +**RoleBinding銆丆lusterRoleBinding** + +瑙掕壊缁戝畾鐢ㄦ潵鎶婁竴涓鑹茬粦瀹氬埌涓涓洰鏍囧璞′笂锛岀粦瀹氱洰鏍囧彲浠ユ槸User銆丟roup鎴栬匰erviceAccount銆 + +```yaml +# RoleBinding鍙互灏嗗悓涓namespace涓殑subject缁戝畾鍒版煇涓猂ole涓嬶紝鍒欐subject鍗冲叿鏈夎Role瀹氫箟鐨勬潈闄 +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: authorization-role-binding + namespace: dev +subjects: +- kind: User + name: heima + apiGroup: rbac.authorization.k8s.io +roleRef: + kind: Role + name: authorization-role + apiGroup: rbac.authorization.k8s.io +``` + +```yaml +# ClusterRoleBinding鍦ㄦ暣涓泦缇ょ骇鍒拰鎵鏈塶amespaces灏嗙壒瀹氱殑subject涓嶤lusterRole缁戝畾锛屾巿浜堟潈闄 +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: authorization-clusterrole-binding +subjects: +- kind: User + name: heima + apiGroup: rbac.authorization.k8s.io +roleRef: + kind: ClusterRole + name: authorization-clusterrole + apiGroup: rbac.authorization.k8s.io +``` + +**RoleBinding寮曠敤ClusterRole杩涜鎺堟潈** + +RoleBinding鍙互寮曠敤ClusterRole锛屽灞炰簬鍚屼竴鍛藉悕绌洪棿鍐匔lusterRole瀹氫箟鐨勮祫婧愪富浣撹繘琛屾巿鏉冦 + +``` + 涓绉嶅緢甯哥敤鐨勫仛娉曞氨鏄紝闆嗙兢绠$悊鍛樹负闆嗙兢鑼冨洿棰勫畾涔夊ソ涓缁勮鑹诧紙ClusterRole锛夛紝鐒跺悗鍦ㄥ涓懡鍚嶇┖闂翠腑閲嶅浣跨敤杩欎簺ClusterRole銆傝繖鏍峰彲浠ュぇ骞呮彁楂樻巿鏉冪鐞嗗伐浣滄晥鐜囷紝涔熶娇寰楀悇涓懡鍚嶇┖闂翠笅鐨勫熀纭鎬ф巿鏉冭鍒欎笌浣跨敤浣撻獙淇濇寔涓鑷淬 +``` + +```yaml +# 铏界劧authorization-clusterrole鏄竴涓泦缇よ鑹诧紝浣嗘槸鍥犱负浣跨敤浜哛oleBinding +# 鎵浠eima鍙兘璇诲彇dev鍛藉悕绌洪棿涓殑璧勬簮 +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: authorization-role-binding-ns + namespace: dev +subjects: +- kind: User + name: heima + apiGroup: rbac.authorization.k8s.io +roleRef: + kind: ClusterRole + name: authorization-clusterrole + apiGroup: rbac.authorization.k8s.io +``` + +**瀹炴垬锛氬垱寤轰竴涓彧鑳界鐞哾ev绌洪棿涓婸ods璧勬簮鐨勮处鍙** + +1) 鍒涘缓璐﹀彿 + +```shell +# 1) 鍒涘缓璇佷功 +[root@k8s-master01 pki]# cd /etc/kubernetes/pki/ +[root@k8s-master01 pki]# (umask 077;openssl genrsa -out devman.key 2048) + +# 2) 鐢╝piserver鐨勮瘉涔﹀幓绛剧讲 +# 2-1) 绛惧悕鐢宠锛岀敵璇风殑鐢ㄦ埛鏄痙evman,缁勬槸devgroup +[root@k8s-master01 pki]# openssl req -new -key devman.key -out devman.csr -subj "/CN=devman/O=devgroup" +# 2-2) 绛剧讲璇佷功 +[root@k8s-master01 pki]# openssl x509 -req -in devman.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out devman.crt -days 3650 + +# 3) 璁剧疆闆嗙兢銆佺敤鎴枫佷笂涓嬫枃淇℃伅 +[root@k8s-master01 pki]# kubectl config set-cluster kubernetes --embed-certs=true --certificate-authority=/etc/kubernetes/pki/ca.crt --server=https://192.168.109.100:6443 + +[root@k8s-master01 pki]# kubectl config set-credentials devman --embed-certs=true --client-certificate=/etc/kubernetes/pki/devman.crt --client-key=/etc/kubernetes/pki/devman.key + +[root@k8s-master01 pki]# kubectl config set-context devman@kubernetes --cluster=kubernetes --user=devman + +# 鍒囨崲璐︽埛鍒癲evman +[root@k8s-master01 pki]# kubectl config use-context devman@kubernetes +Switched to context "devman@kubernetes". + +# 鏌ョ湅dev涓媝od锛屽彂鐜版病鏈夋潈闄 +[root@k8s-master01 pki]# kubectl get pods -n dev +Error from server (Forbidden): pods is forbidden: User "devman" cannot list resource "pods" in API group "" in the namespace "dev" + +# 鍒囨崲鍒癮dmin璐︽埛 +[root@k8s-master01 pki]# kubectl config use-context kubernetes-admin@kubernetes +Switched to context "kubernetes-admin@kubernetes". +``` + +2锛 鍒涘缓Role鍜孯oleBinding锛屼负devman鐢ㄦ埛鎺堟潈 + +```yaml +kind: Role +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + namespace: dev + name: dev-role +rules: +- apiGroups: [""] + resources: ["pods"] + verbs: ["get", "watch", "list"] + +--- + +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: authorization-role-binding + namespace: dev +subjects: +- kind: User + name: devman + apiGroup: rbac.authorization.k8s.io +roleRef: + kind: Role + name: dev-role + apiGroup: rbac.authorization.k8s.io +``` + +```shell +[root@k8s-master01 pki]# kubectl create -f dev-role.yaml +role.rbac.authorization.k8s.io/dev-role created +rolebinding.rbac.authorization.k8s.io/authorization-role-binding created +``` + +3) 鍒囨崲璐︽埛锛屽啀娆¢獙璇 + +```shell +# 鍒囨崲璐︽埛鍒癲evman +[root@k8s-master01 pki]# kubectl config use-context devman@kubernetes +Switched to context "devman@kubernetes". + +# 鍐嶆鏌ョ湅 +[root@k8s-master01 pki]# kubectl get pods -n dev +NAME READY STATUS RESTARTS AGE +nginx-deployment-66cb59b984-8wp2k 1/1 Running 0 4d1h +nginx-deployment-66cb59b984-dc46j 1/1 Running 0 4d1h +nginx-deployment-66cb59b984-thfck 1/1 Running 0 4d1h + +# 涓轰簡涓嶅奖鍝嶅悗闈㈢殑瀛︿範,鍒囧洖admin璐︽埛 +[root@k8s-master01 pki]# kubectl config use-context kubernetes-admin@kubernetes +Switched to context "kubernetes-admin@kubernetes". +``` + +## 9.4 鍑嗗叆鎺у埗 + +閫氳繃浜嗗墠闈㈢殑璁よ瘉鍜屾巿鏉冧箣鍚庯紝杩橀渶瑕佺粡杩囧噯鍏ユ帶鍒跺鐞嗛氳繃涔嬪悗锛宎piserver鎵嶄細澶勭悊杩欎釜璇锋眰銆 + +鍑嗗叆鎺у埗鏄竴涓彲閰嶇疆鐨勬帶鍒跺櫒鍒楄〃锛屽彲浠ラ氳繃鍦ˋpi-Server涓婇氳繃鍛戒护琛岃缃夋嫨鎵ц鍝簺鍑嗗叆鎺у埗鍣細 + +``` +--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel, + DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds +``` + +鍙湁褰撴墍鏈夌殑鍑嗗叆鎺у埗鍣ㄩ兘妫鏌ラ氳繃涔嬪悗锛宎piserver鎵嶆墽琛岃璇锋眰锛屽惁鍒欒繑鍥炴嫆缁濄 + +褰撳墠鍙厤缃殑Admission Control鍑嗗叆鎺у埗濡備笅锛 + +- AlwaysAdmit锛氬厑璁告墍鏈夎姹 +- AlwaysDeny锛氱姝㈡墍鏈夎姹傦紝涓鑸敤浜庢祴璇 +- AlwaysPullImages锛氬湪鍚姩瀹瑰櫒涔嬪墠鎬诲幓涓嬭浇闀滃儚 +- DenyExecOnPrivileged锛氬畠浼氭嫤鎴墍鏈夋兂鍦≒rivileged Container涓婃墽琛屽懡浠ょ殑璇锋眰 +- ImagePolicyWebhook锛氳繖涓彃浠跺皢鍏佽鍚庣鐨勪竴涓猈ebhook绋嬪簭鏉ュ畬鎴恆dmission controller鐨勫姛鑳姐 +- Service Account锛氬疄鐜癝erviceAccount瀹炵幇浜嗚嚜鍔ㄥ寲 +- SecurityContextDeny锛氳繖涓彃浠跺皢浣跨敤SecurityContext鐨凱od涓殑瀹氫箟鍏ㄩ儴澶辨晥 +- ResourceQuota锛氱敤浜庤祫婧愰厤棰濈鐞嗙洰鐨勶紝瑙傚療鎵鏈夎姹傦紝纭繚鍦╪amespace涓婄殑閰嶉涓嶄細瓒呮爣 +- LimitRanger锛氱敤浜庤祫婧愰檺鍒剁鐞嗭紝浣滅敤浜巒amespace涓婏紝纭繚瀵筆od杩涜璧勬簮闄愬埗 +- InitialResources锛氫负鏈缃祫婧愯姹備笌闄愬埗鐨凱od锛屾牴鎹叾闀滃儚鐨勫巻鍙茶祫婧愮殑浣跨敤鎯呭喌杩涜璁剧疆 +- NamespaceLifecycle锛氬鏋滃皾璇曞湪涓涓笉瀛樺湪鐨刵amespace涓垱寤鸿祫婧愬璞★紝鍒欒鍒涘缓璇锋眰灏嗚鎷掔粷銆傚綋鍒犻櫎涓涓猲amespace鏃讹紝绯荤粺灏嗕細鍒犻櫎璇amespace涓墍鏈夊璞° +- DefaultStorageClass锛氫负浜嗗疄鐜板叡浜瓨鍌ㄧ殑鍔ㄦ佷緵搴旓紝涓烘湭鎸囧畾StorageClass鎴朠V鐨凱VC灏濊瘯鍖归厤榛樿鐨凷torageClass锛屽敖鍙兘鍑忓皯鐢ㄦ埛鍦ㄧ敵璇稰VC鏃舵墍闇浜嗚В鐨勫悗绔瓨鍌ㄧ粏鑺 +- DefaultTolerationSeconds锛氳繖涓彃浠朵负閭d簺娌℃湁璁剧疆forgiveness tolerations骞跺叿鏈塶otready:NoExecute鍜寀nreachable:NoExecute涓ょtaints鐨凱od璁剧疆榛樿鐨勨滃蹇嶁濇椂闂达紝涓5min +- PodSecurityPolicy锛氳繖涓彃浠剁敤浜庡湪鍒涘缓鎴栦慨鏀筆od鏃跺喅瀹氭槸鍚︽牴鎹甈od鐨剆ecurity context鍜屽彲鐢ㄧ殑PodSecurityPolicy瀵筆od鐨勫畨鍏ㄧ瓥鐣ヨ繘琛屾帶鍒 + + + +# 10. DashBoard + +涔嬪墠鍦╧ubernetes涓畬鎴愮殑鎵鏈夋搷浣滈兘鏄氳繃鍛戒护琛屽伐鍏穔ubectl瀹屾垚鐨勩傚叾瀹烇紝涓轰簡鎻愪緵鏇翠赴瀵岀殑鐢ㄦ埛浣撻獙锛宬ubernetes杩樺紑鍙戜簡涓涓熀浜巜eb鐨勭敤鎴风晫闈紙Dashboard锛夈傜敤鎴峰彲浠ヤ娇鐢―ashboard閮ㄧ讲瀹瑰櫒鍖栫殑搴旂敤锛岃繕鍙互鐩戞帶搴旂敤鐨勭姸鎬侊紝鎵ц鏁呴殰鎺掓煡浠ュ強绠$悊kubernetes涓悇绉嶈祫婧愩 + +## 10.1 閮ㄧ讲Dashboard + +1) 涓嬭浇yaml锛屽苟杩愯Dashboard + +```shell +# 涓嬭浇yaml +[root@k8s-master01 ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml + +# 淇敼kubernetes-dashboard鐨凷ervice绫诲瀷 +kind: Service +apiVersion: v1 +metadata: + labels: + k8s-app: kubernetes-dashboard + name: kubernetes-dashboard + namespace: kubernetes-dashboard +spec: + type: NodePort # 鏂板 + ports: + - port: 443 + targetPort: 8443 + nodePort: 30009 # 鏂板 + selector: + k8s-app: kubernetes-dashboard + +# 閮ㄧ讲 +[root@k8s-master01 ~]# kubectl create -f recommended.yaml + +# 鏌ョ湅namespace涓嬬殑kubernetes-dashboard涓嬬殑璧勬簮 +[root@k8s-master01 ~]# kubectl get pod,svc -n kubernetes-dashboard +NAME READY STATUS RESTARTS AGE +pod/dashboard-metrics-scraper-c79c65bb7-zwfvw 1/1 Running 0 111s +pod/kubernetes-dashboard-56484d4c5-z95z5 1/1 Running 0 111s + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/dashboard-metrics-scraper ClusterIP 10.96.89.218 8000/TCP 111s +service/kubernetes-dashboard NodePort 10.104.178.171 443:30009/TCP 111s +``` + +2锛夊垱寤鸿闂处鎴凤紝鑾峰彇token + +```shell +# 鍒涘缓璐﹀彿 +[root@k8s-master01-1 ~]# kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard + +# 鎺堟潈 +[root@k8s-master01-1 ~]# kubectl create clusterrolebinding dashboard-admin-rb --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin + +# 鑾峰彇璐﹀彿token +[root@k8s-master01 ~]# kubectl get secrets -n kubernetes-dashboard | grep dashboard-admin +dashboard-admin-token-xbqhh kubernetes.io/service-account-token 3 2m35s + +[root@k8s-master01 ~]# kubectl describe secrets dashboard-admin-token-xbqhh -n kubernetes-dashboard +Name: dashboard-admin-token-xbqhh +Namespace: kubernetes-dashboard +Labels: +Annotations: kubernetes.io/service-account.name: dashboard-admin + kubernetes.io/service-account.uid: 95d84d80-be7a-4d10-a2e0-68f90222d039 + +Type: kubernetes.io/service-account-token + +Data +==== +namespace: 20 bytes +token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImJrYkF4bW5XcDhWcmNGUGJtek5NODFuSXl1aWptMmU2M3o4LTY5a2FKS2cifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4teGJxaGgiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiOTVkODRkODAtYmU3YS00ZDEwLWEyZTAtNjhmOTAyMjJkMDM5Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmRhc2hib2FyZC1hZG1pbiJ9.NAl7e8ZfWWdDoPxkqzJzTB46sK9E8iuJYnUI9vnBaY3Jts7T1g1msjsBnbxzQSYgAG--cV0WYxjndzJY_UWCwaGPrQrt_GunxmOK9AUnzURqm55GR2RXIZtjsWVP2EBatsDgHRmuUbQvTFOvdJB4x3nXcYLN2opAaMqg3rnU2rr-A8zCrIuX_eca12wIp_QiuP3SF-tzpdLpsyRfegTJZl6YnSGyaVkC9id-cxZRb307qdCfXPfCHR_2rt5FVfxARgg_C0e3eFHaaYQO7CitxsnIoIXpOFNAR8aUrmopJyODQIPqBWUehb7FhlU1DCduHnIIXVC_UICZ-MKYewBDLw +ca.crt: 1025 bytes +``` + +3锛夐氳繃娴忚鍣ㄨ闂瓺ashboard鐨刄I + +鍦ㄧ櫥褰曢〉闈笂杈撳叆涓婇潰鐨則oken + +![image-20200520144548997](Kubenetes.assets/image-20200520144548997.png) + +鍑虹幇涓嬮潰鐨勯〉闈唬琛ㄦ垚鍔 + +![image-20200520144959353](Kubenetes.assets/image-20200520144959353.png) + +## 10.2 浣跨敤DashBoard + +鏈珷鑺備互Deployment涓轰緥婕旂ずDashBoard鐨勪娇鐢 + +**鏌ョ湅** + +閫夋嫨鎸囧畾鐨勫懡鍚嶇┖闂碻dev`锛岀劧鍚庣偣鍑籤Deployments`锛屾煡鐪媎ev绌洪棿涓嬬殑鎵鏈塪eployment + +![img](Kubenetes.assets/image-20200520154628679.png) + +**鎵╃缉瀹** + +鍦╜Deployment`涓婄偣鍑籤瑙勬ā`锛岀劧鍚庢寚瀹歚鐩爣鍓湰鏁伴噺`锛岀偣鍑荤‘瀹 + +![img](Kubenetes.assets/image-20200520162605102.png) + +**缂栬緫** + +鍦╜Deployment`涓婄偣鍑籤缂栬緫`锛岀劧鍚庝慨鏀筦yaml鏂囦欢`锛岀偣鍑荤‘瀹 + +![image-20200520163253644](Kubenetes.assets/image-20200520163253644.png) + +**鏌ョ湅Pod** + +鐐瑰嚮`Pods`, 鏌ョ湅pods鍒楄〃 + +![img](Kubenetes.assets/image-20200520163552110.png) + +**鎿嶄綔Pod** + +閫変腑鏌愪釜Pod锛屽彲浠ュ鍏舵墽琛屾棩蹇楋紙logs锛夈佽繘鍏ユ墽琛岋紙exec锛夈佺紪杈戙佸垹闄ゆ搷浣 + +![img](Kubenetes.assets/image-20200520163832827.png) + +> Dashboard鎻愪緵浜唊ubectl鐨勭粷澶ч儴鍒嗗姛鑳斤紝杩欓噷涓嶅啀涓涓婕旂ず + + diff --git a/kubectl.md b/kubectl.md new file mode 100644 index 0000000..1efa415 --- /dev/null +++ b/kubectl.md @@ -0,0 +1,91 @@ + +# kubectl鍩烘湰浣跨敤 + +## kubectl 鍒涘缓瀵硅薄 +$ kubectl create -f ./my-manifest.yaml #鍒涘缓璧勬簮 + +$ kubectl create -f ./my1.yaml -f ./my2.yaml #浣跨敤澶氫釜鏂囦欢鍒涘缓璧勬簮 + +$ kubectl create -f ./dir #浣跨敤鐩綍涓嬬殑鎵鏈夋竻鍗曟枃浠讹紙yaml锛夋潵鍒涘缓璧勬簮 + +$ kubectl create -f https://git.io/vPieo #浣跨敤url鍒涘缓璧勬簮 + +$ kubectl run nginx --image=nginx #鍚姩涓涓猲ginx瀹炰緥 + +$ kubectl explain pods #鑾峰彇pod鍜宻vc鐨勬枃妗 + +## kubectl 鏄剧ず鍜屾煡鎵捐祫婧 +浠ヤ笅鍛戒护鏌ユ壘璧勬簮鏃跺彲鑳芥煡涓嶅埌鐨勫師鍥犳槸闇瑕佹寚瀹歯amespace锛岄氳繃 -n 鎸囧畾鍗冲彲锛屾垨鑰卆ll + +$ kubectl get pods --all-namespaces #鍒楀嚭鎵鏈塶amespace涓殑pod锛屼篃鍙互鏄痵ervices銆乨eployment绛 + +$ kubectl get pods -o wide #鍒楀嚭pod骞舵樉绀鸿缁嗕俊鎭 + +$ kubectl get deployment my-dep #鍒楀嚭鎸囧畾daployment + +$ kubectl get pods --include-uninitialized #鍒楀嚭璇amespace涓殑鎵鏈塸od锛屽寘鎷湭鍒濆鍖栫殑 + +## 浣跨敤璇︾粏杈撳嚭鏉ユ弿杩板懡浠 + +$ kubectl describe nodes #鏌ョ湅node鑺傜偣淇℃伅 + +$ kubectl describe pods #鏌ョ湅pod璇︾粏淇℃伅 + +$ kubectl get services --sort-by=.metadata.name --all-namespaces #l鍒楀嚭鎵鏈塻ervice骞舵寜鍚嶇О鎺掑簭 + +## 鏍规嵁閲嶅惎娆℃暟鎺掑簭鍒楀嚭pod + +$ kubectl get pods --sort-by='.status.containerStatuses[0].restartCount' --all-namespaces + +## 鑾峰彇鎵鏈夊叿鏈塧pp=cassandra鐨刾od涓殑version鏍囩 + +$ kubectl get pods --selector=app=cassandra rc -o jsonpath='{.items[*].metadata.labels.version}' + +## 鑾峰彇鎵鏈夎妭鐐圭殑ExternalIP + +$ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternlIP")].address}' + +## kubectl缂栬緫璧勬簮 + +$ kubectl -n codeus edit svc/c #缂栬緫codeus鍛藉悕绌洪棿涓嬪悕绉颁负c鐨剆ervice + +## kubectl Scale 璧勬簮 +### 鎵╁睍pod涓嬪鍣ㄦ暟閲 + +$ kubectl scale --replicas=3 rs/foo #鎵╁睍鍚嶇О涓篺oo鐨勮祫婧愬埌3涓紝鏄惁浣跨敤rs鍙栧喅浜巠aml涓殑缂栧啓 + +渚嬪yaml涓璳ind: Deployment 锛屽垯搴旈氳繃涓嬮潰鏂规硶鎵╁睍 + +$ kubectl scale --replicas=3 deployment/foo + +### 鐩存帴閫氳繃鍒涘缓璧勬簮鐨剏aml鏂囦欢鎵╁睍 + +$ kubectl scale --replicas=3 -f foo.yaml + +### 鏍规嵁鍒ゆ柇鏉′欢鎵╁睍 + +渚嬪鏉′欢鏄細濡傛灉mysql鐨勬暟閲忔槸2锛屽垯鎵╁睍鍒3 + +$ kubectl scale --current-replicas=2 --replicas=3 deployment/mysql + +### 鍚屾椂鎵╁睍澶氫釜璧勬簮 + +$ kubectl scale --replicas=5 rc/foo rc/bar rc/baz + +## kubectl 鍒犻櫎璧勬簮 +$ kubectl delete deployment #鍒犻櫎鎸囧畾deployment锛屾鏂规硶杩樺彲浠ュ垹闄ervice绛 + +$ kubectl delete -f xxx.yaml #閫氳繃鍒涘缓姝od鐨剏aml鏂囦欢鍒犻櫎pod + +## kubectl 涓庤繍琛屼腑鐨刾od浜や簰 +$ kubectl -n logs my-podname #鏌ョ湅pod鏃ュ織锛 -f 鎸佺画鏌ョ湅 + +$ kubectl port-forward my-podname 5000:6000 #杞彂pod涓殑6000绔彛鍒版湰鍦扮殑5000绔彛 + +$ kubectl exec my-podname -- ls / #鍦ㄥ凡瀛樺湪鐨勫鍣ㄤ腑鎵ц鍛戒护 + + +## [kubectl cheatsheet](https://kubernetes.io/zh/docs/reference/kubectl/cheatsheet/) + + + diff --git a/kubectlcmd.md b/kubectlcmd.md new file mode 100644 index 0000000..5b2cc9a --- /dev/null +++ b/kubectlcmd.md @@ -0,0 +1,453 @@ +# 鏈〉鍒椾妇浜嗗父鐢ㄧ殑 鈥渒ubectl鈥 鍛戒护鍜屾爣蹇 + +## Kubectl 鑷姩琛ュ叏 + +### BASH + + +```bash +source <(kubectl completion bash) # 鍦 bash 涓缃綋鍓 shell 鐨勮嚜鍔ㄨˉ鍏紝瑕佸厛瀹夎 bash-completion 鍖呫 +echo "source <(kubectl completion bash)" >> ~/.bashrc # 鍦ㄦ偍鐨 bash shell 涓案涔呯殑娣诲姞鑷姩琛ュ叏 +``` + +鎮ㄨ繕鍙互涓 `kubectl` 浣跨敤涓涓熻鍒悕锛岃鍒悕涔熷彲浠ヤ笌 completion 涓璧蜂娇鐢細 + +```bash +alias k=kubectl +complete -F __start_kubectl k +``` + +### ZSH + + +```bash +source <(kubectl completion zsh) # 鍦 zsh 涓缃綋鍓 shell 鐨勮嚜鍔ㄨˉ鍏 +echo "[[ $commands[kubectl] ]] && source <(kubectl completion zsh)" >> ~/.zshrc # 鍦ㄦ偍鐨 zsh shell 涓案涔呯殑娣诲姞鑷姩琛ュ叏 +``` + + +## Kubectl 涓婁笅鏂囧拰閰嶇疆 + +璁剧疆 `kubectl` 涓庡摢涓 Kubernetes 闆嗙兢杩涜閫氫俊骞朵慨鏀归厤缃俊鎭 +鏌ョ湅[浣跨敤 kubeconfig 璺ㄩ泦缇ゆ巿鏉冭闂甝(/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters/) +鏂囨。鑾峰彇閰嶇疆鏂囦欢璇︾粏淇℃伅銆 + + +```bash +kubectl config view # 鏄剧ず鍚堝苟鐨 kubeconfig 閰嶇疆銆 + +# 鍚屾椂浣跨敤澶氫釜 kubeconfig 鏂囦欢骞舵煡鐪嬪悎骞剁殑閰嶇疆 +KUBECONFIG=~/.kube/config:~/.kube/kubconfig2 kubectl config view + +# 鑾峰彇 e2e 鐢ㄦ埛鐨勫瘑鐮 +kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}' + +kubectl config view -o jsonpath='{.users[].name}' # 鏄剧ず绗竴涓敤鎴 +kubectl config view -o jsonpath='{.users[*].name}' # 鑾峰彇鐢ㄦ埛鍒楄〃 +kubectl config get-contexts # 鏄剧ず涓婁笅鏂囧垪琛 +kubectl config current-context # 灞曠ず褰撳墠鎵澶勭殑涓婁笅鏂 +kubectl config use-context my-cluster-name # 璁剧疆榛樿鐨勪笂涓嬫枃涓 my-cluster-name + +# 娣诲姞鏂扮殑鐢ㄦ埛閰嶇疆鍒 kubeconf 涓紝浣跨敤 basic auth 杩涜韬唤璁よ瘉 +kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword + +# 鍦ㄦ寚瀹氫笂涓嬫枃涓寔涔呮у湴淇濆瓨鍚嶅瓧绌洪棿锛屼緵鎵鏈夊悗缁 kubectl 鍛戒护浣跨敤 +kubectl config set-context --current --namespace=ggckad-s2 + +# 浣跨敤鐗瑰畾鐨勭敤鎴峰悕鍜屽悕瀛楃┖闂磋缃笂涓嬫枃 +kubectl config set-context gce --user=cluster-admin --namespace=foo \ + && kubectl config use-context gce + +kubectl config unset users.foo # 鍒犻櫎鐢ㄦ埛 foo +``` + + +## Kubectl apply +`apply` 閫氳繃瀹氫箟 Kubernetes 璧勬簮鐨勬枃浠舵潵绠$悊搴旂敤銆 +瀹冮氳繃杩愯 `kubectl apply` 鍦ㄩ泦缇や腑鍒涘缓鍜屾洿鏂拌祫婧愩 +杩欐槸鍦ㄧ敓浜т腑绠$悊 Kubernetes 搴旂敤鐨勬帹鑽愭柟娉曘 +鍙傝 [Kubectl 鏂囨。](https://kubectl.docs.kubernetes.io)銆 + + +## 鍒涘缓瀵硅薄 {#creating-objects} + +Kubernetes 閰嶇疆鍙互鐢 YAML 鎴 JSON 瀹氫箟銆傚彲浠ヤ娇鐢ㄧ殑鏂囦欢鎵╁睍鍚嶆湁 +`.yaml`銆乣.yml` 鍜 `.json`銆 + + +```bash +kubectl apply -f ./my-manifest.yaml # 鍒涘缓璧勬簮 +kubectl apply -f ./my1.yaml -f ./my2.yaml # 浣跨敤澶氫釜鏂囦欢鍒涘缓 +kubectl apply -f ./dir # 鍩轰簬鐩綍涓嬬殑鎵鏈夋竻鍗曟枃浠跺垱寤鸿祫婧 +kubectl apply -f https://git.io/vPieo # 浠 URL 涓垱寤鸿祫婧 +kubectl create deployment nginx --image=nginx # 鍚姩鍗曞疄渚 nginx + +# 鍒涘缓涓涓墦鍗 鈥淗ello World鈥 鐨 Job +kubectl create job hello --image=busybox -- echo "Hello World" + +# 鍒涘缓涓涓墦鍗 鈥淗ello World鈥 闂撮殧1鍒嗛挓鐨 CronJob +kubectl create cronjob hello --image=busybox --schedule="*/1 * * * *" -- echo "Hello World" + +kubectl explain pods # 鑾峰彇 pod 娓呭崟鐨勬枃妗h鏄 + +# 浠庢爣鍑嗚緭鍏ュ垱寤哄涓 YAML 瀵硅薄 +cat < pod.yaml + +kubectl attach my-pod -i # 鎸傛帴鍒颁竴涓繍琛岀殑瀹瑰櫒涓 +kubectl port-forward my-pod 5000:6000 # 鍦ㄦ湰鍦拌绠楁満涓婁睛鍚鍙 5000 骞惰浆鍙戝埌 my-pod 涓婄殑绔彛 6000 +kubectl exec my-pod -- ls / # 鍦ㄥ凡鏈夌殑 Pod 涓繍琛屽懡浠わ紙鍗曞鍣ㄥ満鏅級 +kubectl exec --stdin --tty my-pod -- /bin/sh # 浣跨敤浜や簰 shell 璁块棶姝e湪杩愯鐨 Pod (涓涓鍣ㄥ満鏅) +kubectl exec my-pod -c my-container -- ls / # 鍦ㄥ凡鏈夌殑 Pod 涓繍琛屽懡浠わ紙澶氬鍣ㄥ満鏅級 +kubectl top pod POD_NAME --containers # 鏄剧ず缁欏畾 Pod 鍜屽叾涓鍣ㄧ殑鐩戞帶鏁版嵁 +kubectl top pod POD_NAME --sort-by=cpu # 鏄剧ず缁欏畾 Pod 鐨勬寚鏍囧苟涓旀寜鐓 'cpu' 鎴栬 'memory' 鎺掑簭 +``` + + +## 涓 Deployments 鍜 Services 杩涜浜や簰 + + +```bash +kubectl logs deploy/my-deployment # 鑾峰彇涓涓 Deployment 鐨 Pod 鐨勬棩蹇楋紙鍗曞鍣ㄤ緥瀛愶級 +kubectl logs deploy/my-deployment -c my-container # 鑾峰彇涓涓 Deployment 鐨 Pod 鐨勬棩蹇楋紙澶氬鍣ㄤ緥瀛愶級 + +kubectl port-forward svc/my-service 5000 # 渚﹀惉鏈湴绔彛 5000 骞惰浆鍙戝埌 Service 鍚庣绔彛 5000 +kubectl port-forward svc/my-service 5000:my-service-port # 渚﹀惉鏈湴绔彛 5000 骞惰浆鍙戝埌鍚嶅瓧涓 鐨 Service 鐩爣绔彛 + +kubectl port-forward deploy/my-deployment 5000:6000 # 渚﹀惉鏈湴绔彛 5000 骞惰浆鍙戝埌 鍒涘缓鐨 Pod 閲岀殑绔彛 6000 +kubectl exec deploy/my-deployment -- ls # 鍦 Deployment 閲岀殑绗竴涓 Pod 鐨勭涓涓鍣ㄩ噷杩愯鍛戒护锛堝崟瀹瑰櫒鍜屽瀹瑰櫒渚嬪瓙锛 +``` + + +## 涓庤妭鐐瑰拰闆嗙兢杩涜浜や簰 + + +```bash +kubectl cordon my-node # 鏍囪 my-node 鑺傜偣涓轰笉鍙皟搴 +kubectl drain my-node # 瀵 my-node 鑺傜偣杩涜娓呯┖鎿嶄綔锛屼负鑺傜偣缁存姢鍋氬噯澶 +kubectl uncordon my-node # 鏍囪 my-node 鑺傜偣涓哄彲浠ヨ皟搴 +kubectl top node my-node # 鏄剧ず缁欏畾鑺傜偣鐨勫害閲忓 +kubectl cluster-info # 鏄剧ず涓绘帶鑺傜偣鍜屾湇鍔$殑鍦板潃 +kubectl cluster-info dump # 灏嗗綋鍓嶉泦缇ょ姸鎬佽浆鍌ㄥ埌鏍囧噯杈撳嚭 +kubectl cluster-info dump --output-directory=/path/to/cluster-state # 灏嗗綋鍓嶉泦缇ょ姸鎬佽緭鍑哄埌 /path/to/cluster-state + +# 濡傛灉宸插瓨鍦ㄥ叿鏈夋寚瀹氶敭鍜屾晥鏋滅殑姹$偣锛屽垯鏇挎崲鍏跺间负鎸囧畾鍊笺 +kubectl taint nodes foo dedicated=special-user:NoSchedule +``` + + +### 璧勬簮绫诲瀷 + + +鍒楀嚭鎵鏀寔鐨勫叏閮ㄨ祫婧愮被鍨嬪拰瀹冧滑鐨勭畝绉般乕API 缁刔(/zh/docs/concepts/overview/kubernetes-api/#api-groups-and-versioning), 鏄惁鏄痆鍚嶅瓧绌洪棿浣滅敤鍩焆(/zh/docs/concepts/overview/working-with-objects/namespaces) 鍜 [Kind](/zh/docs/concepts/overview/working-with-objects/kubernetes-objects)銆 + +```bash +kubectl api-resources +``` + + +鐢ㄤ簬鎺㈢储 API 璧勬簮鐨勫叾浠栨搷浣滐細 + + +```bash +kubectl api-resources --namespaced=true # 鎵鏈夊懡鍚嶇┖闂翠綔鐢ㄥ煙鐨勮祫婧 +kubectl api-resources --namespaced=false # 鎵鏈夐潪鍛藉悕绌洪棿浣滅敤鍩熺殑璧勬簮 +kubectl api-resources -o name # 鐢ㄧ畝鍗曟牸寮忓垪涓炬墍鏈夎祫婧愶紙浠呮樉绀鸿祫婧愬悕绉帮級 +kubectl api-resources -o wide # 鐢ㄦ墿灞曟牸寮忓垪涓炬墍鏈夎祫婧愶紙鍙堢О "wide" 鏍煎紡锛 +kubectl api-resources --verbs=list,get # 鏀寔 "list" 鍜 "get" 璇锋眰鍔ㄨ瘝鐨勬墍鏈夎祫婧 +kubectl api-resources --api-group=extensions # "extensions" API 缁勪腑鐨勬墍鏈夎祫婧 +``` + + +### 鏍煎紡鍖栬緭鍑 + +瑕佷互鐗瑰畾鏍煎紡灏嗚缁嗕俊鎭緭鍑哄埌缁堢绐楀彛锛屽皢 `-o`锛堟垨鑰 `--output`锛夊弬鏁版坊鍔犲埌鏀寔鐨 `kubectl` 鍛戒护涓 + + +杈撳嚭鏍煎紡 | 鎻忚堪 +--------------| ----------- +`-o=custom-columns=` | 浣跨敤閫楀彿鍒嗛殧鐨勮嚜瀹氫箟鍒楁潵鎵撳嵃琛ㄦ牸 +`-o=custom-columns-file=` | 浣跨敤 `` 鏂囦欢涓殑鑷畾涔夊垪妯℃澘鎵撳嵃琛ㄦ牸 +`-o=json` | 杈撳嚭 JSON 鏍煎紡鐨 API 瀵硅薄 +`-o=jsonpath=