找回密码
 注册
查看: 4755|回复: 3

k8s学习二:k8s编译安装集群搭建——单master多node简易部署

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2018-9-20 11:08:15 | 显示全部楼层 |阅读模式
服务器环境
9 [" ]# ~; U/ q+ v9 n
' F4 T  K, v: }2 H6 h/ |& lcentos7.5
. `+ h3 q8 m2 lmac装的pd虚拟机
  {9 P* ~& F, {$ s# A, K: T5 i作用        IP        部署服务        配置
- [: a7 D. X  r. bmaster        10.211.55.10        etcd、kube-apiserver、kube-controller-manager、kube-scheduler        2C、2G
- m& Z# i4 b2 R- rnode1        10.211.55.11        docker 、kubelet、kube-proxy        2C、2G
* `. T- c# ^* H# e* y2 m. A! _node2        10.211.55.12        docker 、kubelet、kube-proxy        2C、2G2 d5 M* h& h2 D# ?: V6 d* Z: D/ I
- 计划采用二进制包进行部署:% A# |3 T& ?2 n
" K" ^. k! d+ I' e
所需二进制包下载地址:
/ B, V* j. ?4 O6 k8 S1.https://dl.k8s.io/v1.10.4/kubernetes-server-linux-amd64.tar.gz
, q1 H1 b" G/ L$ a. N2.https://dl.k8s.io/v1.10.4/kubernetes-node-linux-amd64.tar.gz   H8 z/ ]( ?, n) N) d
3.https://github.com/coreos/etcd/r ... -linux-amd64.tar.gz / o" s2 g* h9 q6 o- l$ h* R6 g( H
注意所有服务器都需要关闭防火墙  M; @2 b! F; W" Q6 N3 p) T: R$ Q
Master部署
* p- u, o3 }7 d5 ^
/ _9 a7 D6 o" G( y二进制安装基本都是以下几个步骤:
$ T% b: e3 H+ _# I8 S. @/ x) r1、复制对应的二进制文件到/usr/bin目录下 0 S& N- {( v! A5 J( {* C3 a/ H
2、创建systemd service启动服务文件 4 h* C- X5 ]8 x7 U
3、创建service中对应的配置参数文件
9 {1 |, {6 g' U6 v4、将该应用加入到开机自启 3 q% M& O+ t; ]* q- J! D
5、启动服务并查看服务状态* c" j" h9 S4 Z3 w! n
etcd部署" b$ ]+ Q7 B' g* C8 f" t! C

& `  h* \3 u5 w) f下载二进制安装包并安装:
8 j4 Z0 x) J  w3 b) x, Kwget https://github.com/coreos/etcd/r ... -linux-amd64.tar.gz* U' p' o  k4 `& A9 r* G
cd etcd-v3.2.22-linux-amd64/
/ K/ h/ F2 |: O2 _( B% _cp etcd /usr/bin/$ g) @9 _1 s  T3 S3 H1 y2 W
cp etcdctl /usr/bin/" J' K* ?* o4 i; m$ h9 S" z
mkdir /var/lib/etcd" S" m& w6 Q+ `/ I8 q/ [
mkdir /etc/etcd7 M4 R( t" Y0 N

7 `' n; ~- `+ c编辑systemd管理文件. C0 a, u+ ]! e0 M/ \5 b7 L! K' b
vim /usr/lib/systemd/system/etcd.service
2 [  t: r8 R$ R# t) z" b& x
# {* s. Z7 S$ c[Unit]0 P" U9 h' u/ _; V6 y0 o+ D3 j! C
Description=Etcd Server5 }# a/ c. m* ]0 C" X7 s5 j
After=network.target3 o8 L9 `9 T  |: y$ k3 s/ K

$ @9 k6 O1 [9 M3 T! v! _( O[Service]
3 X* Z9 L2 \/ FType=simple
$ Z8 E# e  s5 BWorkingDirectory=/var/lib/etcd/4 [7 V8 t: f1 _6 A7 m% I- x& i
EnvironmentFile=-/etc/etcd/etcd.conf' w4 h* h! @7 e1 C) J* z) n/ ?) U4 _( z( c
ExecStart=/usr/bin/etcd
0 V; ?5 w" U9 E3 S. ?, Y( O" W
9 X- l4 w) a1 |" Q6 N[Install]
/ A% i6 ]4 ^) u  NWantedBy=multi-user.target
* o4 A& e1 u( R' Q
& r# o) ?4 @6 R: g" Y8 V/ z7 P
: q% f- X: X4 j0 c/ V6 S% D+ n( C' f启动服务,并设置开机启动
6 `% [! A9 }' D0 |% h; i% vsystemctl daemon-reload2 \- W( a) [- I" b: \! k+ ]
systemctl start etcd+ y/ M3 i/ S9 B3 r$ }$ c
systemctl enable etcd
7 n9 s8 T/ V  G. B9 E6 F  \+ F) P; o
查看服务状态的三种命令, J1 C# p; ~1 F( t. ?; u9 X
systemctl status etcd.service5 M* ]! N7 P+ ^- R0 p7 q) r& e5 l
/ a4 {6 w5 r3 x0 z. O1 u: }
curl -L http://127.0.0.1:2379/version3 |4 V' ]' ^3 q- g' d0 M3 a
6 v, Y# O- M) b! C% X
etcdctl cluster-health
2 L2 ?) h& \; E" p! ]9 e, w6 c- ~
# a7 ?5 m( S: ?. Q2 [这个安装的还挺顺利,很快就ok了。继续。。。。
. X& r0 p& m1 d* m5 W; q- {! akube-apiserver$ i" c7 z1 D& u+ L* H( b) J

6 b1 A" u: b8 H下载并安装
  m4 I9 l9 i7 P# J, f: N. y, w3 Uwget https://dl.k8s.io/v1.10.4/kubernetes-server-linux-amd64.tar.gz
2 R  q. v6 S2 M9 Rtar -xzvf kubernetes-server-linux-amd64.tar.gz  % g6 [$ J- x4 S9 W5 u
cd kubernetes/server/bin
) S! ~3 \6 v9 [+ P6 {! s) L1 Tcp kube-apiserver /usr/bin/
3 v* W+ g, r! h+ R5 ?2 I2 _7 T, r* c. V' j4 U" r) a. l" H
# 一起拷贝吧,后面就直接配置了" [! p, g, `3 ?" c
cp kube-controller-manager /usr/bin/8 T4 K  N: l$ i6 q; c$ d
cp kube-scheduler /usr/bin/1 @9 A6 S; E) _" S3 h
# e- T# O! z% }) d: S) O- N
' a* C8 k* L- {, ]% w% g
编辑systemd的启动文件
; n6 V7 @$ N0 W7 `  K: G: Vvim /usr/lib/systemd/system/kube-apiserver.service
( I1 z' d' e, r7 g+ }! a
+ J' V* d$ Y: {- z2 b- W[Unit]5 d  ^& Y1 N9 ?
Description=Kubernetes API Server
" t7 H5 |  [. ~, }9 `Documentation=https://kubernetes.io/docs/concepts/overview
# b3 s) \# _/ s* lAfter=network.target
. {! I# E0 o" M$ {5 d, CAfter=etcd.service
' i6 g! s  p. Q4 M5 ~
/ N8 ]- H% \% o$ {9 [* w[Service]) p0 r% f1 @; f* a! k
EnvironmentFile=/etc/kubernetes/apiserver2 y2 i. V# p) e, e* r7 [( B
ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS3 m# c( P1 q+ O. T) H
Restart=on-failure
9 l6 i( G9 m% d& a; y4 k: ?5 b( n0 gType=notify
) _' d' e+ z- u6 j7 P: GLimitNOFILE=65536
# r; a4 r$ u2 U9 L* U
! E% a" g9 o% i) y: @[Install]7 V& s+ W6 g; S0 L" l4 @
WantedBy=multi-user.target
) J# y2 U- h/ p. N
7 o- N% D( o6 S, S8 }/ P
) I- B" y# F& s& }& c' j/ |) h3 U- `9 _
配置参数文件
9 r/ E/ Q! A: s: E1 b  U8 [mkdir /etc/kubernetes/
* }9 f$ ^( K2 w$ M3 @  c. {5 Vvim /etc/kubernetes/apiserver
' G- h# U$ x) `: d. R; X9 d
. \/ ^3 r) }0 ~7 }' a4 E5 xKUBE_API_ARGS="--storage-backend=etcd3 \& K; y! U" C3 H+ l
               --etcd-servers=http://127.0.0.1:2379 \2 S: x/ L* T/ ?
               --bind-address=0.0.0.0 \4 ?" P8 n* d5 N% N9 m
               --secure-port=6443  \: _+ q" j3 ~9 @- [$ r! k0 X# B( b9 ^& [
               --service-cluster-ip-range=192.168.2.0/16  \3 ?9 F$ M" O: L4 d% \4 ]; E. Y
               --service-node-port-range=1-65535 \
7 b& y  m: ]7 G* p0 P9 F               --client-ca-file=/etc/kubernetes/ssl/ca.crt \, w* K( P3 V  C8 ~) J9 }& Z
               --tls-private-key-file=/etc/kubernetes/ssl/server.key  \% b1 S' \) f: ~3 U
               --tls-cert-file=/etc/kubernetes/ssl/server.crt  \
% e5 `/ s* e8 k( v/ w6 U5 q' y1 E               --enable-admission-plugins=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,DefaultStorageClass,ResourceQuota \* n) H# D! C* Y) x& i* W
               --logtostderr=false \. O! O+ C# `" E
               --log-dir=/var/log/kubernetes \8 g! H' l0 ~* u0 M1 w
               --v=2"/ A: l/ W+ [2 C/ A3 l
' {+ q5 L; Q. N" i  L$ D

& j! z5 T. {9 o8 |' f# h; p  Aservice-cluster-ip-range是servcies的虚拟IP的IP范围,这里可以自己定义,不能当前的宿主机网段重叠。 ) X0 u. [& O+ U* f9 Q0 u9 _
bind-addres 指定的apiserver监听地址,对应的监听端口是6443,使用的https的方式。(0.0.0.0 表示绑定所有地址) - {( Q9 n& m, P, l0 A& E  D
client-ca-file 这是认证的相关文件,这预先定义,后面会创建证书文件,并放置到对应的路径。5 _5 R" y( j! k: O- \+ k3 u+ S
创建日志目录和证书目录( k: g8 i' Q! R0 s
mkdir -p /etc/kubernetes/ssl. Z! r( |0 C" s& [5 ~( z- r
mkdir -p /var/log/kubernete+ q0 l# b. m& A; r- i# V; ~

# d7 V7 w* Q% H% K4 N3 akube-controller-manager
" G( z% Z9 P% R) Q2 \9 r; r- y) |$ J4 U8 C7 Q; L# H+ H
kube-controller-manager 依赖 kube-apiserver服务
$ |$ B6 T& P" f4 G编辑systemd启动文件
7 E; k9 E& |' C( i* M) Kvim /usr/lib/systemd/system/kube-controller-manager.service 1 L4 h- i9 W& ^2 k0 y. w% x+ D

) ~/ y6 [0 K0 W- [0 l  P7 X& A[Unit]# a/ O: M8 p# V9 N+ `  }
Description=Kubernetes Controller Manager
4 r* y, J  b' `. n3 _4 `Documentation=https://kubernetes.io/docs/setup/ ]9 U+ x, H8 Z3 s9 [, P, d- C' _
After=kube-apiserver.service
0 W4 o6 y4 J0 P) [Requires=kube-apiserver.service: @3 s+ Z1 O+ Z# `# o

% r+ Q8 x4 w# V& [* X9 }, U[Service]
6 P# _3 @8 c4 Y, Q$ XEnvironmentFile=/etc/kubernetes/controller-manager, J1 A) s7 ^& F- _) e: O
ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS) l5 M: o4 E/ W% T8 n' X2 ~
Restart=on-failure, X. S& t9 o$ N. t
LimitNOFILE=655366 ^  V) z" H& p1 A8 e+ H, I
! \* H3 Z) z  w  X& \1 s. @/ O( u
[Install]
7 \% ]- o0 L+ c$ G: rWantedBy=multi-user.target
( n& \  n! J- j2 M6 t2 T) l7 u6 s2 ?5 w; n, C& M  W

. D/ N" ~3 E# f/ g4 J/ l配置启动参数
, c; h! U! y3 d/ ]3 p4 N) Dvim /etc/kubernetes/controller-manager
; t) z; O9 ]+ h: N7 `; v9 c9 k3 W$ d" ^: F
KUBE_CONTROLLER_MANAGER_ARGS="--master=https://10.211.55.10:6443   \
3 Q$ Y. o+ {. ~9 j( O) ~               --service-account-private-key-file=/etc/kubernetes/ssl/server.key  \$ \' ]. M7 R* ~; ~. N5 d- B& ?
               --root-ca-file=/etc/kubernetes/ssl/ca.crt \
' ]9 C( R+ W, |               --kubeconfig=/etc/kubernetes/kubeconfig \" y- [1 ^- ?/ V, a, ]6 ~' ~
               --logtostderr=false \
' U# d9 |; E8 l5 i               --log-dir=/var/log/kubernetes \! A7 g% x7 u( C  T
               --v=2"4 f  T% E. n+ M* n: _/ j
- s: s7 V1 N; ?7 b3 t

( c$ R* q9 t* ^' d2 xkube-scheduler
3 |1 m; }( O8 g- Q9 }: ?% t  N' V
7 E3 f9 p8 K- F* Tkube-scheduler也依赖kubu-apiserver 0 @( {: O2 a6 B1 R* I
- 编辑systemd启动文件1 O* j4 C/ L7 I
vim /usr/lib/systemd/system/kube-scheduler.service : Z& O( n' Z% w  b) @; `- R  V. c2 v

7 S; l& U$ t+ t2 M+ j[Unit], J, Z1 M' r6 Y8 k3 |" ^
Description=Kubernetes Controller Manager   q3 M1 k  Q! [/ x
Documentation=https://kubernetes.io/docs/setup- ~' _& {* [: k3 ]! ]
After=kube-apiserver.service
% D' p/ ~' P" @5 H2 z" Y5 PRequires=kube-apiserver.service0 }/ l* G, J. K$ F. ], c8 }" l
- c" Z7 F* R; M; b
[Service]7 u9 N0 m5 O% a( X+ l1 M
EnvironmentFile=/etc/kubernetes/scheduler
3 x! I6 O/ `8 R$ Z- C/ g/ G- w- m9 DExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS& {( Z5 K# \+ Y" \+ a& |
Restart=on-failure
0 b+ B" V/ W- _3 v# ILimitNOFILE=65536
  L. W8 T* P% `( y0 \8 l/ |, J: x( x, g/ [8 @3 r& b
[Install]
  |* V2 c7 ?6 B( V5 V. u! D+ xWantedBy=multi-user.target# I" A  [' R) p  h- u( o
配置参数文件. K% o6 h  Z. Z
vim /etc/kubernetes/scheduler # W4 X/ |0 b/ ?/ @

% o0 e* z/ J$ _) e$ P4 r& J' sKUBE_SCHEDULER_ARGS="--master=https://10.211.55.10:6443 --kubeconfig=/etc/kubernetes/kubeconfig \
, z# W0 @2 u; b3 G0 W! l0 j               --logtostderr=false \
" y3 E( G7 \6 _/ B8 c               --log-dir=/var/log/kubernetes \+ a9 u' U5 y, B) e. k
               --v=2"0 C5 a' d0 _$ s, T) E7 \

$ J, R) N! r7 U! U* n4 \* H0 ?- V创建CA证书
# q3 I- ]- h" J6 A- n( `+ a: X/ u0 G8 n) I( X( l  h
注意生成证书前先同步一下服务器时间:ntpdate s2m.time.edu.cn
  a6 ~, B& B5 ~0 L2 b4 T0 s4 s创建kube-apiserver的CA证书和私钥文件# l7 B' |0 P! d, D2 `0 Q* ^8 M! T
cd  /etc/kubernetes/ssl/
0 q& r5 d: c% w; L# r, l/ B+ fopenssl genrsa -out ca.key 2048
# L. `6 L6 ~3 V5 B0 y$ U7 Xopenssl req -x509 -new -nodes -key ca.key -subj "/CN=10.211.55.10" -days 5000 -out ca.crt, o$ ~1 _, z) S' w/ g
openssl genrsa -out server.key 20484 H. {: ~# l4 Y+ C2 |% X* I" T

3 h& _6 a7 ^7 T; f创建master_ssl.cnf文件7 U. s( n2 J+ r: T# _/ J, h# t
vim master_ssl.cnf$ N7 B6 q0 I* T! s6 }" R

# b! o. h1 N8 `0 Z" R5 Y* s. s1 _[req]6 D7 F7 ?+ k, j- {
req_extensions = v3_req
2 Q% o# W' Z! d3 s& n  jdistinguished_name = req_distinguished_name; V7 x" K7 s8 k& z
[req_distinguished_name]
# _. }" e; f4 Q3 V7 T( @* G[ v3_req ]
  D" w8 w: ~4 Q  u/ n$ hbasicConstraints = CA:FALSE
1 v2 I( @# s7 \3 O2 e6 g9 ZkeyUsage = nonRepudiation, digitalSignature, keyEncipherment6 L# n5 I$ d, t2 `0 d1 x+ V
subjectAltName = @alt_names
$ ]5 Y8 A/ j0 s( n[alt_names]: W( M1 D6 W2 P0 {) b( E
DNS.1 = kubernetes
- R1 X- s+ T4 j8 t# |DNS.2 = kubernetes.default* M7 q0 b7 Q0 P6 I1 W$ K& D0 G) X
DNS.3 = kubernetes.default.svc
. w+ Z9 L+ |. y. aDNS.4 = kubernetes.default.svc.cluster.local9 Z6 F0 G( Y) f
DNS.5 = k8s_master
1 f9 {* `+ r$ Y3 F( a3 k" kIP.1 = 192.168.2.1     # ClusterIP 地址% o$ P' a6 F7 ~& [6 h
IP.2 = 10.211.55.10    # master IP地址
+ W' J9 e) D1 _7 o( C# m/ _
- E& ^  ]/ U2 {' n( \
& y) @3 N5 E# y0 i/ @* I+ g( q. t$ K, z2 o& r
生成apiserver证书
0 a4 w$ l3 j$ u% iopenssl req -new -key server.key -subj "/CN=10.211.55.10" -config master_ssl.cnf -out server.csr
5 D7 I+ Q. j5 t
$ d+ ~2 H7 g8 e0 D# N/ @openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 5000 -extensions v3_req -extfile master_ssl.cnf -out server.crt
* a: l2 i6 ?' Q& a4 A$ d/ T% w' f3 F. L" K6 J0 V. O+ d
设置kube-controller-manager相关证书$ y. }" F4 C# _7 V
openssl genrsa -out cs_client.key 20482 Y; k% {$ E) a( \
openssl req -new -key cs_client.key -subj "/CN=10.211.55.10" -out cs_client.csr3 w6 b& u  f" Q
openssl x509 -req -in cs_client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out cs_client.crt -days 5000: }# {+ A- I7 R
8 p! q( f$ e, n( T7 b9 a3 s
创建kubeconfig文件,kube-controller-manager和kube-scheduler公用的配置文件3 C* l5 e4 w3 A; g  C
vim /etc/kubernetes/kubeconfig
$ E+ Z/ [- r: h$ x
8 T! H: o5 a& zapiVersion: v1
% d" p! I6 H* h0 f* I. gkind: Config; Z9 w9 ]/ s( S
users:
0 Q/ d1 R- e. c. S5 r9 F- name: controllermanager
" s. w8 K7 ?/ w8 c$ w3 f  user:/ P$ ~; o' r" c+ x' Q" y
    client-certificate: /etc/kubernetes/ssl/cs_client.crt3 Y7 S$ F8 Q9 ]
    client-key: /etc/kubernetes/ssl/cs_client.key
1 d  L3 Z/ g' H* O7 K# lclusters:
  O  h7 \+ k8 D- name: local0 x3 a* m- W, p( {
  cluster:( I8 u) e; \) i3 |- q
    certificate-authority: /etc/kubernetes/ssl/ca.crt
0 J) X, T7 ^1 x4 Acontexts:# {2 B) i" N/ \3 T! Z( t# Q9 q
- context:
9 g1 n* }& t+ a- y$ v    cluster: local
5 ~; I" B% _$ B$ T' B; f& c3 j    user: controllermanager" X$ E8 c/ u3 L: P
  name: my-context1 W9 e+ F; w3 c9 K; S
current-context: my-context
( }, W# j8 D1 U( @8 \$ P4 z2 B, j
启动服务) U$ k$ a# S" W; [9 g& F
, f$ u7 }* J  i7 T5 q
启动kube-apiserver5 A8 m2 @( S8 Q9 X, d
systemctl daemon-reload/ s  v4 j. ?; w
systemctl enable kube-apiserver
- t( x0 m5 [5 d# dsystemctl start kube-apiserver
# D3 ]$ ~  p: H8 {, D4 ]4 J, _4 m; Y, a! j0 E
启动kube-controller-manager7 r0 S# M( M: s* w) Y! Y  `
systemctl enable kube-controller-manager
0 \7 M9 w* Z/ I3 n+ T1 ssystemctl start kube-controller-manager
3 B/ l( n0 m0 S6 o7 A/ p: D+ R8 [; }# g/ u' A* t. r( F
启动kube-scheduler3 G3 b. v  _6 Q; g$ L
systemctl enable kube-scheduler, ~9 I4 v  Q, P- }3 S( m$ ?; V
systemctl start kube-scheduler
1 J9 ~0 R8 N  j9 I7 W3 u; j  g6 O" c6 e8 ?
Node  V5 e7 E6 A' Q+ i9 l7 `! B# R

0 |$ k4 Q' [( {+ v安装docker
; Z7 M% n8 I0 Z  z  i6 k6 g. X. T2 Y7 [$ i0 m+ V! d8 d) f7 k
使用aliyun的yum源
. Z: w2 h# s9 z# I1 Ycurl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
' X# M- k6 R* w5 [curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6 Q) A( E3 B0 v) Q& lyum makecache
$ R- R0 J3 N3 F3 f9 s3 F
2 |# |( b9 X; Oyum安装docker工具4 X+ \4 [2 R7 J8 t6 e
yum install docker-ce3 T" d6 z5 d6 \' _9 o* r1 [
systemctl start docker) n4 }9 b/ _  E& l1 @1 d/ b2 p
systemctl enable docker% w1 f' ^9 R. e( p- |7 k

+ F2 R/ E7 u$ z  G* s0 ^4 P; E+ g* Cdocker -v* o) s+ T0 ~7 ~. g

0 s. u0 \: I5 s0 F安装kubelet服务0 x# ~/ U% y9 a. P  t5 m$ h; q
$ T+ y( t$ D5 Z
安装包下载,整理6 I! ]! X! k! i2 N. T; z( B3 ^
wget https://dl.k8s.io/v1.10.4/kubernetes-node-linux-amd64.tar.gz
* e3 j9 @1 ?7 C4 J, x. Y  ]/ z7 x! Rtar -xzvf kubernetes-node-linux-amd64.tar.gz
* R) z5 P+ |. z( `; bcd kubernetes/node/bin8 m% U9 A0 G( O7 ?
cp * /usr/bin
! m9 ~8 o) D/ Q$ v- R. T8 f' X5 `7 t1 M! d. L# j; I
添加systemctl启动配置+ [5 i6 K1 L: q7 ~
vim /usr/lib/systemd/system/kubelet.service! x# i$ H; d; d, o+ X/ `
mkdir -p /var/lib/kubelet1 y7 C5 b1 ?  Y& `$ ^' t; M8 f9 i
mkdir -p /etc/kubernetes/
: p0 E; P/ P% G7 [6 jmkdir -p /var/log/kubernetes% s/ E6 o" N$ o6 p- C, ]9 Q  ]: K
: I! @7 U: P9 F  @+ `: w
[Unit]; t+ d5 a$ g) }/ U& x
Description=Kubelet Service
0 x' e# _$ |' O3 U7 F, BAfter=docker.service9 M- b% Y( }- X- \7 ^/ q5 `3 {
Requires=docker.service: y" X. `5 S$ _. C
[Service]
( }7 i# T0 ^& JWorkingDirectory=/var/lib/kubelet# ]5 ?* @& \% p$ g; ~  L
EnvironmentFile=/etc/kubernetes/kubelet
+ N# o. M4 t5 P* Q0 KExecStart=/usr/bin/kubelet $KUBELET_ARGS
6 ^5 {5 L( V) V& PRestart=on-failure
, R4 i% V0 I, A) \3 O- oLimitNOFILE=65536
4 o- N9 @; G8 L+ X) o* ~+ p. B* m, Q" G
[Install]7 r  p* }. ?) E
WantedBy=multi-user.target" Q7 R1 F7 Q# w% B+ ?0 Y# z

1 l4 ]. f" Y  j8 O' C. a6 H$ x/ ?7 ukuberlet运行参数配置9 v) B4 J7 E' ?
安装kube-proxy服务" v% h. m  t# O+ ]  z' b

9 R$ A, N3 F$ ?" H添加systemctl启动配置7 ?& |- g/ c+ @; j) V
vim /usr/lib/systemd/system/kube-proxy.service
7 t' W2 x) d% j  N
( X& B! p% i; d9 C; Y[Unit]9 G# u& r3 U* }7 ?
Description=K8s kube-proxy Service; C2 C% |2 z/ D; V
After=network.target" [  S5 c* U  P; D) ~3 L
After=docker.service
$ r: y# E5 e5 [9 F" ?  F7 DAfter=network.target* A% J% X0 L/ p: F3 _: Y4 a2 H
After=network.service4 ?+ F- S$ q& b  B- g- B

& e1 H3 c1 R- p9 e, r9 E/ o[Service]1 c# |! }3 i& k: l0 ~0 _, B1 p
EnvironmentFile=/etc/kubernetes/kube-proxy
6 q6 m9 W2 l) e" p" [1 }' B4 W' _ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS9 I6 Z1 R$ U. }& p% h
Restart=on-failure2 b9 c/ \1 \  L, S/ j1 m
LimitNOFILE=65536
) T7 P( u0 W; O* n' W0 }
) `# j  g3 P+ i8 O[Install]
. l5 l) [! ^/ W! V0 ?- a; F6 }8 zWantedBy=multi-user.target
# o' m& X& j  s+ }  V* r9 p, o  i# u
生成CA证书
+ \& p& g: F+ t8 t$ I
" B* w2 `6 N3 H# P4 a5 P将master节点上的kube-apiserver证书ca.crt和ca.key拷贝到Node上
( C* A$ U7 o* _  B: H使用ca.crt和ca.key生成node证书$ z; @) r. C$ n. }9 u
openssl genrsa -out kubelet_client.key 2048- {6 t/ f/ _% R0 F" T) b5 u2 v4 P
openssl req -new -key kubelet_client.key -subj "/CN=10.211.55.11" -out kubelet_client.csr" j6 [% x; @/ Q% y6 Y! O; F, N
openssl x509 -req -in kubelet_client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out kubelet_client.crt -days 5000
% o4 ~  e, G6 U8 V1 w0 c& S; f  N8 F$ x2 p( M/ o1 U8 T: O
mkdir /etc/kubernetes/ssl, ~4 e. y7 M) w- b1 l9 n) X
mv kubelet_client.* /etc/kubernetes/ssl/
2 E9 [9 l# X' @5 D7 Q1 T2 omv ca.crt /etc/kubernetes/ssl/
' k5 o* E5 }' H; Z4 w( e
6 E2 c8 j% J3 t  L$ @% G; l( i配置kubeconfig
6 {5 ?' M* E; _/ l& S) h) avim /etc/kubernetes/kubeconfig3 F+ B4 f- u- y
6 ~5 ]+ d: d1 E# [' w6 ]4 M7 Q7 f
apiVersion: v1
% h( [( \" N' Z% Skind: Config
) k9 A: M1 l2 y. h- Musers:
  m2 o6 P0 K% s4 D- name: kubelet; N! V/ U5 D/ M% U, d
  user:
. c/ k7 O5 |/ w, y. I0 T7 h0 D2 x      client-certificate: /etc/kubernetes/ssl/kubelet_client.crt: \+ C- }  k. t/ f% \
      client-key: /etc/kubernetes/ssl/kubelet_client.key, m' Y+ W; w* u1 |3 @  W/ ~% f
clusters:* c- G( _; S2 q/ D; S* J% |. x" ^/ f
- name: local
  W+ _1 s$ F) l! Z' b  cluster:3 H6 W3 |$ B3 Y7 w2 E  }
      certificate-authority: /etc/kubernetes/ssl/ca.crt
1 Z1 r. l1 N2 Y& z4 B+ j      server: https://10.211.55.10:6443
! z' }/ Y, i. E+ B( u( l, Z7 icontexts:
1 Y+ B! _( \! c4 y4 ?- context:9 I: m4 X: N* C; r$ W* l
      cluster: local! `4 [4 I; h3 y: i- @. q+ j: T% e
      user: kubelet
9 e, z) q& b% Q* j0 K( P, f  name: my-context  L. ^' h( t' w( t
current-context: my-context
6 b( F. |3 Q  |  Q8 V1 [+ S$ e: W* K  [5 A3 u7 P( M. G$ B
kubelet启动参数配置7 Q+ W5 g( D$ n* w
vim /etc/kubernetes/kubelet4 D+ L  U5 N, x* o$ {

, O6 s3 ^/ d( _KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig --hostname-override=10.211.55.11 --logtostderr=false --log-dir=/var/log/kubernetes --v=2 --fail-swap-on=false"
, T2 z4 o% z. v/ n) i这里要注意–fail-swap-on=false或者禁用swap,我这里选择配置–fail-swap-on=false- q( Q$ C  t+ ?0 o
设置kube-proxy启动参数6 j) z) C  D2 W0 H
vim /etc/kubernetes/kube-proxy
4 {& K1 s% D  M, g$ Q$ Q
6 o$ z/ q' J' M& o' i& g" EKUBE_PROXY_ARGS="--master=https://10.211.55.10:6443 --kubeconfig=/etc/kubernetes/kubeconfig --logtostderr=false --log-dir=/var/log/kubernetes --v=2"+ X* d3 A# `$ `% W; x1 b, Y
启动服务
* m& s& t( n* F3 s4 `; d# u
2 F. w% u- ^$ r3 `1 C& J systemctl daemon-reload
$ }0 ~3 t, M2 N# x" {; x systemctl start kubelet.service8 ^- |& l- Q" P, N" _# s  s6 w  _
systemctl status kubelet.service
4 S& U2 o6 n3 B: Z% h5 J9 L; W1 Y( E  A- I
systemctl start kube-proxy
7 F4 a- i7 d3 p. K. J) A5 V systemctl status kube-proxy, H# O7 b6 ]; m) o8 i1 `) G
node 2就按照上面的步骤进行安装即可

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2018-9-20 11:11:21 | 显示全部楼层
搭建私有库( R( ~' K- x+ q8 a2 J2 I7 |/ j
- [9 a# g7 _- b: a
私有库用于系统内部存储成品镜像,能够快速进行下载及被k8s调度。
2 B4 K  m) x9 i1 ~5 k
' R$ L% [- r7 J0 \6 m$ s8 O9 B; v1.下载并启动私有库
* S) D+ w4 U9 ?5 l
! B1 h; t; n! ]. S  A) r; K9 g& z[centos-master]:docker run --name registry -v /etc/localtime:/etc/localtime -v /opt/registry:/var/lib/registry -p 5000:5000 -itd docker.io/registry1 Z& w) k% X: U$ b7 ^

; h  X/ \6 b1 `* v' o! S. J# A#--name 表示启动的容器后名称,此处为registry" l* j# [$ _1 v" |
#-v 表示挂载路径  格式为宿主机路径:容器内路径
+ X1 A; ~) I1 S( Z7 M, g( ^' g#-p 表示映射端口  格式为宿主机端口:容器内端口/ g3 L- {: e) e. v- A( ^3 }3 Y
#-itd   docker的内部参数,此处声明后台运行容器并分配一个伪终端并绑定到容器的标准输入上,后跟镜像名称此处为docker.io/registry
" C* H% z) T: G, Q- T& _
5 R6 ~9 V4 }( u. p( \2.创建一个secret服务,用于k8s调度私有库容器时的“令牌”。简单来说,secret服务就是一个存储密码的服务
7 v9 w: U! z6 O* n9 Z$ m. N3 E) D1 B: H! g5 T0 b7 W; X
[centos-master]:kubectl create secret docker-registry registrykey --docker-server=registry.evehicle.cn --docker-username=docker --docker-password=docker --docker-email=lienhua@zhongchuangsanyou.com
4 L+ }5 a/ Y* i% }2 s/ r
! Z$ c: b+ z" R; t6 X[centos-master]:kubectl get secret
) z) w2 ^' H! Z# n- h$ {4 fNAME          TYPE                      DATA      AGE
2 E2 E) R; l+ \: k( A5 W) D$ e/ @" R/ {3 f7 Nregistrykey   kubernetes.io/dockercfg   1         6s
8 n- D2 _& y6 d! [4 D+ C8 y/ B; u+ [& m9 \
此时登录时会提示认证错误
4 Z1 d- u2 V  U3 S2 ^; l' @
) @- P) Q7 o1 z9 P7 T[centos-master]:docker login -u docker -p docker -e lienhua@zhongchuangsanyou.com registry.evehicle.cn0 ]: _9 F7 Q7 p8 v% g  J& R4 V
Flag --email has been deprecated, will be removed in 1.13.+ p, {. [; ^& _" v5 u" C" n
Error response from daemon: login attempt to https://registry.evehicle.cn/v2/ failed with status: 401 Unauthorized
) v7 a1 a/ }0 h" S
% \) P6 f9 }0 J: t; T( k这是因为Docker官方是推荐采用Secure Registry的工作模式的,即transport采用tls。这样我们就需要为Registry配置tls所需的key和crt文件了! t( @: @6 o) o! K& ^! f' @
, U9 z  G/ a' Z2 m8 P
3.配置nginx反向代理 % v7 Z1 Q9 ~9 p, L
[centos-master]: cat registry.evehicle.cn.conf& U% K6 S1 y1 E( T6 F# V5 X1 M9 n
0 L) k9 k5 u2 d4 [0 v; W
# For versions of nginx > 1.3.9 that include chunked transfer encoding support: Y! @$ P7 }  m% f
# Replace with appropriate values where necessary
0 e  ~) _7 Q5 t0 D" Q! l6 r- l. }1 [
upstream docker-registry {
/ v: d- J  e, A9 I8 v  server 192.168.121.9:5000;
9 n, F7 T( C& ~1 }2 m4 {+ s  #server 10.44.170.95:5000;
5 _: F: `  h4 h6 n}
6 K! ?$ `3 `: \8 i/ L4 q- \, B4 v( }8 O6 ?$ i: w
# uncomment if you want a 301 redirect for users attempting to connect7 Y, F; W& J' }  }' P4 X1 U
# on port 80$ d7 |1 v% ~  `! a4 s
# NOTE: docker client will still fail. This is just for convenience
& v* A! `7 P1 [+ M# server {# m% M- ^" Z) w: l& P
#   listen *:80;* d  z+ E0 t" l  @, n
#   server_name my.docker.registry.com;1 X, t# d8 w' l3 a" w( ^2 L( q4 V! }
#   return 301 https://$server_name$request_uri;; |# p# s- `( T" L' l3 @$ C( q
# }& N; G  z$ D+ r
: f/ j( }  D+ {0 H
server {1 S8 |+ k+ Y: P; F, Y1 v4 J
    listen 443;
5 v6 ^8 r) J  T5 c* I0 x$ y    server_name registry.evehicle.cn;. _  U' g$ k* s" }! ^

# T: v2 `' ~7 T    ssl on;' q2 _$ R1 m' r( a9 ~+ R1 d
    ssl_certificate ssl/registry.evehicle.cn.crt;! H( B" Z' W- g  [% @  {4 c) K0 j# ]' B4 m
    ssl_certificate_key ssl/registry.evehicle.cn.key;
# U5 }, b3 C: q$ C/ k5 C9 N0 F: b) O
. \/ k6 b0 T1 o0 P% V0 n/ J    client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads
4 @; o5 Z' q. o9 Y1 N
7 }+ u3 l7 ?9 O. w& Q    # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
! A6 G5 w5 y/ `* R& z' k5 K    chunked_transfer_encoding on;
: Z; S. Z8 o: q& ^# @2 J
0 C/ z! a/ B+ w/ V5 I    location / {' h" _, z0 j( @( V
        auth_basic  "Restricted";
2 Y4 D- v; t. W        auth_basic_user_file  passwd;
- T) t: {, e4 h/ t        add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;, D  U  i# a3 F+ C5 R
+ d& v! F) G9 `; H( G9 Z. v
        proxy_pass                          http://docker-registry;
/ d% A  _3 d" d( @4 m1 j        proxy_set_header  Host              $http_host;   # required for docker client's sake
/ H0 W& i1 t" H        proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
& ^/ ^1 m$ b/ b8 `        proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;3 i. ?* n; ~. E/ m; P/ x: ?
        proxy_set_header  X-Forwarded-Proto $scheme;
7 r3 [% Z2 t9 K# @        proxy_read_timeout                  900;
' q3 @6 w+ O; p5 @$ d5 v        }% y' I  V% I+ l4 X. c

" l3 z$ ?: O8 p- Y& G# O+ Q$ n    location /_ping {
6 V6 ?* d+ F: X. c3 ^) C        auth_basic off;" Y4 U/ Q* e3 O  E- J4 o% v
        include               docker-registry.conf;
8 C  d5 s4 ~/ ]0 c5 t5 l: p    }& S$ i! \7 q: y9 {6 K
0 q/ H4 Q+ V1 r0 Z+ O) P
    location /v1/_ping {. ^6 f- X2 f- \4 V8 ]
        auth_basic off;+ Q4 f0 ]  J$ S0 d: G0 V
        include               docker-registry.conf;4 n- Z7 I- U* F' y
    }
# |# f$ x$ d: J, @6 m: \" K7 ~4 S9 x5 B3 z
    location /v2/_ping {, O5 U0 d! c0 S( B
        auth_basic off;
# B; y- {3 m& h( G        include               docker-registry.conf;; M4 P( w: v' \6 ~" ^. [, d; u
    }& \0 x+ s  }, f# n8 C; @
}
, b* _1 x2 Z7 j$ V# Z7 m7 H3 L2 {
将key及crt证书文件放到../ssl目录下。使用htpasswd生成密码放于./上一级目录) p- _, l8 @) C" z  y2 E

* T/ U) Q' }% o% a; \* n: I8 a( D htpasswd -bcm passwd docker docker
: X, p  R! J( L% B/ m: w #-c:创建一个加密文件
) {( x/ V+ k- N7 J2 c2 d #-m:md5加密,默认可不填写6 t' C9 Z! W* U3 L. z9 z
#-b:表示用户名密码在命令行中一并输入,不用分别填写3 C2 w$ I# Q3 O8 d8 D

' O; m) g% j, }& l, x- u- X4.再次登录$ J9 A! F) u( H
1 C' F1 L# w$ @0 V( ]# f
[centos-master]:docker login -u docker -p docker -e lienhua@zhongchuangsanyou.com registry.evehicle.cn/ d3 u& M! K9 \

0 M+ i4 U) m% Q9 s5 d) g, MLogin Succeeded$ ]0 j' u; d. l9 p( b! j  E+ a
表示成功,此时再pull\push既在私有库中进行
+ D4 z, I/ m) h/ n4 I, k6 Z/ }. i2 Z% r. i
构建服务6 M; l0 \5 Z% U5 y7 V, P3 w& T

6 r8 |8 ?% w* i/ l, \0 j) }9 Pdocker的本意是将代码包含在容器内制作成镜像形成“产品”。但出于公司的(频繁修改代码及服务器资源受限)的特殊性,我们将代码以“外挂”的形式运行在宿主机上。下面以部署官网(apache)服务为例:
, z6 P8 H  g" x* q2 z( O8 u2 R4 N4 W* }1.从docker的公有库里下载centos7的原生镜像" ~- u) |& t7 Y6 I! V7 V" d
9 u' T$ A1 a; I# J7 e/ Y7 Z. a
[centos-master]:docker pull centos) W1 w& H) v' A0 v3 V4 Y: j& X

9 c; t! @6 q! @) B6 F0 ~7 QUsing default tag: latest1 D4 |2 \7 {; ^: A% Q, N
Trying to pull repository docker.io/library/centos ..., e) O$ N4 }/ v6 }
latest: Pulling from docker.io/library/centos+ w, |+ p' k$ l# F; J
d9aaf4d82f24: Downloading [>              ]   540 kB/73.39 MB
$ d' z9 Q: ^7 V" Zd9aaf4d82f24: Pulling fs layer
6 z5 M# K7 V: {" _5 _Digest: sha256:eba772bac22c86d7d6e72421b4700c3f894ab6e35475a34014ff8de74c10872e* i/ Y) u, I% H/ v* ]
Status: Downloaded newer image for centos:latest3 C* o; o$ \+ _. O: a2 f

5 \! m8 F/ T8 O6 B3 E4 ]2.编写Dockerfile制造apache基础镜像
4 q/ l. N* R, |6 M: w
# H; I9 A5 z/ D, N######httpd####2 F) B6 @% G3 N! }; o
FROM centos
. s( i& A0 w8 C: s" D& {# L1 cMAINTAINER lienhua lienhua@zhongchuangsanyou.com
! ~, S5 m6 d' u2 B3 W3 ^RUN yum -y install epel-release* s0 W2 q  u7 C& x7 U
RUN yum -y install httpd  php php-mysql php-memcache* php-mbstring
7 h) \8 _* k2 z2 gADD httpd.conf /etc/httpd/conf/httpd.conf# S! l0 o. O0 W* D; T
# E( V8 `2 `6 I3 q
EXPOSE 80
  S6 Q8 J: W( @3 ^, m) y2 M1 G. N' }3 I
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]
, O/ I2 v& q3 j$ m$ z
5 L0 C, f: p1 ~1 }8 R其中httpd.conf文件需要在当前目录下真实存在,此处其内容为8 K7 ~4 i& T+ a* x- m
% o' w# K! P2 Z) A7 J+ e" V
ServerRoot "/etc/httpd"
$ S, T3 S8 Q# K! Z2 j& ^/ z# P: lListen 80
' p( k  C4 v6 _# h$ L6 MListen 8080
  {' `( J* `0 ~5 s' FInclude conf.modules.d/*.conf
: _5 p3 H# K: l* U6 y7 c9 d6 LInclude zcsy/*.conf. y# |2 H- O! p3 c9 Q2 ^' A
User apache
, Z" h: o5 v3 P* ^) G. _+ iGroup apache
. g! e! b) F  G5 p, X2 B3 sServerAdmin root@localhost. M3 i0 x" N$ J2 z7 c/ ]
<Directory />
6 B3 W* `$ z6 y0 u    AllowOverride none
. v; W9 m! [/ j$ I    Require all denied
9 S9 D% g- k0 v2 n4 n# e* x</Directory>& Y; t+ B8 C% Y$ `2 t
DocumentRoot "/var/www/html"
& l/ j4 q3 V3 j8 {" s0 Y3 U% k9 @<Directory "/var/www">
2 P2 V+ Q: N7 F" d8 o7 Y    AllowOverride None
4 r2 v) L" P* B. i/ i" l- ^    Require all granted
* q& v8 X0 D* I- e- k$ Y! t</Directory>
  U( F' r- X0 I2 Y) K0 c<Directory "/var/www/html">
" D$ q- E5 H: n9 c9 U% L. p    Options Indexes FollowSymLinks+ K1 f4 Z9 u7 ~6 E
    AllowOverride None* \) B- }; m% v* W0 `  w  v
    Require all granted- Q/ p9 n" L& C' D2 E
</Directory>
2 \' f0 n+ W" J+ _, j/ I3 ~2 j" O<IfModule dir_module>
6 s) a+ j" q& ]( S    DirectoryIndex index.html
7 C( C3 s* u- Y* ]( \</IfModule>
% _' P0 e% U' E4 |0 m<Files ".ht*">1 d$ s9 Y" z* \" a1 m- o
    Require all denied8 Q7 a* I* ]: b! |4 F$ r
</Files>9 X2 c9 V6 c' a8 }  u0 ?
ErrorLog "logs/error_log"% N* i& e8 i6 t8 ~) H: I
LogLevel warn$ a- Z" y- H, P2 A+ Q0 k; Q6 G5 ]# C3 b
<IfModule log_config_module>
* n/ L8 H+ h! e: x    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined( q, o. K% P3 u- u6 m% }. ?+ @
    LogFormat "%h %l %u %t \"%r\" %>s %b" common/ ^9 r4 z) }: \, t
    <IfModule logio_module>
' G/ g$ A, f# a2 d& g' E2 @      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio8 K2 F8 I" b" m/ R5 X3 I" }
    </IfModule>  p6 K; J2 H+ h7 F
    CustomLog "logs/access_log" combined
3 G7 J8 b7 A: p3 G0 u0 N</IfModule>2 k1 o! Z" }+ J  N
<IfModule alias_module>
3 r9 ^% d. a$ X, B+ r    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
: q; m: d) C' X  V! i4 ]. N* f</IfModule>, `7 x2 V) P' S+ r; f. y
<Directory "/var/www/cgi-bin">5 j4 m$ Y# L8 U; b) H2 R5 w0 C
    AllowOverride None" H% O* H" _8 i, \
    Options None" [9 _: h# @: m. A+ _
    Require all granted
9 ^1 ^* m5 f7 h( V* S! Y- A; r</Directory>. ]* P/ X) d+ W8 h0 g# f8 h
<IfModule mime_module>1 O2 s, E2 E+ K& D5 X
    TypesConfig /etc/mime.types
0 o7 g/ K2 f% r8 |    AddType application/x-compress .Z
$ Y& D# ?1 u! ?2 S) ~    AddType application/x-gzip .gz .tgz# a; d# w8 n; A! B4 @3 U/ c
    AddType application/x-httpd-php .php) T1 A* a7 }0 U4 @6 s6 Z. N! g
    AddType text/html .shtml8 k, c1 o- @% w1 N
    AddOutputFilter INCLUDES .shtml
4 G, a5 j9 e/ A</IfModule>
: h: N' E; W" KAddDefaultCharset UTF-8
. b" N, G% o  o  U3 v; e5 |<IfModule mime_magic_module>
* ?: i& S# K0 e7 L    MIMEMagicFile conf/magic
' }/ R" ?/ Z# J) q0 o</IfModule>
4 o3 }" [1 B( q  O% c& W, DEnableSendfile off
- B( a/ X5 l" w/ m% fEnableMMAP off
: j' z5 h$ H7 m: D( |8 t. R1 R  r0 WIncludeOptional conf.d/*.conf% }3 |% o& O* A4 M$ q

0 {) u' ^3 n3 K4 N3 C2 a: ^执行[centos-master]:docker build -t registry.evehicle.cn/httpd . 命令制作名为”registry.evehicle.cn/httpd”的镜像(注意此处的点必须要有,并且其意义代表当前目录下的Dockerfile文件)
) a4 z7 p( e7 E. z" |1 E& N6 S  l' E9 {- |% O1 Q& I
3.将制作好的镜像上传到私有库
1 d- B" D4 [7 G+ }# N2 `2 i2 A! x+ h- z) x7 [, ~. a% d( P
docker push registry.evehicle.cn/httpd
7 V3 d  K" M5 n) x6 a- v5 y0 Z; i* |5 D4 e" b9 I! j
4.编写启动apache服务的yaml文件% c+ e( T: g( q; |

& z& \/ G4 P. w! h" ~9 U; i: u[centos-master]:cat 13-rc-httpd.yaml
& E  p3 x; v( \! d- s3 q% P  D6 m
  v& D* Q* S9 J3 R1 S& ~. `apiVersion: v1; X& j0 U$ ], h5 f0 }4 F: t7 z
kind: ReplicationController1 f, ]9 y5 I* G# W9 l
metadata:
5 n4 d' p7 x; I% h0 I2 _7 @  name: 13-rc-httpd; _3 j6 y0 u. \
  labels:& L! f# i" B% k) @5 e
    name: 13-rc-httpd' V) B# Y. n& S: F- x4 f0 o2 I
spec:
& a1 l0 O; v/ @' p1 I; \) s  replicas: 24 y! C( B( M9 p" {4 L4 f% S. u$ u8 i
  selector:
; `  E1 g  O; [! J) e% A    name: 13-rc-httpd/ c( N' S) _) |$ J4 A) p8 C9 Y
  template:# \. b" \  ?* L# a; A1 F
    metadata:. ]" w( a4 j! u! Z1 V8 O
      labels:
! i$ O" \/ t2 q3 C7 a% ^" Z1 S        name: 13-rc-httpd# y7 t4 O* |  _, V# C6 ?: e
    spec:3 P1 ]; O3 L% }0 @1 q$ f! N
      containers:. ~3 r) s- D( q  }# ?0 |8 D
      - name: 13-rc-httpd( R+ _( w* ?7 j$ R$ o- k
        image: registry.evehicle.cn/httpd
; g7 r" y, O8 z" O        env:* A3 J2 w$ s9 ~6 o6 ?7 m: ~4 s4 f
        - name: LANG* Y' Z7 B$ s& }$ b6 O
          value: en_US.UTF-8
8 t1 ?' ~- a2 Q  z        ports:, |$ p; k2 F" y* I! c$ H
        - containerPort: 80
. Y1 `$ A$ L+ y7 _2 a8 K; @          hostPort: 80
9 [, o! C  N% R  }. Z9 h        volumeMounts:, ]" R* v5 R' I2 d8 [& t) z
        - name: time  f) I& L) K# K5 z- f, Y
          mountPath: /etc/localtime. w" K( x( x) K' Y' T
        - name: zcsy$ T2 U6 }5 h4 \6 w
          mountPath: /etc/httpd/zcsy; H/ }0 x3 _5 `. a$ X
        - name: deploy
; p) J$ {) o& X: P          mountPath: /docker/httpd/deploy- c9 s- C  ]2 k- l8 M
        - name: log
) t8 D% ~8 S: M2 _4 B* H          mountPath: /var/log/httpd
$ J1 l, R/ J' o      volumes:; _  r) d' r: d: C
        - name: time
" L5 a* t4 w- g6 p          hostPath:6 t  b( q: a( j; V: Q$ b% E3 W# O
            path: /etc/localtime- C1 b! _& q& J" z. g2 c! P' o
        - name: zcsy2 S, n( S6 {% X2 W7 t/ q, {. P
          hostPath:
9 ]8 n6 ]2 I- @$ r, f5 H& |" `            path: /docker/httpd/zcsy! _0 h. k. i) n7 n; _- _" T" \
        - name: deploy$ ~/ ~6 ]( e5 S" ~% D
          hostPath:
, Q( z' M4 p6 I% T            path: /docker/httpd/deploy+ @8 `, p0 r" [
        - name: log
5 T' A, B4 P' p( y  `3 j# c! }! l          hostPath:
* s+ J0 R9 T3 n4 f            path: /docker/httpd/log
( @7 q$ a8 i7 {! G      nodeSelector:
5 D: j5 d3 I; F        slave: "13"; s6 e) ~7 `( @2 T8 H; ~
      imagePullSecrets:
% ?; k$ S" ]0 ~1 `8 `      - name: registrykey
0 }/ f! M5 V4 b: q4 D# }! m- f2 ^6 X& Q8 K" N% D
5.给其中一个node加上标签为“13”
2 \/ p5 M1 u" \, [# g  X1 F7 T$ Z% x
kubectl label nodes centos-minion-1 slave=13# z$ V4 I  `6 H( G/ j

' }6 q# B) |( H. Q) @6 z6.此时拥有标签“13”的nodes应具备的条件
8 ~0 p0 Y4 [, a5 x$ ]/ l1 p
7 w# D0 m5 u! @+ G; g/docker/httpd/zcsy下需要有官网的配置文件
6 \4 D4 Z; M8 j/ T: ?$ D# n/ z7 c; S4 Z/ @& U  h
<VirtualHost *:80>, `* C/ Z4 B* @& T: P: c
   ServerName www.evehicle.cn7 \" k- {! j0 T3 H$ l! Q) \
  DocumentRoot /var/deploy/wordpress/
5 R5 j: v% D4 \        RewriteEngine on1 U1 b8 x1 O0 v. q) R; L0 \
        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
3 ^2 L0 D# O9 ?' c+ [1 k        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
) P& }) ?& x- {. V        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)$
; G+ E+ n7 @# _) ?        RewriteCond %{REQUEST_URI} !^/server-status$" i7 E  h5 s  c: x5 N$ s2 G) u
        RewriteRule . /index.php [QSA,PT,L]
, x3 {2 c. w' ~9 j- A0 P: e" _$ Z3 W0 D2 B$ j5 D# m" k
</VirtualHost>% Y3 {5 m: m- ^- p4 q5 q1 x2 K
<Directory /var/deploy/wordpress/>3 l( }6 _) Z; J$ }/ W6 E7 p( m
    Options FollowSymLinks
, ?* g6 Y  k" \: q; c    AllowOverride All
- k7 [# v( e" X    Require all granted) m& Z: T. o& U; J  L* ?
</Directory>3 K# h/ l* ^, n" |2 |! n+ `* d
" x: _* z' w4 N  w9 H/ I& D
以及/docker/httpd/deploy下需要有官网的代码
% R- [! |! X: Q  `) S4 s5 w( y- e' ~9 S
7.运行yaml文件启动容器
6 D3 D  s2 U* |. j$ \$ v
6 R. d- e- R* x  F. p& |7 J/ z[centos-master]: kuberctl create -f 13-rc-httpd.yaml, m( D+ h6 M+ s! {9 ?% J  e( d
6 N# S2 Q0 s7 r5 N' F+ S
8.查看服务
, X$ o! C5 ^9 _% r& K3 ^0 u
3 s1 E% V# g" S1 d' z[centos-master]: kuberctl get rc
& a) e- G+ i/ x0 ]: ^7 M& T  I" f4 p- H" d
NAME                 DESIRED   CURRENT   AGE
0 p9 O3 b2 c3 |, `/ t! ~13-rc-httpd          2         2         168d
- m& p& H1 C$ a+ b5 L3 i$ A) w- Z, K* ]4 B
9.程序中涉及的mysql\redis\memcache等服务也需使用容器运行起来9 X  a/ b  p) |+ r5 q1 P2 W$ J
# u# _7 k  _! ~. |7 Q; a/ f
[centos-master]: docker pull redis + j3 I' w) R  @; \9 }' M
[centos-master]: docker tag registry.evehicle.cn/redis redis " f# I6 |+ `8 c0 N5 d
[centos-master]: docker push registry.evehicle.cn/redis ) _3 S2 l: |3 h' s+ |( g
[centos-master]: kubectl create -f rc-redis.yaml ' u3 {+ f4 m% `2 V
[centos-master]: cat rc-redis.yaml$ P$ X' n( m0 X8 n# E8 a0 I2 Y
/ l5 \2 B+ E: W5 L+ s
apiVersion: v1
* D0 M; o' D1 u) ^kind: ReplicationController  j# X3 d5 E( v. h) k" ]
metadata:. P9 ^( K6 V% i: j+ w
  name: redis
) |6 E' n+ a' |# S: Q8 M- S  labels:4 F: u4 K( M( \& z3 `2 j
    name: redis  l' j$ p" w: W
spec:4 i, u8 ]' Y% X
  replicas: 25 V% L: Y0 Y$ O5 s+ `  F1 d* w
  selector:1 f$ ^" k9 D( A
    name: redis; Y5 R+ R; k+ E9 e; j  u
  template:
4 ]2 s$ t: R6 I3 A3 C1 R# X    metadata:7 W' c9 u9 }  R5 z5 Y9 d* I
      labels:
# R$ d5 Y+ O" W* R+ P% ~, h" s. o# p        name: redis
2 M( P/ t2 E8 C2 d. l    spec:( q6 [- Y& f5 R/ H) v
      containers:0 @6 J2 \. R9 S4 ^
      - name: redis/ A: y# h# R+ h' i  @
        image: registry.evehicle.cn/redis* U6 I5 ^6 h% O
        ports:
0 D: \0 |2 L5 A3 T% z1 G        - containerPort: 6379
' k0 L6 T2 B# \/ ^% f          hostPort: 6379
) q/ y3 r" \0 {: j; y        volumeMounts:
/ ?+ V7 g  w" @/ _        - name: data' Z- R$ l. |9 w, Z
          mountPath: /data  j& |4 h; b9 n1 a0 i4 `
        - name: time" d6 P% M+ _+ l
          mountPath: /etc/localtime
/ y' M" D1 `& D; d" v( _      volumes:
: ~9 C5 J( ^* h; ^2 h7 v7 |        - name: data, R) @9 t* b* y, C6 n+ g
          hostPath:7 F6 F% a0 U; M8 e
            path: /docker/redis/6379
  O! p$ G9 \' o( A2 R. t        - name: time
+ b- _! j# N+ g5 h+ Y% F          hostPath:& p2 P2 R2 Z4 Z* r; e) _
            path: /etc/localtime
" m; n, p. X8 u/ V: a5 }      nodeSelector:$ O& m3 r; I9 ~' c9 g2 p- @
        slave: "13"+ V( @9 l5 v5 _
      imagePullSecrets:2 V" n* I/ `: N0 ?/ F
      - name: registrykey
2 `- n2 `0 A. @* X# f& [( S; s' j( ~2 s1 R9 t
启动memcache ' H/ H( _7 u) d. x4 X
[centos-master]: docker pull memcache
4 S6 }' h0 K. [9 \! s, n[centos-master]: docker tag registry.evehicle.cn/memcached memcache ; t( D2 c/ \" X0 \- f( N
[centos-master]: docker push registry.evehicle.cn/memcached
* Q9 B5 L0 `: D9 W9 @[centos-master]: kubectl create -f rc-memcached.yaml / H% d, ~1 \8 |# Z/ U
[centos-master]: cat rc-memcached.yaml5 G& U! b! r  P. `: B
! F; g; T& ^  i" T/ X7 o9 Q
apiVersion: v1
/ ^2 W! D" _/ Q+ g- kkind: ReplicationController+ j7 \( m- H- x5 u3 x: V
metadata:& L# ~+ w% I' i$ k/ Q0 U
  name: memcached
: i: @2 b2 M3 ~  labels:6 D$ L# L& G. s# w3 x# `
    name: memcached
: v: s4 B: d4 F( pspec:
8 K( S. e! S9 a3 P  replicas: 3
* L/ J% _$ |" A9 m' ?! [. z  selector:
7 z3 f# K2 v) m; I    name: memcached
, [. H$ x; f* [, G- @: c" \  template:9 B% u: H3 W$ r& L
    metadata:5 C6 M/ \3 Y9 r5 I
      labels:+ @5 y% Z- D% r+ O/ P+ X
        name: memcached
: |; Z" L$ Y- m, o. g    spec:
+ f2 [0 k, A; v# Y+ i      containers:- L# D% i( S' g
      - name: memcached
" i, l0 B" M/ e4 s# \9 {6 D, i        image: registry.evehicle.cn/memcached& \1 _( Y, K: ~/ Q! x
        ports:6 \% @+ J  J7 Q2 C' Y
        - containerPort: 11211  z! y& e- I; D" b- I/ C4 D
          hostPort: 112111 `6 H3 _1 V6 H, N3 U; f7 p; L
      #nodeSelector:4 ]1 q7 ^7 V$ {9 G1 r
      #  slave: "13"* O% n; ^7 b6 Z6 B" C: H
      imagePullSecrets:; h; M$ R8 a; T  x
      - name: registrykey
% F& |* S/ x$ ^& ?1 ^! H9 m3 t& i, O* \+ |. C; N( ~3 u; G
制造mysql镜像 6 U; b7 d1 l$ F
[centos-master]: cat Dockerfile# B# W9 j7 e' r1 V* F/ j

) Z5 ~* e8 j5 ^9 ]FROM alpine
; x/ S* L; x5 V1 z
: ]  W3 p* y6 t* M. ]% R& Q  m6 h2 S* Z$ Q& F
COPY startup.sh /startup.sh
$ h" t. _' e2 Y2 pRUN addgroup mysql && \) H: }" ~  e& X
    adduser -H -D -s /bin/false -G mysql mysql && \# M) \/ S0 v; K) C2 _5 Q
    apk add --update mysql mysql-client && rm -f /var/cache/apk/* && \
2 a# H/ Z5 R) J" t* A    mkdir /data && \. Q/ o. [( |  x0 x
    chown -R mysql:mysql /data /etc/mysql && \9 e4 n. n0 W7 D1 w, g9 x# h
    chmod 755 /startup.sh \. q+ M! q/ z1 d& A- L: i, B9 t
    ;
7 T- e2 N- c/ J8 x6 F4 L- H- N, \# ?

5 N4 v; m9 N4 |1 NWORKDIR /data
# L5 n% f( B# v+ i8 K/ ~2 {VOLUME /data& f! i: N. s' Q& g$ @  E- a/ Y6 S
VOLUME /etc/mysql
6 z7 @7 B4 o' X$ {/ V9 W2 @
9 n+ o8 @" }* E+ b$ x  r; X
: D1 X' |4 Z  Y. z$ W/ `EXPOSE 3306
% f% ?' W' [+ N3 Z% qCMD ["/startup.sh"]
" d$ M$ J0 t0 |1 V9 F/ K, K7 G& j* u" i" _8 Y6 V
启动mysql(建议mysql在宿主机启动)
* [+ q/ \" o8 Z. I4 h' N7 Z[centos-master]: docker build -t registry.evehicle.cn/mysql $ z1 a0 x2 X3 b  U0 G8 [; c
[centos-master]: docker push registry.evehicle.cn/mysql , P9 d7 }; M3 f: i9 f& D1 q" O
[centos-master]: kubectl create -f rc-mysql.yaml
$ @: B( e# t2 a, F, S: X8 v  h[centos-master]: cat rc-mysql.yaml; ]; ^' Z2 s" M* i
1 m$ y9 M1 h! ], e3 c; Z
apiVersion: v14 [0 ?5 T! ^7 H. S
kind: ReplicationController
# ?/ [$ p6 q0 M7 Ymetadata:& a7 R  ]% L. k8 @
  name: 13-rc-mysql
( b8 o1 q2 j2 `6 e2 R  labels:
$ A4 s/ Q/ R- l: Q2 ], v0 x    name: 13-rc-mysql
+ O5 {* b- C& M$ sspec:
. ?! y* b# R0 V: t& ^1 c  replicas: 2
6 U# `3 A+ P3 \! C1 m2 V  selector:4 U9 V7 L7 N1 }7 r/ Y$ |
    name: 13-rc-mysql
; |" ~: d8 }3 P8 V4 |  template:
0 ^  B% L1 _$ S. K& x( o    metadata:, M0 y" X* y6 `; l% l! T0 ?3 z
      labels:
7 l' ?( n" K/ N3 N        name: 13-rc-mysql
2 n* C' l* o7 g. K- I0 K    spec:/ s8 [! x7 ^8 N- v
      containers:
4 M& Z: {" G5 M/ ~      - name: 13-rc-mysql6 T$ G" f# _* X7 t7 q; Q
        image: registry.evehicle.cn/mysql
$ x! D$ {  q) x8 I/ D5 o        env:8 }2 R: j2 l" ]  o
        - name: MYSQL_DATABASE1 l6 B$ {; [3 `: L# j
          value: admin
1 d" x* r( d# `: E4 ~        - name: MYSQL_USER
% s  \/ k! T3 g; \          value: tony0 X! `8 d1 a) I1 Y  G
        - name: MYSQL_PASSWORD
5 N  }; \* V1 v          value: 456
8 G$ v6 M7 i: w7 v) K  J  ^( D        - name: MYSQL_ROOT_PASSWORD' u% _! E. c6 A! w4 L# Y
          value: 123- p+ Y" }% {: D9 z) _1 |
        ports:* _* p  `, z$ B7 `
        - containerPort: 33067 D2 G, @+ f  w2 _/ a8 p% z
          hostPort: 3306( u3 x4 N& v2 H( R
        volumeMounts:! q7 O5 g, C6 X; f1 Z
        - name: time' n$ ^) E' ]. R3 U$ @; K' |* O! Q
          mountPath: /etc/localtime
9 |3 t9 l  Z% n0 [        - name: data
6 ]. _3 e- I- I0 G# ^4 M; q: t          mountPath: /data
: i8 s( C7 T  @3 d9 c, Z        - name: etc5 g1 K" i* i1 e/ i3 j/ `7 c- d
          mountPath: /etc/mysql* G4 a* t; |3 o9 R% h( U
        - name: run
9 f3 s8 I7 O- R  B+ @6 J) o9 p          mountPath: /run/mysqld( @5 U# J# q1 S( ]" I
      volumes:
/ E( ~$ x3 h; K        - name: time& I" M% t3 a/ e& [# Y
          hostPath:& A# [# t- T$ d5 R' F
            path: /etc/localtime
. A$ L. r% l6 ?! I3 W        - name: data. Q* G% `1 j9 u$ G7 \6 }
          hostPath:
' c6 c* _* q2 s- x0 Z" W            path: /docker/mysql/data
1 b8 X" u& w* t$ H; H2 S% ^8 Y5 K- }% V        - name: etc2 N1 U3 h& ]/ c* I2 E' L
          hostPath:
4 x  i, w% _9 P; C            path: /docker/mysql/etc
( u0 J" k$ H0 w1 d. l/ a. p        - name: run+ ~6 M% f3 U  b) c  I
          hostPath:8 T! O# M( L& n8 J2 D3 y
            path: /docker/mysql/run) v  _! _, Q5 w
      nodeSelector:; J; F, E7 V1 N8 D. D( `  C* N
        slave: "13"3 b" q' s: e; }, e" b* Q
      imagePullSecrets:
. V  X6 x) H0 Q1 W1 ~      - name: registrykey
  f2 H8 T/ K. q9 ~8 y7 ~: o0 X; y1 P2 B/ J1 Y$ g  R
为方便代码编写及统一管理,应提前做好内部DNS解析。将所负责的应用规整到对应的机器上。

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2018-9-20 16:11:19 | 显示全部楼层
kubectl config set-cluster default-cluster --server=http://192.168.121.9:8080
9 s0 e, m9 D6 @8 V0 F& ]kubectl config set-context default-context --cluster=default-cluster --user=default-admin+ z% X( \$ f' D. z6 j2 ^" l+ Z
kubectl config use-context default-context

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2018-9-20 21:31:29 | 显示全部楼层
搭建私有库) ]3 H% T, o. L) x8 u& [9 }" ?
6 O1 p8 C! F5 V2 Y, A0 c& M
私有库用于系统内部存储成品镜像,能够快速进行下载及被k8s调度。
& b% J6 G; U/ C, \
5 [: E9 K5 f; \' }1.下载并启动私有库
4 K" e8 F0 ], I% z0 V# @) ?) f8 b. x7 H+ w* K  w; Z
[centos-master]:docker run --name registry -v /etc/localtime:/etc/localtime -v /opt/registry:/var/lib/registry -p 5000:5000 -itd docker.io/registry
* P% W' r6 l1 A1 ^
. H( d: E) u6 Z/ p#--name 表示启动的容器后名称,此处为registry+ y8 U+ ]; y7 j" A. n$ e# m5 ^
#-v 表示挂载路径  格式为宿主机路径:容器内路径5 F2 F- \. |6 z  I1 f2 k
#-p 表示映射端口  格式为宿主机端口:容器内端口& ^% ^% f. @( y- \) ]
#-itd   docker的内部参数,此处声明后台运行容器并分配一个伪终端并绑定到容器的标准输入上,后跟镜像名称此处为docker.io/registry
# R4 x5 R0 x: @. N3 c) ^: a) K/ v4 n$ `4 |
2.创建一个secret服务,用于k8s调度私有库容器时的“令牌”。简单来说,secret服务就是一个存储密码的服务$ _! W% G9 y+ m4 [( e) ], U
8 V: B9 b+ W1 D3 d$ s/ q, m
[centos-master]:kubectl create secret docker-registry registrykey --docker-server=registry.evehicle.cn --docker-username=docker --docker-password=docker --docker-email=lienhua@zhongchuangsanyou.com) J& E2 R2 |& P& B- _. F

! ]9 _7 R7 H$ m& [[centos-master]:kubectl get secret3 K4 p8 ]1 F1 e# e
NAME          TYPE                      DATA      AGE% r0 \) T, \! ^; E/ j2 O7 m4 H# u/ {
registrykey   kubernetes.io/dockercfg   1         6s
$ ~" e# g1 `9 k( W
- C# ]; s, L: j此时登录时会提示认证错误: w9 n0 F( O* G1 p( E  u

0 f8 n/ G# ?$ T[centos-master]:docker login -u docker -p docker -e lienhua@zhongchuangsanyou.com registry.evehicle.cn- U  N. w8 {4 t( T# L; y
Flag --email has been deprecated, will be removed in 1.13.
. }) g) @# d) F5 DError response from daemon: login attempt to https://registry.evehicle.cn/v2/ failed with status: 401 Unauthorized0 \/ j1 d) L. T% T, |8 q/ }2 r
, q1 I4 d' A9 C  m3 u8 W% X* c
这是因为Docker官方是推荐采用Secure Registry的工作模式的,即transport采用tls。这样我们就需要为Registry配置tls所需的key和crt文件了
3 D" ~8 P, Z- p- R: o6 e( y- ^  d  d9 M9 f
3.配置nginx反向代理 2 L( H- s: e3 f& d4 t
[centos-master]: cat registry.evehicle.cn.conf
, F1 I6 ~+ [8 f- i- C
4 _3 f/ ~6 Y. \, G. o# For versions of nginx > 1.3.9 that include chunked transfer encoding support
6 V  h) C5 W( N( e! ~- e# Replace with appropriate values where necessary
& a( O7 ]4 T) p. S4 v
) k$ w. p* N# {, F; l. \upstream docker-registry {& f; c% ~* Q" i* ]$ E/ |
  server 192.168.121.9:5000;
7 `4 e( e) `4 b4 c$ P0 s2 P0 e  #server 10.44.170.95:5000;! c5 o, j7 j+ M" S) A$ w5 G
}
8 h1 D( ]0 ]: y8 W! k* d8 e* s/ b8 G, N9 Y* |9 w& O
# uncomment if you want a 301 redirect for users attempting to connect
+ L. x6 V4 e9 B' u# on port 80+ g% {3 W" X6 k, l
# NOTE: docker client will still fail. This is just for convenience% ~8 w. f: N- s2 k1 ^- l5 Y
# server {
0 A+ L7 ^8 f5 G% a#   listen *:80;/ W+ g( T) e4 m. s! C4 D
#   server_name my.docker.registry.com;
0 \( \% P9 F4 d0 k6 @4 G4 j#   return 301 https://$server_name$request_uri;
6 |% @% `9 s/ b8 s1 z. x# }9 q0 w; i) B/ t* L

/ B2 v. S; e7 u5 V1 D, Vserver {
2 Y1 X$ @  A$ f4 H; O1 z: a    listen 443;- q. }9 n+ P% Y6 `2 e6 A
    server_name registry.evehicle.cn;
. @1 B) x4 N+ b: i+ F* z" _8 g- I4 u" G& P
    ssl on;5 [$ i" u' B+ _" z
    ssl_certificate ssl/registry.evehicle.cn.crt;# x% N9 O4 ?! [& N% c. d
    ssl_certificate_key ssl/registry.evehicle.cn.key;9 c- z/ J9 \7 R; L% P

0 W3 D5 v. V: O* F    client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads
7 }8 ]3 }# ^9 ?9 @  w1 K
* x6 C; g  z! W    # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)+ \' Z4 K( F9 ~- V& u7 m
    chunked_transfer_encoding on;% Q; c% M# \" M. ]

0 G5 g7 m: }5 O1 U" A. x    location / {4 f* k8 Y" B: d" J- P6 Z0 i
        auth_basic  "Restricted";" j6 i3 V0 \# N
        auth_basic_user_file  passwd;
/ b$ @- o1 r- E+ ?* L) t        add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;
9 P9 L8 d. A, c/ V- C% c
. X& R, K5 J) f8 i5 ~0 f/ B. q+ ^* P        proxy_pass                          http://docker-registry;! n; A  w0 e6 {# H" O; Q5 B5 }
        proxy_set_header  Host              $http_host;   # required for docker client's sake
9 i% h" ~8 Q. _% V8 H        proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP: \* B' l* N: J
        proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
4 R5 V) X& [9 z' B/ m: F, f: ]' z* j9 J        proxy_set_header  X-Forwarded-Proto $scheme;
0 b6 ^+ S9 H& L% h5 I        proxy_read_timeout                  900;% J/ `9 w& w" |* b
        }' e/ V9 {+ H% z

6 {+ @( W0 Z8 e+ Z( a5 [& o: ^    location /_ping {- @. X9 e* t8 l+ c
        auth_basic off;
- V2 T6 [% l: Y4 A& U$ Z4 r        include               docker-registry.conf;' M3 z7 _2 A) \5 n; z3 A* B
    }4 t1 [* f1 D( k% i. z& _( \
6 `/ P+ D. ]) r( Y7 w" e
    location /v1/_ping {
9 V! C; X) ?" b. w, r        auth_basic off;7 a4 ~% \; A) x, T5 a" a
        include               docker-registry.conf;: a/ g. }8 O- P
    }
7 e% z- |4 n2 c) ?/ y) L2 i
: r" u7 C8 H$ s5 y2 q    location /v2/_ping {: N6 d5 P, U, }$ y
        auth_basic off;
# J$ p" N* k  i: a7 c        include               docker-registry.conf;6 H/ h' ?2 P% H% p8 E4 ]4 E
    }3 y+ M* k. O% f5 ~' a6 K
}
- ]8 n$ M8 T& C$ q& T. r* z5 @( z( Y, Y$ a6 ?  E: e  |3 u+ I# \- ^( F  [
将key及crt证书文件放到../ssl目录下。使用htpasswd生成密码放于./上一级目录
5 T9 |" Y! y0 X6 J1 A
! r/ k: x3 h1 d! Y htpasswd -bcm passwd docker docker
' m% b, S3 i; L0 E& n, i) v, j #-c:创建一个加密文件
, F) P6 k4 }) r #-m:md5加密,默认可不填写
/ \2 _" h  z$ b; P1 E+ u% _ #-b:表示用户名密码在命令行中一并输入,不用分别填写. {9 K( A- v% F8 Y( b

$ w7 w* z0 V! {& J. L9 b* [( |4.再次登录1 @) d: u$ a7 a: O- j
' @7 N# k3 ~( k
[centos-master]:docker login -u docker -p docker -e lienhua@zhongchuangsanyou.com registry.evehicle.cn
  J! J0 \4 ^0 z9 \. d# g9 j, C9 C- M* D- u! n
Login Succeeded$ J9 ^9 O$ e; J6 l$ `
表示成功,此时再pull\push既在私有库中进行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:30 , Processed in 0.042682 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表