|
|
楼主 |
发表于 2018-9-20 11:11:21
|
显示全部楼层
搭建私有库
% e# n8 j3 k$ `$ L' U4 E+ ^) d2 ]: T
* P& { Y- |/ _# P2 D& u2 X私有库用于系统内部存储成品镜像,能够快速进行下载及被k8s调度。5 T+ X @* c$ N
- ^8 B5 Z& Q h
1.下载并启动私有库8 D. t& Q6 T0 H* t
( [! r, d! `2 |% c$ A2 ?[centos-master]:docker run --name registry -v /etc/localtime:/etc/localtime -v /opt/registry:/var/lib/registry -p 5000:5000 -itd docker.io/registry
$ l% n+ S% v6 B# r1 V8 c. R8 ^- G& ~6 u# U7 U. @. W( ?) @ @
#--name 表示启动的容器后名称,此处为registry- f5 e8 h) p) Q& Z$ C. k* N2 v% ?, @
#-v 表示挂载路径 格式为宿主机路径:容器内路径
0 b! }0 f/ B2 w#-p 表示映射端口 格式为宿主机端口:容器内端口$ C7 x2 J/ \- x9 G) e& x
#-itd docker的内部参数,此处声明后台运行容器并分配一个伪终端并绑定到容器的标准输入上,后跟镜像名称此处为docker.io/registry4 L# i5 d; N! X" `- W$ B) `1 v
) e, X2 a& M7 X( K* T3 t# p
2.创建一个secret服务,用于k8s调度私有库容器时的“令牌”。简单来说,secret服务就是一个存储密码的服务
9 ]3 u: s# X/ P( A2 Y
( |, H7 k! ^* V; H0 g. T# I# G7 }[centos-master]:kubectl create secret docker-registry registrykey --docker-server=registry.evehicle.cn --docker-username=docker --docker-password=docker --docker-email=lienhua@zhongchuangsanyou.com
2 b. p; p+ a: P( K% B5 @0 l M. e: R" u$ v
[centos-master]:kubectl get secret
; ~: F h0 J5 e7 ONAME TYPE DATA AGE
5 Q3 {* l" v& R( ?' C" C+ O: aregistrykey kubernetes.io/dockercfg 1 6s
0 X0 o) Q4 c* g: Z+ }6 v, V; p& h. j' c" c( \) `, m9 k
此时登录时会提示认证错误
8 r7 \. @/ Z& s( R. c) A) Z( m0 ?( m7 I! v; Z
[centos-master]:docker login -u docker -p docker -e lienhua@zhongchuangsanyou.com registry.evehicle.cn* {4 M6 Y4 |) z! T7 x% K
Flag --email has been deprecated, will be removed in 1.13.* s, W0 P3 f% X1 y, R9 _6 d2 N0 z
Error response from daemon: login attempt to https://registry.evehicle.cn/v2/ failed with status: 401 Unauthorized) I* b# T0 E4 ^1 i) D8 |
* @1 q& `7 g! W这是因为Docker官方是推荐采用Secure Registry的工作模式的,即transport采用tls。这样我们就需要为Registry配置tls所需的key和crt文件了
+ @1 Z! y( |; J8 p% [
4 Z3 w: K, i J, r( }2 [/ I3.配置nginx反向代理 : k. J( x4 `; `( t. ~
[centos-master]: cat registry.evehicle.cn.conf2 `* w& l- ? t; Z! [! e* K
9 e+ |/ N; u5 K. e7 x# @# For versions of nginx > 1.3.9 that include chunked transfer encoding support
5 L, }+ c3 t! N- I6 z. L# Replace with appropriate values where necessary W* v8 Z3 _4 Q6 J8 I+ D! q
+ h5 M1 r" g7 b% C5 gupstream docker-registry {
, B) J i) S+ N5 S3 }6 L: Y1 |- A2 c server 192.168.121.9:5000;
; M5 b+ m9 x9 }) o+ B \ #server 10.44.170.95:5000;8 U) M% o/ T/ I, L- H" N# j* _1 u
}
1 l J6 H3 ^ Z9 r/ _& p/ h
. Y. T- `8 k8 n4 F( O0 I8 R# uncomment if you want a 301 redirect for users attempting to connect
9 k# T' c7 V% C! R9 i9 \# on port 80/ T" o) G! {$ q1 } a8 @* D
# NOTE: docker client will still fail. This is just for convenience2 Q; Q! w2 _5 T6 N
# server {
" \$ V* e: w* T8 V# listen *:80;
+ M7 t; c: y+ X. N$ H8 E$ r4 _# server_name my.docker.registry.com;1 a, j0 v1 O4 D# c |2 r
# return 301 https://$server_name$request_uri;) k! Y! d% W6 _& a
# }
. Y% y2 D: |/ F6 h. C
9 S( Y. m2 m# n' D; O3 R: Fserver {
1 b2 H6 P3 ?. v0 [ listen 443;
: h* Q9 z& d& p7 @3 ] server_name registry.evehicle.cn;3 y4 ?2 e! B0 Z' {; B' p. ^
2 h( }* M4 H4 n( w' r ssl on;
/ g) C5 }4 i! N8 L3 z ssl_certificate ssl/registry.evehicle.cn.crt;
, o9 t3 O) |& y5 I" B ssl_certificate_key ssl/registry.evehicle.cn.key;5 h, g' z ?% I$ G' A7 R9 G$ R
1 T) Z9 Z# }1 H5 N: i# a% v
client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads
5 S( ]. W7 j! t/ p1 K$ p8 N
% [. J1 K3 m7 B3 P2 `! f # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)" r+ y7 A. K- M" s" Z
chunked_transfer_encoding on;9 o# Z; x6 @5 h' y; g' W8 N
; c2 c. D9 k" J. s8 y# o% j location / {
4 o1 P9 d" {; P$ t auth_basic "Restricted";9 b1 O4 [: n& Y
auth_basic_user_file passwd;; J! h2 q5 A1 @" N+ v: N
add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;6 V( D6 {$ g+ K0 H6 B
V" F! g6 h+ G5 B
proxy_pass http://docker-registry;
2 v) M" z5 \6 W" \9 O proxy_set_header Host $http_host; # required for docker client's sake+ S+ e, Q# m# M& V! G
proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP
' K$ L% M4 i) V) } proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;; Z, Q# ~ W. b/ ^ Z
proxy_set_header X-Forwarded-Proto $scheme;
; S* U8 X3 W6 {: G5 T# K2 \ proxy_read_timeout 900;9 i/ l G" H' q0 F" w2 h8 l( H J' R
}7 v% `5 P. M8 r. X+ u* E$ {8 x+ P
, K: N4 n! c; T$ H location /_ping {
* m% ?6 @: T- d4 F" q" Z auth_basic off;
( C7 Y5 W9 J% p- Z include docker-registry.conf;" O8 Y; T4 e( E4 _& T
}
$ y) v9 O' k z+ r
; ^* T3 Q/ g" W& J location /v1/_ping {
1 D. L- _7 Z1 J& s auth_basic off;0 _7 T& M0 O1 e$ z* k0 G6 y
include docker-registry.conf;
% I. P8 h. T. J' S& v5 l }
8 l( `: T1 H3 D# l u
/ `7 o- Q% g7 ]# b8 {& C; c location /v2/_ping {) ^" o- J: c8 s3 r+ G3 F ~
auth_basic off;
c. |6 y% N: V$ C6 l include docker-registry.conf;
$ @! o" f4 R4 {% l }
2 k+ ^, I; H+ F7 z" K& h}
3 a( r( q" ] t2 U/ D) h
" r8 {1 G. J" K将key及crt证书文件放到../ssl目录下。使用htpasswd生成密码放于./上一级目录! s( d& z* r( ^1 ~" [8 C: S
: S+ `# w9 }* N7 }% z0 F! L
htpasswd -bcm passwd docker docker
4 T* D. Z1 {" x) ^7 F: m0 L #-c:创建一个加密文件" _- F9 q* [% s l
#-m:md5加密,默认可不填写3 ?% ~7 u% N3 d1 O
#-b:表示用户名密码在命令行中一并输入,不用分别填写
5 }+ g( _# @& x) O5 F9 b5 M5 {7 d8 J2 m# b) S
4.再次登录
% J: e1 p; d: f7 y u, T
! B# u8 T4 t2 v* n8 i& z$ h) o" ^[centos-master]:docker login -u docker -p docker -e lienhua@zhongchuangsanyou.com registry.evehicle.cn2 ]( G. \! q! p9 j& M" o q0 ^
/ p7 t S3 N. D/ ]9 WLogin Succeeded
( e# J: q I s; x" S- _& ~5 [' m' d表示成功,此时再pull\push既在私有库中进行1 V* C; H# a) H2 k! S( _
$ A0 g8 H4 S- q+ b
构建服务# N3 u: Q- { |) M# J
, a5 ?0 T9 w9 l( a% l2 zdocker的本意是将代码包含在容器内制作成镜像形成“产品”。但出于公司的(频繁修改代码及服务器资源受限)的特殊性,我们将代码以“外挂”的形式运行在宿主机上。下面以部署官网(apache)服务为例: : _, z/ k) {* Z! L8 \) W1 d
1.从docker的公有库里下载centos7的原生镜像
* |" _5 I0 L9 S( ?9 J, }4 R) \2 C7 A3 e! _1 W5 y6 T. Y
[centos-master]:docker pull centos0 b t \0 t5 S( h( v1 w3 o
% Z+ I# |; g; H2 o# XUsing default tag: latest
( |+ b, v2 o( ~. MTrying to pull repository docker.io/library/centos ... Z& X m7 r5 w2 q2 N) d' p7 g
latest: Pulling from docker.io/library/centos
# M2 C! \" Y8 K) s" E# pd9aaf4d82f24: Downloading [> ] 540 kB/73.39 MB/ b, W9 ^# E5 }; J# E8 J) C: I
d9aaf4d82f24: Pulling fs layer" m* g4 Z( p& h
Digest: sha256:eba772bac22c86d7d6e72421b4700c3f894ab6e35475a34014ff8de74c10872e
# p |9 T2 d0 [+ V" vStatus: Downloaded newer image for centos:latest, E/ M+ J* m$ [6 l" M
# `! c" s! x! a# E3 _ B* n2.编写Dockerfile制造apache基础镜像3 X2 Q L. N; d% \
, p4 m r0 M- R- m! n6 G1 F
######httpd####9 Z2 t! g+ ^2 z- K/ u6 R; F
FROM centos
7 s) O" M, W' nMAINTAINER lienhua lienhua@zhongchuangsanyou.com
4 g1 r$ t1 R1 w6 \6 A9 O. J7 k2 FRUN yum -y install epel-release. Y" ]5 n' y, C
RUN yum -y install httpd php php-mysql php-memcache* php-mbstring9 v6 ^0 H) `0 [6 u9 p2 E3 F
ADD httpd.conf /etc/httpd/conf/httpd.conf
3 K, S6 g. I- t" I) {# P
: y/ Y5 H' Y$ z8 \& h! F2 qEXPOSE 802 ] m H# {& s9 V# F! @
3 H* s2 N2 j) d, N$ }
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]) W6 {: k4 e0 l5 x; R, K
8 Z# N9 G. }2 t, y$ s) d* @" b/ v; M/ w其中httpd.conf文件需要在当前目录下真实存在,此处其内容为4 r* z6 i& n' B5 |. Y! k- s- x
4 p, H; I$ {9 |4 l. zServerRoot "/etc/httpd"
3 S. D* ^+ ^6 W$ |: LListen 80
% _& L: C- ]3 Q, VListen 8080" ?/ w3 u7 T3 X: f0 f0 Y& }
Include conf.modules.d/*.conf( W; m- V5 K' ?
Include zcsy/*.conf
3 _% O3 X- W' ]; J5 c4 r. aUser apache
$ d! L' D" }- H% o' k/ vGroup apache
+ ^6 m" I# A; F. aServerAdmin root@localhost4 j( ~ ]3 ]; F3 X3 H
<Directory />$ [- M6 |# E* {& `: |
AllowOverride none
" G) v1 P7 I5 E0 r6 |( h8 Y Require all denied5 g! n+ W3 b: G, F+ O7 q! R5 n: h
</Directory>- B% L- L& b7 F# F) ]9 o& `( L
DocumentRoot "/var/www/html"
' ?7 @( o2 H r: R<Directory "/var/www">
3 o0 V' s: \9 Z, V# M AllowOverride None
{8 _- F$ E R: p. X/ f6 e Require all granted
1 y' l w! @& [7 X: g( ], r</Directory>
% e5 S0 K3 j4 A& J<Directory "/var/www/html">
9 g9 c, v( r1 r* S3 Y# i Options Indexes FollowSymLinks- ]9 v6 {3 t6 p: h( `0 z* H0 r
AllowOverride None
$ B @) s( B8 _! N/ u( f# e Require all granted/ N' _; {5 y& `4 c
</Directory>: ?& |. ]1 P2 ^# z; M
<IfModule dir_module>! z; h' v( C; T9 H' m- k
DirectoryIndex index.html. C/ ~" @" R* w
</IfModule>
; v) t2 | w$ D* ?( N, ?' \% c1 q<Files ".ht*">
, _# e5 r# z' j) p- ~# t Require all denied
' D8 S6 `$ F5 n7 l6 l1 ~& t</Files>
& M, `) g, k% v `ErrorLog "logs/error_log"
7 m7 B6 h5 [3 }1 x8 A/ KLogLevel warn: z: s. M* i+ A Z
<IfModule log_config_module>
6 Y* J- V; l- {' @* U LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined& y' s# m( X- e6 X
LogFormat "%h %l %u %t \"%r\" %>s %b" common" h7 b5 @' w' m/ A
<IfModule logio_module>
+ _7 A4 O; i! a8 J LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio2 K$ p8 E. D* x8 C& k0 n
</IfModule>
- c7 R+ p9 w/ u4 t CustomLog "logs/access_log" combined9 J+ `4 k3 h$ Z' F
</IfModule>
3 Y% {5 c$ ?; Y/ c5 P8 f: _<IfModule alias_module>
! h; c6 | O0 ?! J* C ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"- X( l" i$ [1 Z0 o
</IfModule>
$ y+ Q# M* G' ]; d<Directory "/var/www/cgi-bin">
0 f( I4 J6 d& k. A: P; ~ AllowOverride None" [4 |/ a% m$ i) ~6 X
Options None3 E, n" E* S* C7 o H2 }$ Y
Require all granted
% `8 @. O% T |" H4 p0 J- x2 I8 c' z</Directory>
% u1 N Z1 O- y( F6 P<IfModule mime_module>
# e, w p2 \0 x# |7 g5 L TypesConfig /etc/mime.types
! S6 i/ N: b$ I! y AddType application/x-compress .Z
" }4 Z$ `+ Y8 O" k! Q6 g2 z AddType application/x-gzip .gz .tgz
1 H, f* G" B* I( V* v- { AddType application/x-httpd-php .php
) J$ U+ Q7 U7 z/ _/ k/ B d9 c* O AddType text/html .shtml7 q/ l) W) d* u
AddOutputFilter INCLUDES .shtml7 f0 x z3 g7 S- l$ \4 t# ?5 G
</IfModule>
" s, @* ^0 v' j0 p- R6 S, {1 HAddDefaultCharset UTF-8
' u- i" t; x1 O- K ]+ I* g<IfModule mime_magic_module>
% }9 Y! X$ v* m! J; E1 j MIMEMagicFile conf/magic4 ` `7 H! O7 O& P3 S# `
</IfModule>; P1 p! R# G( A6 f* Q; m5 {4 R
EnableSendfile off6 L4 E/ w7 l$ _) F x* C8 P) w
EnableMMAP off2 W( }: V& H) }$ v9 `6 H# }" _+ q2 Q- u
IncludeOptional conf.d/*.conf
- |8 q% g5 s4 S. E! I9 A5 b) I. Z8 `* I
执行[centos-master]:docker build -t registry.evehicle.cn/httpd . 命令制作名为”registry.evehicle.cn/httpd”的镜像(注意此处的点必须要有,并且其意义代表当前目录下的Dockerfile文件); b0 c& o f( ]+ A5 E
, t* O Y! B$ R5 D M1 ]6 `3.将制作好的镜像上传到私有库
o; n( ^) |4 }6 t# q! @
) |( J" r, {3 G( Adocker push registry.evehicle.cn/httpd) R1 t9 A- T" {
3 L2 {* B' b8 J% }9 T4.编写启动apache服务的yaml文件
7 Q: J% k0 n* g3 d2 O7 B+ ]/ s' Z
[centos-master]:cat 13-rc-httpd.yaml: ^ ]" ?/ U! R. N- w
w- w* {, \5 S6 y' P5 F
apiVersion: v1
/ |# F8 Y n5 h7 d8 y0 \kind: ReplicationController- x6 N9 b; Q! ^3 g: p/ o3 r7 s3 u
metadata:# ]4 I- u0 N! n# ^3 {" x0 }5 t
name: 13-rc-httpd
) Q7 g7 D5 |3 c) T1 B8 L labels:1 i5 e+ d$ _9 }) E y! t) S
name: 13-rc-httpd
- ^+ B8 |( \9 ]" d, Pspec:
; [- I |+ ~2 S( ]1 Y8 T# A" Z replicas: 2 W# u1 O& D4 C6 k( _( L
selector:; i9 X8 u0 `7 v; c6 Y. k
name: 13-rc-httpd
* d) o$ ?; i5 \2 g, {" D0 [ template:; G( Q$ k F: \2 `9 K' \$ U( V3 [) M
metadata:7 s3 E5 g& X) H: T
labels:8 |# q9 p. i; ^
name: 13-rc-httpd. ?' ~3 {, ^$ A
spec:" ^/ _; ~" `1 l9 B* x! Q
containers:. ~9 M6 N$ X% U" h
- name: 13-rc-httpd( o; p9 y6 ]2 n: P
image: registry.evehicle.cn/httpd1 k8 f6 A" X. m& r3 ]
env:; d4 X' Y0 U6 ?4 t4 y
- name: LANG
/ \/ q1 c* k2 T- ]0 T value: en_US.UTF-80 |/ n7 ^; `2 e7 |- g
ports:
% ?, C7 S3 _6 r) W7 b3 `0 x6 }6 w - containerPort: 80
1 X' m2 ]- i/ l9 e: {9 \; l7 O+ X0 s# [6 l hostPort: 80( k- p# y8 J. i4 [1 `8 I. Q
volumeMounts:) }3 E9 J0 {' G: U9 u9 [: H
- name: time
% T; m) t9 V2 ~8 L& _5 I/ r0 \0 L mountPath: /etc/localtime
' O ?% F, }4 l - name: zcsy0 r% |7 A8 ~9 F) r J; h
mountPath: /etc/httpd/zcsy# h* G: t( U" o: E, i" x
- name: deploy
+ k- q( q: t5 h8 B mountPath: /docker/httpd/deploy( p" p$ _" C, X1 J5 P0 a
- name: log' Z6 t5 @. }) y+ Z5 g
mountPath: /var/log/httpd
( M/ \7 Y, b* c' ` volumes:
) y. U/ v, I6 P* x, H, B7 k - name: time
; ]8 U2 L, I/ j+ r hostPath:5 ~+ k4 _4 q) u: w8 k
path: /etc/localtime
+ P9 y. ^- x! W" X7 D/ o) y! k8 x - name: zcsy
' Y8 \4 n4 V. M9 f5 j) J hostPath:2 u$ ^, {0 H( O& x' p- P
path: /docker/httpd/zcsy: I a& F# O& S0 |2 P
- name: deploy5 Q0 n; N3 e% M5 K! c8 Z6 k
hostPath:/ M3 c2 d' ?8 U1 {, R
path: /docker/httpd/deploy) E* J) S* Q2 v# f6 |3 b0 ^" g
- name: log
# @# e; R _( E6 a6 |+ x8 Q& V hostPath:
/ b) F# I9 _2 J; K path: /docker/httpd/log
0 _! ^. h8 E5 c% q nodeSelector:* Z* q5 [/ M, D
slave: "13"
' p/ q7 ^7 U( \+ }5 ~& i# P imagePullSecrets:
# Z' _ k2 ~7 n: |3 \ - name: registrykey
) h" @' b+ n/ T3 o. z( x7 C/ y% i0 j9 j% @% k( X2 @( W- _) P
5.给其中一个node加上标签为“13”
( c( k; Y j/ ]+ Q; T, R1 N1 I3 e* F3 ?: ^/ K. C1 O
kubectl label nodes centos-minion-1 slave=13
& P0 ?2 w! r! q' Z. Z3 o. x/ e! P M4 h& f3 E r' N! a) n" T2 D
6.此时拥有标签“13”的nodes应具备的条件
2 U- \( H1 \3 q. N1 `' j, d: l! O
/docker/httpd/zcsy下需要有官网的配置文件' ~8 g9 o: Z; ^# C. q% u8 l- e! V
& V; l8 E/ V( k: E3 y<VirtualHost *:80>
+ d( T2 Z2 o v% A8 z ServerName www.evehicle.cn
3 Q' ]- m+ j- H4 {" W2 K6 X DocumentRoot /var/deploy/wordpress/- i) \; q# i! G. M3 c! K
RewriteEngine on9 u& f6 \' Q5 j1 P* C
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
/ h4 \8 T& \; @# H; h5 ~0 K RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
5 @! z% N+ i- x! H RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !^.*\.(ico|pdf|flv|jpe?g|js|gif|png|html|shtml|zip|xml|gz|rar|swf|txt|apk|bmp|css|m4a|ogg|mp3|ipa|plist)$0 Y# E$ c$ i7 `& C7 u* ]9 c
RewriteCond %{REQUEST_URI} !^/server-status$7 k- E* p' b9 e. Q
RewriteRule . /index.php [QSA,PT,L], J4 @# _4 Q$ \- V
3 T. y% [4 {, Y
</VirtualHost>0 b; V- F' a& O5 {# F8 e
<Directory /var/deploy/wordpress/># }% o. i* H5 r. C
Options FollowSymLinks* U# H8 A6 O+ T# u# Y ]
AllowOverride All. I3 p& \: R O b( h7 v
Require all granted0 d' i/ G% S! v+ b- L/ i* L/ ]
</Directory>
. C$ W7 ]+ y/ _1 u3 y, U8 |( P
& b; W, `9 Y g1 t6 ^以及/docker/httpd/deploy下需要有官网的代码" G+ F/ R% ]) P6 y! R V
& A5 w6 x' J# _% x4 Z% k* w7.运行yaml文件启动容器
* z$ I! p* r& }4 v" V( G) F- \( E, G; z, D" L8 d5 s
[centos-master]: kuberctl create -f 13-rc-httpd.yaml! Y4 n! \; _9 e6 Q2 e% [
' \, y/ Y3 P0 @
8.查看服务& e' K9 E3 W' f# V
# \% e- L; m3 ]( `
[centos-master]: kuberctl get rc7 f6 M* y* v7 Z3 z( k4 G) ?8 G" P
) G$ G, l7 u# X( ^4 sNAME DESIRED CURRENT AGE
4 e# [) V7 P7 k- Q. e! s. j/ p13-rc-httpd 2 2 168d/ a6 y& ?" F- k
. O& ]3 w( R- G2 l ~7 w9.程序中涉及的mysql\redis\memcache等服务也需使用容器运行起来6 ~+ b6 m# x8 \8 C# S, J/ K
7 e% E# w5 e- B
[centos-master]: docker pull redis
" y3 P! H4 d+ M+ H[centos-master]: docker tag registry.evehicle.cn/redis redis
6 q/ o/ A- Y# O0 w" s. }2 H[centos-master]: docker push registry.evehicle.cn/redis
7 ]. r& f5 k6 S4 ~[centos-master]: kubectl create -f rc-redis.yaml " W5 E, L. Z& ^: Z" f6 d9 B# y
[centos-master]: cat rc-redis.yaml
; e; p) j+ p8 D# S4 r6 }5 D! M0 l& J& ]6 L- w. l
apiVersion: v1 p! `9 S9 b# k0 d8 l" K, e( @. u9 F8 |
kind: ReplicationController
1 `. m" K4 ~8 ~3 Q9 H$ t' N$ ^metadata:
. t9 Y' I' }' c, c# t0 u+ n. | name: redis" g+ {9 o) Z! R
labels:
' e6 i, W3 R5 E8 j name: redis
0 W% l9 Z% ?( a. |7 `: c( qspec:, J: D: ~ \! l: y
replicas: 2# O! a$ D; _# I
selector:
/ j6 @, |1 l Q) S% m name: redis
1 c2 Y+ @% d& n0 Y) ~6 a1 G template:
9 W$ {. A+ m' U/ r, j/ G metadata:
4 r) L0 n5 k1 O labels:
$ h8 V/ ?5 m# Q/ `0 ~6 o name: redis
/ B* ~# I" B3 x& Y spec:
% t1 Q/ o' z+ y& M1 l! i4 Y containers:
+ M" {9 z8 `' ]( T. d8 z/ P, K0 y - name: redis6 l% a& l& W" y! `
image: registry.evehicle.cn/redis
9 c& H! w1 @0 ]( P3 E ports:5 N5 Q: m5 _4 C! a7 {
- containerPort: 6379
; Z4 T9 q7 Y- Q: U hostPort: 6379
* j6 _, Z/ q: u3 b7 a' h8 c volumeMounts:
5 S- r5 Z3 G1 ^" X; ?+ B! U - name: data
h/ p4 i* B- j2 P& | mountPath: /data
% ]; a# w0 @: E+ \" m - name: time* z1 y, B8 {' v/ Q' q) L1 E- M
mountPath: /etc/localtime: b. `- R3 R$ U% ^
volumes:
0 {8 i1 x% C: d3 \' F( ` - name: data
3 ^" a- Q1 q( N- V* { hostPath:# f9 i; p' K: ?% Y& R) _, L
path: /docker/redis/6379! d) ^1 F3 l- n- v5 u9 V& i
- name: time
" P X1 i5 {$ d4 l! Z1 u2 j hostPath:
/ l/ V+ |& {7 W9 z5 w7 w" b5 g path: /etc/localtime/ ], K9 U: J4 R. C, U! M
nodeSelector:
: b8 q7 ^6 ?. M) j5 @; ^/ [- t6 C; ^! _ slave: "13"
5 R/ y2 G# Y( x& {" G5 |5 P! W imagePullSecrets:( f* [. b, g; H$ r1 w8 A8 B
- name: registrykey3 c8 M; t. i6 P$ j& @
1 `) x) ?& O3 l- M O2 r启动memcache ! f* M* ^' `# y% H
[centos-master]: docker pull memcache
: c- P% c8 O# Q1 ?3 M[centos-master]: docker tag registry.evehicle.cn/memcached memcache 6 X B+ I: Z' p3 M& x
[centos-master]: docker push registry.evehicle.cn/memcached
( M8 B" `2 n2 T( O9 W9 l[centos-master]: kubectl create -f rc-memcached.yaml 1 b2 x1 J( ?( U t/ q
[centos-master]: cat rc-memcached.yaml9 F( P9 C# \+ U: X4 R
" G+ z2 f* F9 `$ k9 L: F
apiVersion: v1
# c* R0 F% r+ N8 \+ d2 P2 ]3 @kind: ReplicationController; E7 \& w. a& [8 u5 D9 ~
metadata:. E7 {+ U9 t/ r3 l
name: memcached
/ e, G: X4 Q0 M& n# L% \2 c labels:
v" u; f4 M5 S% t name: memcached) \+ s0 C9 T8 ~1 I8 C3 c% t0 W
spec:
- O9 `$ Y: {3 e2 H replicas: 3
* Z$ }3 ^4 G% V/ l& Y4 a selector:
9 g, J0 O+ S4 E5 Z5 u) m$ u name: memcached
0 X# Z; s! u y Y template:
2 P- Q( U2 O8 z$ b5 D8 V metadata:
/ u+ u* ]9 n: X labels:: z: W: A9 Q1 T& @
name: memcached
# J( f4 T2 k( l. r spec:
7 R' O+ z+ f$ X+ c2 ?* Z containers:
; W( y: R2 n. C5 ]" O - name: memcached
4 I% X: P {; A4 P image: registry.evehicle.cn/memcached
* A6 H+ u4 m' N5 w, I9 s ports:
1 s1 { x" I7 i& u7 o2 P: F0 c7 c2 x - containerPort: 11211- a! d) w5 j. r
hostPort: 112112 M/ b8 m' n& F0 U: | V! p! Z
#nodeSelector:
F8 b0 m. S& G # slave: "13"
2 f% e' O" e+ ~2 m9 _6 X' j% S5 v imagePullSecrets:
0 \$ L( m3 s; ~1 M( l - name: registrykey
9 @) z2 m, c, X+ ]/ Y! u3 z5 q
( }. t( K9 e! J# j) X: T3 M/ v制造mysql镜像 , X+ {5 s: R5 h L+ U n+ L
[centos-master]: cat Dockerfile
4 k# |) c! m3 l# Q8 K$ k1 q6 Y- Q" b; b9 d, ]$ ]" R
FROM alpine
& H6 _* f9 ]4 z8 Z8 O9 E
6 n% ~: y1 v7 x+ o
! C0 x: X/ {) B3 L& T* f0 sCOPY startup.sh /startup.sh+ i5 X/ w2 {! A& X# z. @" y
RUN addgroup mysql && \
/ x4 b1 l, q' E- r- k" l$ S9 g adduser -H -D -s /bin/false -G mysql mysql && \" T- W$ T1 n# c! J
apk add --update mysql mysql-client && rm -f /var/cache/apk/* && \7 o% K1 O6 z2 F! x
mkdir /data && \
( K( X/ c5 P) `4 i, M: P chown -R mysql:mysql /data /etc/mysql && \7 s, @9 q* p4 K1 {
chmod 755 /startup.sh \/ N. o/ p J% x0 [
;! w8 i1 K6 n& O/ g+ K
& E4 x4 J' z) ^
$ c* _1 \! y9 |' ?& k3 [WORKDIR /data$ }7 J. b6 D2 g2 b0 L9 ^$ p w7 J
VOLUME /data) g0 k/ p1 K: ?5 x5 _* h. d
VOLUME /etc/mysql
4 f8 b) ]& O# a5 y% j8 s
/ W1 N* d* n6 x4 D7 y! o- ~
4 F! i, X$ M/ J- p& Z: \6 y3 DEXPOSE 33068 S2 P, |* _+ k! Z( e
CMD ["/startup.sh"]
2 ?4 }' b* h2 |3 b' p% s2 N2 Y5 Q) y+ y5 J8 X
启动mysql(建议mysql在宿主机启动)
( k& a* |% T P! e1 c2 H7 J( e8 ^[centos-master]: docker build -t registry.evehicle.cn/mysql
7 I: z9 K% A- |- K" S[centos-master]: docker push registry.evehicle.cn/mysql
1 g1 x6 q8 n/ Q z6 z3 N' s[centos-master]: kubectl create -f rc-mysql.yaml 5 C% g' M9 T5 @2 g$ {
[centos-master]: cat rc-mysql.yaml
9 M; O+ ` Q" M* |" J9 b! k
+ ^- P x' ?# _% X, Y) Y1 q/ eapiVersion: v1
* Y& q6 t3 k1 a4 hkind: ReplicationController
' w' w- j# B7 \" E5 ?9 Jmetadata:. n- n. V" H7 r2 L8 X
name: 13-rc-mysql
, f: f' O0 M! x5 X; h3 f labels:% Q: X% M4 @% J
name: 13-rc-mysql. x) J. G5 r" U4 J( E" u+ N% E7 F
spec:
8 B& k/ J- ], q O# v: @: n1 ~/ W replicas: 2! ^) L$ u; E1 b$ T/ ^
selector:
4 n" f: T2 A% x& D* H5 f; b name: 13-rc-mysql
, D( a; Q) a* i7 Y template: b0 o* N) v1 a
metadata:
. c/ ~2 y( y" s4 ]' k# x labels:+ l! }' \6 g/ H- K$ q4 E% E
name: 13-rc-mysql
; j+ v; W5 m7 f" H7 S# S2 c spec:0 }7 w# D7 D% \9 L" y: n/ z
containers:1 O" q! R B8 p, Z, c) |- z, j; K. u
- name: 13-rc-mysql! @; u' Z) w& g9 W x
image: registry.evehicle.cn/mysql$ P4 H- f! Z* o" i
env:
" V+ ]2 E0 E G" d0 r7 V3 Y - name: MYSQL_DATABASE! ~; j9 S' R4 j; e
value: admin; D+ e6 d+ a) D3 z1 l
- name: MYSQL_USER" V$ p$ O' l$ ?3 ]% Y4 N
value: tony
4 |& _, H0 {9 T7 }7 B2 l - name: MYSQL_PASSWORD
% d$ O7 X' F9 e( I value: 456
+ ~1 Z. M$ P. L" z* R, j - name: MYSQL_ROOT_PASSWORD( B; D' X- y% C+ V% h# t% O0 ?
value: 123
& z- v E' G, n4 E6 u ports:
1 ?( i, Y- y$ V4 r4 ` - containerPort: 3306
5 c2 V% b9 u; J# j! t$ v5 M hostPort: 3306
! @% ~8 s0 K; G3 n/ a4 _- E volumeMounts:% }# I1 h. |' @! A9 n
- name: time
" p0 }. m! B) P9 @3 a& l+ e mountPath: /etc/localtime
' j4 p( P% v" ?7 M) J8 l - name: data4 c+ `7 Y: ?( I+ p
mountPath: /data+ e* W( G! ?# C' ]# X' ]; E
- name: etc* B1 |6 r8 v' y; Q; K
mountPath: /etc/mysql. N/ m+ K4 @1 ]9 F
- name: run) C$ O4 v& y( U( d& z3 o( {
mountPath: /run/mysqld6 |! l6 T& c4 u6 u) Y
volumes:
8 q% R5 u; W" r! Y( ?9 e3 r - name: time4 {& M2 }1 B2 [' u4 H
hostPath:8 {- L, ~; P' f8 D' I- S, L4 w
path: /etc/localtime
; t: Z+ ?8 K- ~ - name: data; s1 v* E% Z6 E" O
hostPath:3 J9 r1 X3 L0 [4 s4 c
path: /docker/mysql/data+ G' {2 s8 `1 A3 y/ C
- name: etc
9 _7 e a% [$ G8 N hostPath:
6 b' B/ G3 R# Z$ K( R path: /docker/mysql/etc
. z. X) V3 q* ]& K' V, k - name: run
1 q8 m7 B" _5 _! }+ L$ `! C hostPath:
1 B! T4 L6 Z9 |$ W path: /docker/mysql/run
1 }- {) h8 w8 S+ L/ k nodeSelector:9 w$ ~2 T+ k, W/ f3 A2 z: J
slave: "13"
e( ^! ?5 J6 P( ? imagePullSecrets:
( x1 X1 e4 L r1 R! j" y - name: registrykey/ F* E+ e9 o: v$ l
* L d9 ^" Y, G* z# r% e: B为方便代码编写及统一管理,应提前做好内部DNS解析。将所负责的应用规整到对应的机器上。 |
|