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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2018-9-20 11:08:15 | 显示全部楼层 |阅读模式
服务器环境
! U+ l; n( \3 a0 `- a4 X" f' v' S! b) v+ t1 f
centos7.5, n% D1 g8 ^) ?+ i: s$ W
mac装的pd虚拟机
1 i3 g" @# T$ Y/ e( B; S作用        IP        部署服务        配置* {1 R1 C; r4 q' v* P+ a9 q
master        10.211.55.10        etcd、kube-apiserver、kube-controller-manager、kube-scheduler        2C、2G2 M  \; z+ B6 d% v! Z
node1        10.211.55.11        docker 、kubelet、kube-proxy        2C、2G- s8 n9 X9 {( H# N% p
node2        10.211.55.12        docker 、kubelet、kube-proxy        2C、2G
8 B- F1 {0 ]: I: i  B5 C" s- 计划采用二进制包进行部署:8 I# e7 u+ D; b2 c( G, E+ a
; n" @/ @  d! ?  N3 n/ O
所需二进制包下载地址:
+ t+ _  e' c/ S* L+ q5 u1.https://dl.k8s.io/v1.10.4/kubernetes-server-linux-amd64.tar.gz ) C5 k3 X9 ?- }# \9 U
2.https://dl.k8s.io/v1.10.4/kubernetes-node-linux-amd64.tar.gz ( G0 e2 p% D: {
3.https://github.com/coreos/etcd/r ... -linux-amd64.tar.gz 8 W7 j/ K3 _! Q' z8 ~
注意所有服务器都需要关闭防火墙# q( R" P' z& q8 `9 C
Master部署0 V$ S0 |* D: Q* L1 {! @" N1 t
6 j1 z+ l2 y3 Z# @  k5 R. b
二进制安装基本都是以下几个步骤:
" ]# e1 b" r2 l& p: a% S1、复制对应的二进制文件到/usr/bin目录下 6 Y; }( L% S  C6 C9 M' N- _- }" t
2、创建systemd service启动服务文件 ; b( Q  g% n, ]/ \1 ]
3、创建service中对应的配置参数文件 , @$ v5 {8 O, r9 K# H) }9 P
4、将该应用加入到开机自启 9 w7 i" j0 ?0 l! z5 V& t
5、启动服务并查看服务状态- B4 O# Q3 T: j7 O
etcd部署
& p; }2 f" U2 E, o: `& \& G/ @5 k" Q9 v; G- s
下载二进制安装包并安装:
- \" W3 |2 W- o& E% Zwget https://github.com/coreos/etcd/r ... -linux-amd64.tar.gz3 y, z  u4 j8 T! c+ v) N, a
cd etcd-v3.2.22-linux-amd64/* O- K2 L; y0 D0 J- Z: \
cp etcd /usr/bin/9 Y$ n% N2 y0 D. O; j. w1 w
cp etcdctl /usr/bin/; l0 |; k  `- Y6 \! a1 ~, l
mkdir /var/lib/etcd
! O5 P9 }* ?- \mkdir /etc/etcd0 `" [+ c/ K6 c4 Z, Q% H/ |1 K7 _
/ V+ d; [$ E0 h6 \0 E% w
编辑systemd管理文件
4 l# ^. L9 w$ nvim /usr/lib/systemd/system/etcd.service: ?4 z: i: E' L9 ~7 w5 P, s% @
8 ^. ~. P) o3 B5 `3 g
[Unit]
% F. q- {# Q. ?" i! G# eDescription=Etcd Server% N, @9 r. T# i# ], k. ~
After=network.target
+ V( `: a  |5 y8 d' f" X( L
. f% E. d& z( k# g8 _% S[Service]
0 \# V7 T1 ]) }8 S6 H- x3 XType=simple2 x$ o( c+ }, F5 T' ^- J
WorkingDirectory=/var/lib/etcd/( K/ K1 X& P6 L
EnvironmentFile=-/etc/etcd/etcd.conf
9 f1 C9 j  o; kExecStart=/usr/bin/etcd% n8 {9 t) E! ^; f6 i
- K8 C, R4 Z# i& F$ R& V& ?# J
[Install]
7 _, z3 l) {9 T( T  a& vWantedBy=multi-user.target
: p3 S. n: H1 H  h: a6 w" m6 z! L* s% Z) Y- F4 M

$ i1 T: \/ y) }$ e/ l' L启动服务,并设置开机启动
* `5 Y, h. g6 V, n" gsystemctl daemon-reload) [; u, C4 q- w8 \# U& `
systemctl start etcd1 a& N" M% Z9 q0 Y2 [- ~- o
systemctl enable etcd
* d$ Y* y; x! L8 Q( y
( \; W: v8 U7 x1 p查看服务状态的三种命令
0 q& x& |8 z) osystemctl status etcd.service
" G% T* m' A. K* Z
! ^% c& G" c* ]3 tcurl -L http://127.0.0.1:2379/version; Z( |) _# ?& z+ Y) @! L

( R5 ?8 u, b3 O2 ?2 n- Getcdctl cluster-health- R8 m% @! ]$ g6 C& b8 K

! P0 p" n+ y* S2 q这个安装的还挺顺利,很快就ok了。继续。。。。
" D8 d5 C' P3 B6 n. F+ ^kube-apiserver
; h6 d8 x0 L2 G) W, R2 _9 t" W" Y' E: }+ J2 ?2 R; G
下载并安装7 m# O: k; n$ w6 L! N9 U: B
wget https://dl.k8s.io/v1.10.4/kubernetes-server-linux-amd64.tar.gz
, ^2 L' m6 U/ Ltar -xzvf kubernetes-server-linux-amd64.tar.gz  & J4 R" |: U* o3 `
cd kubernetes/server/bin) ^5 w* ~" b6 l( k
cp kube-apiserver /usr/bin/6 q0 q8 T- ]* s) h7 _

4 f$ O2 r2 v+ A8 r2 C& B2 s# 一起拷贝吧,后面就直接配置了6 q1 V2 c5 h% _( C5 s3 i
cp kube-controller-manager /usr/bin/
5 ?4 @0 C) ~$ g, c7 {cp kube-scheduler /usr/bin/4 ^) }2 \- o8 G* o- I8 h; p
# T: h. [, {8 ^: b: u! n- |

) c+ S2 w3 Q0 B6 ?3 c6 y1 T编辑systemd的启动文件
& F( g* \- e9 d/ d0 p6 `6 N4 dvim /usr/lib/systemd/system/kube-apiserver.service8 d6 d: f. q+ x) a
( L8 @$ J7 Z7 H  P
[Unit]- V' a: C) o  l! x/ `3 ^; l( @
Description=Kubernetes API Server7 t2 Q9 t; s, u! U! k
Documentation=https://kubernetes.io/docs/concepts/overview
; P7 U4 K6 r7 K9 M2 gAfter=network.target
9 M3 s0 j" W3 v- X1 Q2 IAfter=etcd.service. g4 f! z& ?  y9 l3 j5 X5 S1 l
# y1 y0 C- s- J  ~: @, T: q
[Service], h1 N: o" e9 f, }' Y$ z- w
EnvironmentFile=/etc/kubernetes/apiserver
) t. Q) z' {# U; p! E# _ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
8 d* x9 R2 ~5 V$ u' v8 vRestart=on-failure
, V5 g! _( {0 X4 e! `+ a, \# gType=notify% Z  T& C, q6 O
LimitNOFILE=65536+ ?: ^9 @8 F1 J: A4 _7 j; e- v

1 M. ~1 D3 X4 e! S[Install]
/ s6 [: e7 a0 B0 w, K3 B/ ]9 |WantedBy=multi-user.target
/ ~4 v5 W4 \& N  y+ m
0 }+ h8 s7 c' G2 B  g% J( z' u- _- |7 C$ V8 P* |
0 G( `+ c$ W8 v' I' J- L! L
配置参数文件
+ N* z3 F2 ^' s, K, O: R, f# s! Vmkdir /etc/kubernetes/1 W$ J! D- v4 p/ O" q, A3 C8 B* V) {
vim /etc/kubernetes/apiserver $ [7 b# H6 B9 l1 D
  k% V' l' o% o. o* J
KUBE_API_ARGS="--storage-backend=etcd3 \1 f* a' [# e5 N) H9 V
               --etcd-servers=http://127.0.0.1:2379 \
1 W% v  y. k6 d- C               --bind-address=0.0.0.0 \$ I& L8 v  U3 Y* e3 I
               --secure-port=6443  \
& M/ R& D* P& }, |4 c               --service-cluster-ip-range=192.168.2.0/16  \" [0 q  O# Z- {# T9 y
               --service-node-port-range=1-65535 \" e7 x# D5 c6 F
               --client-ca-file=/etc/kubernetes/ssl/ca.crt \
& y7 a- x' P+ `. T) U& X; q               --tls-private-key-file=/etc/kubernetes/ssl/server.key  \2 m4 P9 i) L* O' Z( H
               --tls-cert-file=/etc/kubernetes/ssl/server.crt  \
3 R) s% [$ z. N1 S               --enable-admission-plugins=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,DefaultStorageClass,ResourceQuota \
8 J2 ]4 G4 B) M* |" \' d; a               --logtostderr=false \9 R, w0 R$ e2 d/ ]6 Y
               --log-dir=/var/log/kubernetes \
( `7 ~; v3 M4 u; Q+ g. H! S               --v=2"
! o1 V8 u, v9 S, q( o" z0 k
- Z8 u( r. n6 O! y  Z* [7 n
2 e- [3 ?* N, K" T3 bservice-cluster-ip-range是servcies的虚拟IP的IP范围,这里可以自己定义,不能当前的宿主机网段重叠。 4 K; ^1 X6 ^6 ?& c2 A
bind-addres 指定的apiserver监听地址,对应的监听端口是6443,使用的https的方式。(0.0.0.0 表示绑定所有地址)
) y7 S+ \5 g; C7 Pclient-ca-file 这是认证的相关文件,这预先定义,后面会创建证书文件,并放置到对应的路径。/ e. @1 e* |* c
创建日志目录和证书目录1 Q. T- o% m5 s
mkdir -p /etc/kubernetes/ssl6 c$ z" w( v2 N7 V
mkdir -p /var/log/kubernete3 |5 b+ q$ M/ |2 D+ R, r

( J* ~6 L% O6 F5 C0 Ykube-controller-manager
) z/ ]. k& o; T3 Z4 r4 g0 x8 I1 Q4 K, D
kube-controller-manager 依赖 kube-apiserver服务
/ F! a  m8 c) `# e6 e. I编辑systemd启动文件, W. d9 d- ?; R5 E
vim /usr/lib/systemd/system/kube-controller-manager.service
4 `) c! t) B% r! B& d0 G) v8 X
( C. ?+ R1 I6 n0 w1 i[Unit]
) ?6 F( h* Q/ Y* w: p  n0 WDescription=Kubernetes Controller Manager
7 w. |. y+ r4 }+ U. vDocumentation=https://kubernetes.io/docs/setup
; L$ x, a6 @) c1 S7 `3 E$ EAfter=kube-apiserver.service
3 Y, e. S; y0 R/ qRequires=kube-apiserver.service
" ^- X& t" s; L1 ?. J6 _- [3 u0 u1 j( h  S
[Service]
$ r1 ~7 u) b/ ^) j9 wEnvironmentFile=/etc/kubernetes/controller-manager& N# {. `1 i6 {$ `3 l+ D* J4 @
ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
" Y: X' D( {" Z' M4 N! ZRestart=on-failure
! B) W- D# r" ^2 t5 ~LimitNOFILE=65536
% T3 U$ s- m/ K* B6 J- }) k4 Y
( U% [1 E3 ^1 S# u. n' `1 V[Install], Q: O% Y2 ?$ l  P* @  Y
WantedBy=multi-user.target
1 C$ R9 `& e1 {8 _5 N
" u3 N2 X# ~# e6 H7 H
8 R, w( x! j3 u- z) m  S配置启动参数1 J, }) S7 V8 s) e6 _. q3 ^  y: V
vim /etc/kubernetes/controller-manager
, }" b) G# d# d* e  G8 G3 X/ {' Q1 ^* k# ?& `4 A
KUBE_CONTROLLER_MANAGER_ARGS="--master=https://10.211.55.10:6443   \- ~: n1 H: q" P$ z
               --service-account-private-key-file=/etc/kubernetes/ssl/server.key  \) r) C: I9 j! {# n0 q+ @
               --root-ca-file=/etc/kubernetes/ssl/ca.crt \
( a4 A6 ]' V* M# R2 d9 m               --kubeconfig=/etc/kubernetes/kubeconfig \# m4 W- g) d- {7 X/ P2 [) q; m
               --logtostderr=false \
5 r4 ?' e' s5 V* A; w. I3 y, y               --log-dir=/var/log/kubernetes \
8 ]8 b6 r( I* U( S' j7 d8 K               --v=2"/ _9 A& p4 S3 c2 M

) Q0 K) J9 T% A7 e; G* `: @* D6 U6 `. N' x
kube-scheduler
) f2 O& Z. v$ N( j
7 @  S/ z9 l$ b! w0 c% s0 H# Skube-scheduler也依赖kubu-apiserver
/ J+ H% ?, a. A7 Y3 w% x- 编辑systemd启动文件0 r1 S: u! z( F4 [" m! e
vim /usr/lib/systemd/system/kube-scheduler.service
! U; c% U4 D: {" D+ i/ m
, c% \7 ]5 n/ N& \6 o3 N0 u0 |: ~[Unit]7 I+ ^. ^, w& _! M
Description=Kubernetes Controller Manager
% D4 j9 [  U; H3 e% J! m- PDocumentation=https://kubernetes.io/docs/setup" g3 ^7 w8 l! F, ^% Z
After=kube-apiserver.service2 Z( r9 @  p. b" t7 D
Requires=kube-apiserver.service
, F+ Z, K! a* J2 B; O) \6 }$ }! Q. t. N: L9 ]) I
[Service]' i* B: r( m8 U5 K' j
EnvironmentFile=/etc/kubernetes/scheduler
9 \& A: k" @! K% S8 L& o7 CExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
5 e$ q" t( S4 f7 n3 tRestart=on-failure
3 {; Z# i' L* K& l9 i5 t5 n3 aLimitNOFILE=65536% q9 }0 i/ d2 C/ p0 ]7 m

# V8 V# G/ U6 Y( w' O[Install]
- ?4 U# E2 X' \9 Y2 l+ Y3 [, EWantedBy=multi-user.target
' c; t2 a/ n! y- U* {配置参数文件" ?  g! w9 v. G4 t8 f0 w  b1 g% {4 l% S
vim /etc/kubernetes/scheduler , f# F4 n0 V: H, p0 B: U7 S

' q) W- G- k& x5 }; q- P* N2 R. GKUBE_SCHEDULER_ARGS="--master=https://10.211.55.10:6443 --kubeconfig=/etc/kubernetes/kubeconfig \ , c. m& g6 n  R: ?" V
               --logtostderr=false \
) ~8 d. Z9 k* R; \* k) B" e% N               --log-dir=/var/log/kubernetes \
* ]( L. l3 D' y; u, M: [/ h               --v=2"2 f; @: {+ Q4 d. d
4 z7 q' W( a5 g$ u
创建CA证书% l# n3 B2 X: i0 G
  k: n, z  F& [
注意生成证书前先同步一下服务器时间:ntpdate s2m.time.edu.cn
2 `4 j3 l! ?) ?& P创建kube-apiserver的CA证书和私钥文件
# S5 a' t; r' r/ {7 Q8 z. W% Gcd  /etc/kubernetes/ssl/$ p) v8 s- d' E% t
openssl genrsa -out ca.key 2048- @: T+ D  X" m; G( q! P
openssl req -x509 -new -nodes -key ca.key -subj "/CN=10.211.55.10" -days 5000 -out ca.crt
( _. M! L7 W7 kopenssl genrsa -out server.key 2048
7 C- z; O6 m* x0 G
/ ~& z. Z/ |6 E/ C; q7 R+ A创建master_ssl.cnf文件
8 b7 s  a3 v! Avim master_ssl.cnf
! q3 }9 N, C8 t6 P+ V
; E4 C( J7 x# I* z9 O- p[req]
( H) i' \9 @& Yreq_extensions = v3_req* c, `' ~1 c" [  a, a* C  W
distinguished_name = req_distinguished_name
% T0 F( w5 }( y# I" N  W; M/ M' Q[req_distinguished_name]
/ N3 s; y. ?( E[ v3_req ], b+ P6 w, v6 x: J; y# C
basicConstraints = CA:FALSE7 \- b4 A( n% U6 l. u. ~
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
  J" t0 E' L4 AsubjectAltName = @alt_names
4 H- Y3 p5 V4 L2 I6 {* ^5 ]- u8 h[alt_names]8 D. |! o' m) s
DNS.1 = kubernetes0 _1 f. G9 z5 l8 q+ \& c. E
DNS.2 = kubernetes.default% Q6 ]: d* _: Z& J
DNS.3 = kubernetes.default.svc
5 M' x, X; `) K* QDNS.4 = kubernetes.default.svc.cluster.local
; P) P: p$ Z) h  ?$ x0 k  |- I$ \8 tDNS.5 = k8s_master# O# ~9 e4 V$ H( Z1 v( \; a
IP.1 = 192.168.2.1     # ClusterIP 地址
& V3 O+ D' _" T( Z- r5 ZIP.2 = 10.211.55.10    # master IP地址
2 F' v; q" ?; v) e* }
9 m: x$ g) y$ M: C; [: X! z# w/ h! h. u& x/ [5 f9 D
( W* h1 N- c( ?4 ?# {: O5 G/ o; D0 }
生成apiserver证书
4 ~3 R. a* q; x) k! ?1 M$ L# X# a8 \2 }openssl req -new -key server.key -subj "/CN=10.211.55.10" -config master_ssl.cnf -out server.csr! j0 N4 g9 N% G) f! L

/ f) t: R6 o- r0 Xopenssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 5000 -extensions v3_req -extfile master_ssl.cnf -out server.crt4 x/ N& N/ E3 `  ^

. f0 c, D4 E4 u( }/ B5 L设置kube-controller-manager相关证书$ o! p. |! e' a8 k! h
openssl genrsa -out cs_client.key 2048. `6 c% l% }3 l9 F4 W8 M
openssl req -new -key cs_client.key -subj "/CN=10.211.55.10" -out cs_client.csr: b* @) n2 Z$ A- f7 ~- ~
openssl x509 -req -in cs_client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out cs_client.crt -days 5000
. K; W' C7 V+ t0 ]: {3 Q
) s, T( V6 C$ y( H$ F3 u! a3 D创建kubeconfig文件,kube-controller-manager和kube-scheduler公用的配置文件1 Z" W7 }) u8 `- {- T
vim /etc/kubernetes/kubeconfig
4 }# h9 m5 M) A9 \/ |! {  o3 l/ H
  @1 d. j+ g# b4 lapiVersion: v1: U2 y( F1 _" @) d6 J4 X5 x! h
kind: Config5 q  j- \9 G! A* O7 S0 I& d
users:+ k+ n2 T' l) z+ k3 j9 G
- name: controllermanager
: y4 Z3 v% {! g# H  user:  E! q7 M) m: n/ D( l9 s) H
    client-certificate: /etc/kubernetes/ssl/cs_client.crt
1 j) {, [( I/ w3 E    client-key: /etc/kubernetes/ssl/cs_client.key
' o2 x/ p  Q6 p3 i7 mclusters:
! {5 ~" g* f# o- @$ G2 I- r- name: local( q# r# B6 [8 A, _0 \
  cluster:: J  Q5 V# N* {
    certificate-authority: /etc/kubernetes/ssl/ca.crt
* {% j$ Z& S9 @& G  M1 e  K0 ]contexts:
* e! o1 N! K. e: `/ ]- context:
) U. B% O, k# z: |5 \( W* y( l" w    cluster: local
: V1 Q3 j4 D/ N    user: controllermanager
; B- Y! q9 X' }  y; s! V  name: my-context9 ~' q, n4 Z2 v! D
current-context: my-context
, q2 L! |- S8 x# `$ F( K: M& f: k( L1 c! {" X9 j
启动服务1 n. s4 w  p% E
( E2 @. p1 m; Y
启动kube-apiserver! c0 b/ }) S3 v
systemctl daemon-reload
! R5 h: o6 _4 msystemctl enable kube-apiserver8 S+ p% t$ l) C- r' g
systemctl start kube-apiserver
5 Y& y7 g- B/ X% A% p0 q
: @4 y0 U( k  r5 U5 @: _启动kube-controller-manager9 C& i* j6 {5 D9 u
systemctl enable kube-controller-manager. }5 S- D* L8 z
systemctl start kube-controller-manager
: I1 h# o. U/ X7 h. I9 N! c
3 ^  {# E. D& a7 Z启动kube-scheduler) j/ U5 i) X1 x, {4 }
systemctl enable kube-scheduler
& f+ ?4 }4 W( @7 A2 w" Ysystemctl start kube-scheduler: ]* y* Q5 A, h4 E, F

& e& {7 y  Z/ E( |Node
% K! O: w7 w: _3 h' m; _( C( u1 ?
' |7 Q- b& ^7 ^! _. Z安装docker
( m  g5 E$ J$ [$ `3 o* A# F/ }+ Z+ e( z
使用aliyun的yum源
. T: Y1 G" C* d: ~4 P9 y  ]6 pcurl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
* {; Q6 p7 @2 e! n# Acurl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
9 c; p3 I9 K7 O: l; u3 Jyum makecache1 `$ X! B' r$ Z% }7 W
2 P% p+ B2 {) Y  x' V4 u
yum安装docker工具
. M" P- U! R) {# }7 Tyum install docker-ce# c) N. c2 `& z1 r$ `
systemctl start docker
6 G" I+ R: Y3 e  H& g6 v* Esystemctl enable docker) Q/ K9 E6 b: U6 ~% n- u4 S
. w8 A0 K$ Z8 c& A3 q" s' C
docker -v
1 z+ \2 i# v8 @7 U/ o4 ~8 A  D6 l
安装kubelet服务
9 C& ^: I/ B0 P6 M# k7 Z& U, r, q0 O# ^3 B8 `9 T
安装包下载,整理1 I8 e0 s' F  K1 S/ D1 K
wget https://dl.k8s.io/v1.10.4/kubernetes-node-linux-amd64.tar.gz  M3 h* s1 {4 _( D4 ~
tar -xzvf kubernetes-node-linux-amd64.tar.gz: y8 o/ o& }7 s7 [2 U6 h
cd kubernetes/node/bin" o6 `! b" y' K% [! O" K
cp * /usr/bin
2 r5 i% o7 D7 ^( X1 `. i4 }# r$ i7 V. [" T- X$ n
添加systemctl启动配置
1 Y$ T7 w% W' |7 ~vim /usr/lib/systemd/system/kubelet.service3 ^$ E+ J1 W9 f5 V1 f( s2 M& B2 g
mkdir -p /var/lib/kubelet
, X, l: X4 }1 a  r5 ?  Jmkdir -p /etc/kubernetes/
/ \5 p% G" }+ C+ Lmkdir -p /var/log/kubernetes, L. l* i* y: j7 X
& S" w1 r1 N$ C/ `: ]! A9 k
[Unit]
2 Y" Z$ p; d6 p6 ^& \) P' mDescription=Kubelet Service7 w1 ^$ H% W5 `2 d0 ^
After=docker.service
# e+ L0 P  n, C5 f7 M5 cRequires=docker.service/ K3 P; Z3 I. `# u! o# N5 S
[Service]" i$ d" w6 v- {8 S( f, c9 B
WorkingDirectory=/var/lib/kubelet
7 i0 H' h( c  g) VEnvironmentFile=/etc/kubernetes/kubelet
; n1 _; I; _3 n5 |9 n% \& t1 v$ N( R- zExecStart=/usr/bin/kubelet $KUBELET_ARGS
, L' D1 m5 _0 c9 eRestart=on-failure
9 ~8 D$ N  |# B* l3 q1 {LimitNOFILE=65536
2 C3 k% [* a9 }, `* O3 ^! t& n; Q* X% m- C' _0 h1 E1 |
[Install]
* J$ |+ j5 o1 z  }0 ^# g# DWantedBy=multi-user.target
: w8 D7 m: {/ S' ?: |+ ~% K5 _% m9 K6 ^0 t) l( S
kuberlet运行参数配置
1 n! l( y/ I5 E2 t4 y" T安装kube-proxy服务& s7 e  q0 t, f  T
6 n& b* @; I  T- }+ P$ @4 f
添加systemctl启动配置
7 p1 \6 Z9 G4 ~vim /usr/lib/systemd/system/kube-proxy.service
/ }4 i  l; g/ j; ?# P0 q
) y' f! B4 |3 X[Unit]$ _5 [  d0 V2 B, f+ z' @
Description=K8s kube-proxy Service
+ X" n3 {/ y' s/ LAfter=network.target* k: {" e) @) D! `; n) ^3 G" H4 \+ `
After=docker.service
( X3 Y: F" m5 [3 O' Z0 T* |( ?After=network.target! c9 I  k/ x9 R! p* }1 L+ g/ ~
After=network.service
5 n& i# M% z1 b
- `' c1 g3 t9 s' N[Service], f9 x0 B/ Q. w5 Y
EnvironmentFile=/etc/kubernetes/kube-proxy
% \4 M' h+ l6 j' F2 UExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS
, t& d" R1 w. |. `Restart=on-failure1 v2 H/ b5 n4 |( S$ }/ `
LimitNOFILE=655360 X& H& S. H) w; ?  `* L- s
3 n$ [# {( J: g6 Y
[Install]6 X6 \) j9 L6 Y3 g! r1 b
WantedBy=multi-user.target
( e9 w5 u; m4 n0 W' R  z- }/ ~
4 I, ?& L0 N# Q; [生成CA证书
* B3 c* T4 u4 |5 a* i3 Z
  K8 L: L% `! `将master节点上的kube-apiserver证书ca.crt和ca.key拷贝到Node上" P; s% O, t1 R2 c  w
使用ca.crt和ca.key生成node证书
4 c% }2 i  t& j. X' Copenssl genrsa -out kubelet_client.key 2048
0 K$ x$ o. g  \/ ?0 N: k8 Eopenssl req -new -key kubelet_client.key -subj "/CN=10.211.55.11" -out kubelet_client.csr$ A) C% [9 y) m" A
openssl x509 -req -in kubelet_client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out kubelet_client.crt -days 50007 D2 |4 G5 D, ]4 c8 u" l1 A( `

) m& F* [  j" Q* Xmkdir /etc/kubernetes/ssl
  t( f; D6 A) vmv kubelet_client.* /etc/kubernetes/ssl/* p& l) t7 J* @* }+ e
mv ca.crt /etc/kubernetes/ssl/5 [% B% k. L. N/ S8 N
7 V$ h3 @! `# a
配置kubeconfig
+ [# n9 m6 X# @* V9 g* nvim /etc/kubernetes/kubeconfig
+ ]) ]# a. A) l$ h: N8 V
' y4 h8 X, U) y8 {0 u% ]- N* xapiVersion: v1
. f( U' Y% v. V5 Hkind: Config
% x) o+ r% n. \( s' D5 Husers:
! E- q) z+ X, z3 O9 Q7 P5 d- name: kubelet
6 I2 X5 b$ Y) Z* S- h) T  user:
( A, a$ M  p: C6 I9 K. ]8 T      client-certificate: /etc/kubernetes/ssl/kubelet_client.crt
7 ?+ ^3 ?7 F8 r6 k8 G      client-key: /etc/kubernetes/ssl/kubelet_client.key
! _, J) e+ B( Y6 p7 x3 \" hclusters:6 e0 \. V, D3 b# X2 Y
- name: local2 T* _/ D5 d3 a& }
  cluster:4 p1 q' n1 m1 A  k
      certificate-authority: /etc/kubernetes/ssl/ca.crt
7 Y$ m' o! o% v      server: https://10.211.55.10:6443
' W" I) g1 {$ g4 |/ d9 tcontexts:
! R" d0 Y! c( P: V: P- r- context:
) Z  N. k0 A3 f" G/ p: \4 ^: f* \      cluster: local
" K- ?0 b' h2 ~; D5 }      user: kubelet
( {; Z* v1 T# ?5 v  name: my-context
9 U" s/ D7 ^, @, @current-context: my-context
6 A( D, x  r  k3 W: Y1 y2 h& Q% _! `" ]7 a
kubelet启动参数配置
, l5 v$ G7 F5 |6 F( Qvim /etc/kubernetes/kubelet4 y/ D* D  p& E" c1 {
0 o( ^( J% d3 A0 f2 `. u
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"5 O' y+ m4 G, l" l
这里要注意–fail-swap-on=false或者禁用swap,我这里选择配置–fail-swap-on=false
+ [9 u+ t5 g& j* T5 J( `& {$ A设置kube-proxy启动参数
* F5 }5 |5 S: Nvim /etc/kubernetes/kube-proxy4 s0 D1 A( D( p4 }& ~
% N+ {% c4 `- u' g: E
KUBE_PROXY_ARGS="--master=https://10.211.55.10:6443 --kubeconfig=/etc/kubernetes/kubeconfig --logtostderr=false --log-dir=/var/log/kubernetes --v=2"9 h6 p) R$ j9 ~$ G& d
启动服务7 k( v4 H- Q$ I8 M

, p& w6 _0 {- L; w) S systemctl daemon-reload
; r: I5 y# y& H5 l6 N systemctl start kubelet.service
+ j4 ?6 w/ f8 q% w systemctl status kubelet.service4 K2 w" B9 c; i: L3 }

- Y1 f; y0 F: _0 `% u$ M) D systemctl start kube-proxy
/ H+ G1 Y+ _1 Y5 n& y5 W$ r9 K* K2 X% U systemctl status kube-proxy5 j( E  |; o8 k) s0 s# R1 t
node 2就按照上面的步骤进行安装即可

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2018-9-20 11:11:21 | 显示全部楼层
搭建私有库$ d: B6 C  Z+ F' i9 m6 K* C6 f
6 `) q* r4 ~3 i, k, W1 c4 |& c
私有库用于系统内部存储成品镜像,能够快速进行下载及被k8s调度。! S" Z/ G+ ~% P% B( K
; M/ z$ M. r0 a! @
1.下载并启动私有库
7 B9 t, o& b  ]7 i! S
' z& O* Z- i7 w+ G3 d8 U[centos-master]:docker run --name registry -v /etc/localtime:/etc/localtime -v /opt/registry:/var/lib/registry -p 5000:5000 -itd docker.io/registry
0 ^* O' V  K- F6 G. v! V
8 {; k# Y: Z& ]- D. a) o5 D* E#--name 表示启动的容器后名称,此处为registry# V% L) C9 ?: B' ]
#-v 表示挂载路径  格式为宿主机路径:容器内路径. K- {( P* m7 Q
#-p 表示映射端口  格式为宿主机端口:容器内端口
* f1 p$ c1 ^2 l7 P  E#-itd   docker的内部参数,此处声明后台运行容器并分配一个伪终端并绑定到容器的标准输入上,后跟镜像名称此处为docker.io/registry! t6 o. n9 p4 W/ }4 t

8 U' W  A/ ~  I2.创建一个secret服务,用于k8s调度私有库容器时的“令牌”。简单来说,secret服务就是一个存储密码的服务
# r6 g0 V- e0 C3 h# M5 h+ C6 H. I" V' M* b. ]# c# w! D
[centos-master]:kubectl create secret docker-registry registrykey --docker-server=registry.evehicle.cn --docker-username=docker --docker-password=docker --docker-email=lienhua@zhongchuangsanyou.com. O# j# z5 k2 \% [% ?. Z7 Y
: I3 U  s0 U- z7 B' a% B3 ^% O% a1 U
[centos-master]:kubectl get secret/ C3 b' }5 q5 l0 g( F; T3 `
NAME          TYPE                      DATA      AGE
( h! {5 ^4 J4 V- xregistrykey   kubernetes.io/dockercfg   1         6s' n- ?& e% m& A/ b0 s& P. N: r4 j

7 o$ q+ a) P% g% r8 a" z9 R此时登录时会提示认证错误$ o+ j1 Y# l& T% }6 x. N4 i* G

& u. N2 |5 q7 n# ][centos-master]:docker login -u docker -p docker -e lienhua@zhongchuangsanyou.com registry.evehicle.cn, r5 c+ X6 X3 y* @7 ]1 y; p
Flag --email has been deprecated, will be removed in 1.13., }1 b/ M* O3 k) R6 V. f* v
Error response from daemon: login attempt to https://registry.evehicle.cn/v2/ failed with status: 401 Unauthorized
+ n2 t& P% l6 _% F- h5 K
2 J6 n$ U; y/ S" Z8 M( L# t这是因为Docker官方是推荐采用Secure Registry的工作模式的,即transport采用tls。这样我们就需要为Registry配置tls所需的key和crt文件了4 ]9 S1 d+ M' L5 J2 F

3 I( [0 ]' L9 Y3 Q% P- b7 B( y" C- S3.配置nginx反向代理 - t% Z4 j0 f5 R+ K- h2 y1 c
[centos-master]: cat registry.evehicle.cn.conf
: C# ]- U, H* A4 s
# M! T" X+ b! y# For versions of nginx > 1.3.9 that include chunked transfer encoding support8 ?4 _$ ?, M6 m$ L) u  v1 f# M- l
# Replace with appropriate values where necessary3 f( ?/ q& U4 {/ G( l# e4 i
1 }& x2 |$ P  }7 u8 K  P
upstream docker-registry {
) H6 R& l- d6 q! N% Q- Q9 d: ^' E. U  server 192.168.121.9:5000;* ^; y! V8 p/ v5 m$ ?5 k
  #server 10.44.170.95:5000;
* u* K" B9 K8 L}1 @6 N% k# h4 I; k
) E% }( D+ c% o2 R% ~' A% Q- o( O
# uncomment if you want a 301 redirect for users attempting to connect0 n  m# Q6 G: r
# on port 80
3 B1 m4 F$ t0 U, b5 d# NOTE: docker client will still fail. This is just for convenience2 v6 M. E5 J5 d/ ?0 Y/ h
# server {
4 P+ B6 Z: H& \. E' C) B( y2 R#   listen *:80;# N; x3 m) a0 O# S  b
#   server_name my.docker.registry.com;
4 ]0 I& b  l) h$ }( w$ @#   return 301 https://$server_name$request_uri;: y4 p5 E8 `9 {# `
# }( a  V9 @! T% {3 U

& a+ y6 t& P- u( Kserver {1 I6 V; H% T  o
    listen 443;' h- h4 T" Y* k* K; |; U
    server_name registry.evehicle.cn;: N1 w4 Y' h* D
9 `- c- l& c& C1 b
    ssl on;
' x$ T8 ~3 Y& g4 k" x" n/ U    ssl_certificate ssl/registry.evehicle.cn.crt;% p! f# v# |- }
    ssl_certificate_key ssl/registry.evehicle.cn.key;
1 |, S- s/ m2 _3 t6 Z# I! _8 f' j: r. l  O1 l
    client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads
! V/ w# G; q9 m# u. Y  A" _
; u$ ~0 w0 Y+ X1 s    # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
: n9 b7 H4 w# g$ J; R    chunked_transfer_encoding on;1 D& f% P% n" ~2 h1 m' q( c# ~3 l5 ]
$ P! M0 P/ _0 h( @9 J" {% c
    location / {  Q* d9 R3 q' {( Z5 e! Z" N
        auth_basic  "Restricted";  g# @4 r* l5 y8 }, O
        auth_basic_user_file  passwd;8 F5 m' [. s2 S& F7 Z* U
        add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;) x  m9 l; ~6 B( x! ^
+ N' m3 |! M4 Q
        proxy_pass                          http://docker-registry;
8 o+ k  Q: ~/ O9 R7 I! o        proxy_set_header  Host              $http_host;   # required for docker client's sake( N8 `9 w) a  d; u$ s  w0 s
        proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
* ], @+ H0 }: R3 m( o        proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
8 W7 ]$ e( x, C+ R: y2 C0 @( ]        proxy_set_header  X-Forwarded-Proto $scheme;
' c& L" S2 i3 _6 a- t! ?        proxy_read_timeout                  900;1 z: A4 e& v& @/ x
        }" c4 _4 c: A$ Q

6 B: r' I' b# U/ T& }    location /_ping {* P$ f, E8 ^+ r3 a, p# q) t: M
        auth_basic off;
3 i% f2 _; ^! U' }        include               docker-registry.conf;' s8 d( Q; p/ D3 l7 O
    }
- y& g! R! _. ?) J* @' j# U. \) p$ p; S( @6 l! o# P
    location /v1/_ping {
2 J/ n% u  \. M$ m6 N+ @        auth_basic off;) d; x/ V5 r* D/ C
        include               docker-registry.conf;* x( c+ c4 r, h  c. J. h% Z
    }
& I$ B% |7 z* L  N& o) ~. G) b, b' M' B4 }
    location /v2/_ping {; w7 h1 ~% M8 y- Y+ @3 Z8 S
        auth_basic off;0 l0 m! C% U% m) ?8 [0 A( g! [
        include               docker-registry.conf;
- e! R3 ]" p- x& B    }- E+ }$ _. [' k# j; A
}$ U/ L( _# g  Z. i
" x9 s  E7 ?9 a: [" [. |/ x
将key及crt证书文件放到../ssl目录下。使用htpasswd生成密码放于./上一级目录7 N" A" E- d+ [3 h* J
! s9 C  X( h8 g. f
htpasswd -bcm passwd docker docker
" I. X' f' W7 g, G  W' u #-c:创建一个加密文件
; c1 j  K, _! b) A; B7 O7 N #-m:md5加密,默认可不填写
8 U9 y9 C$ M& R# ?1 q- r; B; i #-b:表示用户名密码在命令行中一并输入,不用分别填写
1 R6 `/ B+ r' d8 a& h- x8 q6 c  R& y
4.再次登录
% F$ j6 d& @4 n2 k; a7 q
& Q+ ?+ y8 |0 m4 h3 n2 X$ {[centos-master]:docker login -u docker -p docker -e lienhua@zhongchuangsanyou.com registry.evehicle.cn
5 W/ w- M, M  P4 K9 S1 A3 l. j5 L% C$ m- z
Login Succeeded9 B) D* x9 w" N
表示成功,此时再pull\push既在私有库中进行4 o7 r$ [& N/ \5 |" T& @8 a

% V5 c5 U8 i# d( U: z# T构建服务2 l/ k" D- H' {' r, ?" P4 M6 U$ b, p4 _
# U6 M: @( `  p& j8 b5 g2 J
docker的本意是将代码包含在容器内制作成镜像形成“产品”。但出于公司的(频繁修改代码及服务器资源受限)的特殊性,我们将代码以“外挂”的形式运行在宿主机上。下面以部署官网(apache)服务为例: 1 U2 d# X# g) N0 S$ U" j; r5 P
1.从docker的公有库里下载centos7的原生镜像
: l0 R0 o0 k9 [- N+ o
7 a5 r0 A5 Y/ a, A3 M) N[centos-master]:docker pull centos
5 N2 _/ _# r1 A; h/ u+ Q. N
' E  T, _- B- \0 `7 z3 ], sUsing default tag: latest
: L& u/ A" ^2 \Trying to pull repository docker.io/library/centos ...
" N  n; F* w. e# V% _' flatest: Pulling from docker.io/library/centos6 r% l% S# ^0 }5 d. P# V8 L( x. J
d9aaf4d82f24: Downloading [>              ]   540 kB/73.39 MB
) R6 U2 S0 X- h! A  ^d9aaf4d82f24: Pulling fs layer
* A5 F: B( O4 H6 J8 CDigest: sha256:eba772bac22c86d7d6e72421b4700c3f894ab6e35475a34014ff8de74c10872e
+ X7 d; d' x3 zStatus: Downloaded newer image for centos:latest+ r; U( t/ G# Q

' {! S* M% }8 o  k: `% X! I2.编写Dockerfile制造apache基础镜像3 l: `  X8 C' q! ^4 R
: z) z. ^, F) n% ~
######httpd####6 D$ u! U+ O( |0 ~, D
FROM centos1 a% F6 r" }, ]0 o- ~5 S- l
MAINTAINER lienhua lienhua@zhongchuangsanyou.com- m. f! w5 Q6 o9 t
RUN yum -y install epel-release
& r9 m( M3 ~, B; i' ]( zRUN yum -y install httpd  php php-mysql php-memcache* php-mbstring4 Z# h3 X1 u% ~9 J0 F2 U- @. j# D% i
ADD httpd.conf /etc/httpd/conf/httpd.conf$ s  G8 e. h; D. F
0 b1 m. @" H) l7 G" `5 f( x
EXPOSE 80
% y% l* \7 ~$ ~7 C  }. Y6 k" l* [& U8 [5 l
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]! G7 x. ]: t5 h+ O# |8 q
7 T- C& f6 H  a# w5 z
其中httpd.conf文件需要在当前目录下真实存在,此处其内容为# h* d: m; e3 W9 P! o% |

. e5 @2 L8 H% F/ @) U& {ServerRoot "/etc/httpd"
3 u% i. u, t+ V% ZListen 801 m+ h' y9 k7 L" y) n
Listen 8080  A' v6 i  e4 v# P+ g3 a& K
Include conf.modules.d/*.conf, |8 s  X3 O) o/ l
Include zcsy/*.conf9 E' m: e3 `. I) n9 @
User apache
: |# ^- r& E5 r; S& ?0 p3 GGroup apache# G- D3 `% o# Z& e  D- ?
ServerAdmin root@localhost( }& M* D. Y) d/ Z  O! M
<Directory />
; t8 z8 v: N: P" O& H    AllowOverride none; a2 g4 J- q9 F; B( d4 V# h$ o( ^. v
    Require all denied: G6 ]5 g, K7 s; ?2 s
</Directory>
" b: c! N% Z9 `- z, L2 t/ qDocumentRoot "/var/www/html"" C! _" O7 p' O# G* F8 E
<Directory "/var/www">6 V3 s8 A( G  N/ v
    AllowOverride None
9 s7 v+ }" I$ y! }3 g' I0 `& j* u9 r    Require all granted% q3 l& B+ @2 P4 h* W" K# b
</Directory>& A' G! S2 \/ E5 d2 q
<Directory "/var/www/html">
& B2 s' \$ s5 |2 e; b/ D2 u, q    Options Indexes FollowSymLinks1 ]' R: @; Q) j: E- k7 y9 j
    AllowOverride None5 r; N' h& r. f1 o3 T' o. |
    Require all granted
: C+ n, }5 M) J+ K</Directory>
5 n& E6 U; o* `% b8 e<IfModule dir_module>: R4 K- B, f6 Y2 G! f
    DirectoryIndex index.html# g2 g- z! c5 k( A; E% W7 P0 E
</IfModule>6 b2 y) ]5 w7 G0 a- {3 b- ~
<Files ".ht*">; D( _5 O+ K) I# o( Q% p
    Require all denied% W4 }3 P9 e1 ~0 f4 p8 n
</Files>. G8 X3 a7 H5 c8 T! \1 l& l6 s
ErrorLog "logs/error_log"; @" w& X" D, v: t0 D: @1 H
LogLevel warn; s& v2 N- s3 F/ {
<IfModule log_config_module>
5 X- h- o$ L% K! A' I+ B; a    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined6 t& D4 X+ a1 k, I% `
    LogFormat "%h %l %u %t \"%r\" %>s %b" common) t' r7 C. P9 j1 Y  d6 F# B0 w
    <IfModule logio_module>
, F4 U4 s( Y( _& s9 p/ t      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio4 L/ B5 {2 N1 |. G
    </IfModule>
' T7 r+ l8 e# E& }0 J    CustomLog "logs/access_log" combined
1 @  Q0 M+ f& C6 M- y7 y; i$ h</IfModule>
+ |* _% N% k& u) x<IfModule alias_module>2 d/ B, ?& X" }0 R9 _4 m1 Q
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
3 H7 |9 l, t0 \) }</IfModule>2 }" O( }4 ?/ V( l' d
<Directory "/var/www/cgi-bin">: _' T1 G! c1 t* r5 g
    AllowOverride None# f( |0 Z# T/ L" O/ ^* H) h
    Options None, @, E" X7 |" |" ]
    Require all granted0 x9 S# d0 d: w: F  Y, K; h% |
</Directory>6 d: s2 _+ Q& g
<IfModule mime_module>5 [/ g0 e5 v. K
    TypesConfig /etc/mime.types3 y6 h  Y# p& \' U' h! ^* x- F
    AddType application/x-compress .Z
* Z+ J) z7 r4 O8 f% P) o    AddType application/x-gzip .gz .tgz
* h; _8 d, W5 d) a0 f6 G' `3 n    AddType application/x-httpd-php .php
# j, ]4 f/ q; i6 h! s    AddType text/html .shtml; F5 [) l* I& P; w! S3 w6 ]: Q
    AddOutputFilter INCLUDES .shtml  ?0 W6 l9 w! M5 K& l& a8 V' D# A
</IfModule>
6 E! v& [% p3 R: a/ g; m% QAddDefaultCharset UTF-84 t* m6 i$ h% x
<IfModule mime_magic_module>$ w" P. _) `* W0 R. E, x
    MIMEMagicFile conf/magic
3 V( a  `6 ^& u5 |' }4 o7 m</IfModule>
; n# @0 X! d3 qEnableSendfile off4 R% n" W, ?. H: V
EnableMMAP off
0 s+ }9 s: B1 g- f# W2 c( \IncludeOptional conf.d/*.conf
- o+ }- z5 Z* \" g" i7 [3 s- P
- t# `9 Y5 e, o( Z. B! n' b, A执行[centos-master]:docker build -t registry.evehicle.cn/httpd . 命令制作名为”registry.evehicle.cn/httpd”的镜像(注意此处的点必须要有,并且其意义代表当前目录下的Dockerfile文件)
7 D6 m8 z+ L" Y/ i+ q' L! M; r" n" I1 y# a! L
3.将制作好的镜像上传到私有库2 i0 b- a* E* u0 p3 ~

2 c' C! @3 |$ e/ L7 b2 Odocker push registry.evehicle.cn/httpd+ f) Z3 k& {4 F: P
0 ]; ^4 h0 h. M4 {5 _3 D% s
4.编写启动apache服务的yaml文件
: v; O- J; w  ^+ s0 c$ j( `1 |* k
[centos-master]:cat 13-rc-httpd.yaml9 ]0 U5 \& x& y0 z
, Z+ V2 ]' [; I- `& p
apiVersion: v1
% I2 B( r% G  x0 M8 N$ Y" |$ Tkind: ReplicationController: V0 A9 O: M9 h& s4 u# V" l
metadata:
/ g0 K' d) q0 `* L4 L2 Y4 l9 B# S  name: 13-rc-httpd
0 K' G  Y7 T0 l1 r  labels:5 b; w! Q9 E) u3 U
    name: 13-rc-httpd; z' p7 b9 h( S, K/ I
spec:
: e  B; _/ H% B/ }, V  replicas: 2
+ q7 N& j, T* x4 q$ G8 B* L  selector:
6 L1 i* ]8 N! k9 V' h8 V    name: 13-rc-httpd3 d) J- C# W, [) n$ U
  template:
  m/ |9 I  R/ D' ~: [    metadata:
3 z! l* E4 ~0 O1 O0 `      labels:
' L6 x" t+ H) \        name: 13-rc-httpd# S$ \$ H7 v1 [1 ~. O) A( ^5 x
    spec:
, v+ N/ R  `& Z; k% J3 o      containers:3 k& \8 M( `7 L& c* C! F. L: x
      - name: 13-rc-httpd" j% P* \2 r! O# a$ K  \5 W' w
        image: registry.evehicle.cn/httpd; o3 }: _; e7 U9 V& z9 W1 I( Z
        env:9 x* |) r! S, {8 A/ Y: f+ o
        - name: LANG2 n% G5 P7 Y8 B. [/ n7 w
          value: en_US.UTF-8- h; R+ Z$ d' l
        ports:
: G$ K1 \+ v( H4 k) Y        - containerPort: 80% O* b0 C9 H; Y
          hostPort: 80
  R& C' ?0 A4 Z, q2 n9 w" m- O9 c# A        volumeMounts:
( E" N8 R/ y9 Z6 Z6 m        - name: time' P9 A$ T4 I- M; M1 r: l
          mountPath: /etc/localtime
/ y9 C* i7 \$ L" g/ O        - name: zcsy
/ f$ [7 ]' a+ A6 n          mountPath: /etc/httpd/zcsy
% J: K$ E; Y0 b/ _7 k% z; u, C        - name: deploy
0 F* x( A0 b! h1 j5 f          mountPath: /docker/httpd/deploy
% B7 T9 E+ N  n. }7 a        - name: log
6 ?+ L2 L7 |$ y- q: ~0 t; I          mountPath: /var/log/httpd$ i( L! o+ }/ v) X: i1 H3 G
      volumes:
* T* E- ^: W( d3 }9 Q2 P        - name: time; B1 e: n, D. Q- k- }$ D1 M
          hostPath:/ k! d5 u% G' S
            path: /etc/localtime6 c. ]4 Y  I0 `  o
        - name: zcsy" b0 F5 q8 E/ F, E* G$ ~; Q1 u* M8 w, F; `
          hostPath:& i' T! `- @" l/ A6 Q# _8 u
            path: /docker/httpd/zcsy  w1 R$ i2 W+ J& E
        - name: deploy
- V) \% _8 o" ?# a' w          hostPath:' k- i: t6 h* P& R) g9 c( m8 P
            path: /docker/httpd/deploy/ h2 E& R6 _& ]. U5 p
        - name: log$ H4 o9 ]% e" _3 @! F
          hostPath:
8 ~/ p7 K, N* y/ V/ N8 V( k            path: /docker/httpd/log
2 g3 q* r/ U2 z) F* L" i3 G) z- [      nodeSelector:0 S) i  u( E# u) o) j
        slave: "13"
3 G7 N1 Q; D. A3 I- o      imagePullSecrets:
4 z7 A" Q6 J; p1 p      - name: registrykey  P3 G/ n2 W" J  T* I

" d0 c. ^* c2 |' g- g1 z9 K4 t0 G9 |5.给其中一个node加上标签为“13”
% h5 p. d! g3 ?9 T8 M  T  k* ]3 H$ i# H
kubectl label nodes centos-minion-1 slave=131 n6 k0 `- |) r

- k& [$ W; P6 j0 g6.此时拥有标签“13”的nodes应具备的条件
' ]+ i9 ?8 A) n* R" g
9 l7 X: ^5 @7 _/docker/httpd/zcsy下需要有官网的配置文件
' i/ w" H- X; R; i  H* o/ P
; E6 v' z% Q1 x<VirtualHost *:80>& e& ?4 }" ?2 C( P' `3 |
   ServerName www.evehicle.cn5 i! i$ h' m4 G3 ~6 P9 o
  DocumentRoot /var/deploy/wordpress/0 [9 F- t9 ]6 t; T2 ?( Y
        RewriteEngine on
7 a( z: Y2 w0 Y% F9 ~        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
" ~+ ]: j" ?3 h! W        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
; `; ]5 P/ X2 E% Z        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)$# w5 H5 w8 @! n/ R0 h
        RewriteCond %{REQUEST_URI} !^/server-status$: ?5 ]/ q9 C2 c, u' C
        RewriteRule . /index.php [QSA,PT,L]
4 t2 Y+ a% K& _) R' N
; N/ n" f! T, w% s# V2 @. L</VirtualHost>' S- U3 o. P9 {, [* T; \
<Directory /var/deploy/wordpress/>& F  [9 |  R& X2 o5 \% {" i1 a
    Options FollowSymLinks
7 u( l& `+ L) M8 I- g    AllowOverride All
3 c( y+ X1 j. |3 S- Y9 w    Require all granted0 W) Z* D% s! T3 w- N% l
</Directory>3 T0 @' @& \* T, Z( [
6 t% {1 q7 q* F1 f7 b- ~' X
以及/docker/httpd/deploy下需要有官网的代码5 z5 j# v0 ~+ d* J$ P# P5 T# C

! O  p( k- F* J; n7.运行yaml文件启动容器
! P( H7 m0 x0 v) w9 ^; O# Y; f( i+ X: R" P
[centos-master]: kuberctl create -f 13-rc-httpd.yaml, `  V- {: M5 N- h
7 Z  c- D$ N2 L1 n) F, v
8.查看服务3 ]. L3 t# ]+ n* q
( \  H2 S/ c6 K& C* G
[centos-master]: kuberctl get rc
' U- e8 Y$ B9 C2 ]/ T1 c# _1 E! h
0 B, y9 ^% W0 L" z/ Q  dNAME                 DESIRED   CURRENT   AGE' x8 V2 V0 m8 W$ D  o+ N! T' ?
13-rc-httpd          2         2         168d; g, D7 d$ g8 N( U; l3 g: H

5 {" T  j. o, z8 k) E) a- a9.程序中涉及的mysql\redis\memcache等服务也需使用容器运行起来
, X% a+ \9 a+ ?/ J2 Z! I3 P; T9 _0 @2 k3 e2 y4 v( ^$ r1 S) W
[centos-master]: docker pull redis 0 c3 d7 L& H# E! {$ j, S& Q
[centos-master]: docker tag registry.evehicle.cn/redis redis & n: ]; D3 }& `7 U( y# l
[centos-master]: docker push registry.evehicle.cn/redis 3 T4 f6 \, H; y% s* s$ L2 c
[centos-master]: kubectl create -f rc-redis.yaml
- o- a& G/ b: q( G  G2 f[centos-master]: cat rc-redis.yaml& {" ?! \/ \$ m* ?) Y% {8 t
) ?( E$ T2 H9 G9 y& }
apiVersion: v1* q' z) r0 I# l* {$ v; a
kind: ReplicationController
8 m+ i5 x+ f+ l9 R/ ametadata:
6 i) O. C( {: Q# c! y  name: redis
, a% c/ [" K, q, T  labels:
5 L- T- C& O2 W- k* R% t    name: redis
: S8 l  `) B* G1 D# Bspec:
& n5 T! \! D$ B. v- M2 U( }  replicas: 2
/ R: O9 t( S) Y# c8 P% a3 H  selector:
; P! {9 s$ ?+ O9 I/ z    name: redis
; J' ^% J) B0 A9 v2 w  template:
0 k5 B! S) n+ @% J* D    metadata:
" ^* q# Y. n( _' S( a      labels:
6 u' q4 ~& H1 z* l. ?        name: redis
/ v) n" D, d7 l    spec:
% ]% H. [. ~) Q) a* F      containers:
8 D) T3 f% ]5 T7 Q6 a# i: U/ N* }      - name: redis9 V7 A/ X) P0 ~2 b
        image: registry.evehicle.cn/redis* n/ V. S% w# Q4 P8 S3 b
        ports:
+ y" k0 M# n9 f( g        - containerPort: 63798 c  j9 x) p- P* O
          hostPort: 6379
% V1 G) r! \/ Z        volumeMounts:
# c  b* X, I: C* g( |$ N        - name: data7 B: H- L$ s  E8 m
          mountPath: /data8 a% W, u' i  z
        - name: time
+ |$ B3 {# L9 _' R1 P' k" |. z- E          mountPath: /etc/localtime
+ N9 `0 |) g; Q2 x( I( `      volumes:
3 x& b. f4 ]5 m9 W        - name: data) F' f9 R( I0 ?
          hostPath:
- {- }+ \8 }, Z7 j* \            path: /docker/redis/6379; @# Q0 G& e% J
        - name: time. h1 e( M  l- R7 y
          hostPath:
( z2 W& Q8 f& {7 L            path: /etc/localtime
" E% y8 R5 `, N) F% e/ v      nodeSelector:4 S8 o3 j4 M+ b2 ^
        slave: "13"$ _" `! D4 Y9 K$ ?8 Q6 @6 y' d
      imagePullSecrets:
9 r2 x8 W) S( W      - name: registrykey
; t0 w$ I1 t/ \* m. T* ~9 X
% M) _; K2 V( [启动memcache
( _; h  [  Z$ c5 ^; x2 O[centos-master]: docker pull memcache
* ~7 W* f: y: |. i' V% t, H. U[centos-master]: docker tag registry.evehicle.cn/memcached memcache
- W! X- |  }$ `& G4 E[centos-master]: docker push registry.evehicle.cn/memcached 5 ^+ e3 w* I' e2 h& D) b
[centos-master]: kubectl create -f rc-memcached.yaml 6 v1 X: X" K& p2 F) ~, d
[centos-master]: cat rc-memcached.yaml. ?7 S+ z8 {+ v# E; b8 E9 [  `

3 z+ F5 o( ~9 W5 KapiVersion: v1
$ v1 G+ v. c6 m2 P) H- H! [6 y3 ekind: ReplicationController
  t; p, Z4 l. |metadata:
5 O; d  U0 }4 [" ~  name: memcached
$ G, C" L6 ]  E5 }: C* F  labels:
2 Z. ~2 V) }: R+ u+ x5 S    name: memcached
% q" w& |6 o+ G0 r3 pspec:
; W" o$ Y- ?0 G6 o/ _  replicas: 3/ ~( n. i6 o* k. B+ Q$ ~: z9 A1 a' K
  selector:5 [8 ]: |# {1 R
    name: memcached, ?  Q8 D$ G! I9 B6 A3 h
  template:
" V. i1 @; U/ l9 x& e& b7 L3 U2 a    metadata:
% ~8 [/ o: k+ Y: x- y      labels:* R+ W+ t; x+ D- K. i+ j" ]% D! }
        name: memcached. u0 h/ E/ U* N" N6 L
    spec:
( y; A! q) c5 c) P$ p2 f      containers:8 i* I) l9 [6 U2 {3 k
      - name: memcached$ e: E# Y. i8 D  i
        image: registry.evehicle.cn/memcached" T; j2 N$ p8 N5 M
        ports:) z+ `0 ~+ _; t5 p- j" @
        - containerPort: 112112 r3 {+ k# q5 [$ [* _4 r/ Q
          hostPort: 11211/ U) F: K8 ~+ ]* `
      #nodeSelector:+ V! w+ C" A. G% G( B
      #  slave: "13"
+ v" W% I7 Z  H8 c( l8 I      imagePullSecrets:& r# n" k4 B" m5 y1 r
      - name: registrykey( R; c5 P5 H  N6 M
; }5 f/ z; j% D* E. b& y  X
制造mysql镜像 " z$ U. `, p- K, h0 ^% W) R
[centos-master]: cat Dockerfile
/ \% }/ x) O  _9 R
5 q2 N  [( \6 KFROM alpine
% P- y3 I& z5 P3 i+ X4 o: w5 q& ~
# H# o, h( H: M- L3 z) S
2 X$ v; V% A! {; B0 ?7 \0 p3 i9 FCOPY startup.sh /startup.sh2 K! ?) B2 N$ R
RUN addgroup mysql && \
, b" w: \7 p$ O& D1 f    adduser -H -D -s /bin/false -G mysql mysql && \
: b& ^# c$ M! [+ J/ e    apk add --update mysql mysql-client && rm -f /var/cache/apk/* && \
% I3 e1 r! M3 x    mkdir /data && \
: o1 b8 h% k2 d% x    chown -R mysql:mysql /data /etc/mysql && \* H( O1 W- b; _( q$ M9 r
    chmod 755 /startup.sh \
# v& h# R! L3 A. L+ |( l    ;- g0 H2 j1 W1 i" r1 l8 Y* u
  v2 O5 Z/ G0 Q" `8 x
$ i! F  P' G0 h5 p
WORKDIR /data
. I$ O' k, {+ x4 o5 V1 `& mVOLUME /data
1 |3 U% L! P0 LVOLUME /etc/mysql2 T0 s- b- D% k/ n8 g1 h

( Y' ]$ S$ G1 ]8 Y5 w; ~% o5 Y3 D7 i
EXPOSE 3306" z8 |9 _$ V4 T6 p
CMD ["/startup.sh"]
7 _  v0 i( n8 M2 T. s6 G0 ~. J3 E* S) B5 K3 D; y5 u* f9 h# e
启动mysql(建议mysql在宿主机启动) - z; S" J9 m+ q  h, x: x+ \9 ~& Q
[centos-master]: docker build -t registry.evehicle.cn/mysql
7 U$ I' L8 }) ]6 t% e[centos-master]: docker push registry.evehicle.cn/mysql
6 W3 l  ^- O" o1 t* @[centos-master]: kubectl create -f rc-mysql.yaml 6 q: \9 V8 |  f% Z  _# R- b
[centos-master]: cat rc-mysql.yaml
( A4 ^) Q& A; Q  P1 Q! N  A, f: l0 F. z9 I
apiVersion: v14 `. n! ^: a6 U7 x9 r
kind: ReplicationController
+ W. L( D3 ?+ Ometadata:9 }& ]8 Y3 u5 C# t# r9 @1 Q
  name: 13-rc-mysql
  L0 o4 t! O$ g- Y4 @1 _4 c" t# i. I  labels:
0 m, Q# j. n5 Z1 i- |5 ^9 ^4 D6 r    name: 13-rc-mysql
( J( c& R: @, Dspec:# M9 F$ C1 Y9 z3 A; P4 a
  replicas: 2
- Y  \6 `& r( Q3 T- |1 e. v  selector:( Z3 s  l) L5 M
    name: 13-rc-mysql) m/ [- L. k2 U6 h
  template:/ ], V& M1 }. L8 [+ l& Z, `4 i
    metadata:
4 T  d' a# J- U2 I) e) \6 c9 ]      labels:$ L# g+ d6 T/ i' @1 H
        name: 13-rc-mysql* V6 L& \  o6 P# Z2 g
    spec:* w6 O& W6 N$ \7 P+ O9 X/ J
      containers:
  U6 U7 C- [: S. Z7 o0 q      - name: 13-rc-mysql
( K& X( R' @* W% Q# j/ o        image: registry.evehicle.cn/mysql
% }, p) I% F& Q/ e- v5 F5 r        env:
  D/ t9 u) A1 W( w4 g/ g3 }' Z/ r        - name: MYSQL_DATABASE
8 H5 o( N; ]7 M1 t& B  m+ A, Z          value: admin
6 o4 o8 ?1 F+ u4 j7 k        - name: MYSQL_USER
. `7 E2 ?) F* |' y5 L" p. [          value: tony2 V3 }- S( e; w4 J. v2 l& M- ?' O
        - name: MYSQL_PASSWORD8 {8 T. }- Z6 A! X5 r# ]) |0 f
          value: 456
6 U+ n9 h2 E! _! q8 v! b        - name: MYSQL_ROOT_PASSWORD
( G; n+ Z9 I. o0 X9 r4 x          value: 123
, r3 h2 f' d. E  W9 F6 j9 w        ports:
  C8 a/ s7 I: O4 n# V8 S        - containerPort: 3306
% _4 k) S5 d( g% Y9 Q6 M$ s          hostPort: 3306
& n7 E1 q. i# t) p        volumeMounts:' e; F5 _0 d: n4 T
        - name: time
- K7 z" {8 C- m9 w% ~' O; ]          mountPath: /etc/localtime- G" y. x5 j1 |8 f' x) a
        - name: data& ~$ `; `/ }6 {1 s5 h. q$ i
          mountPath: /data9 E* [& M% v9 r( U6 d) Y5 |+ ]
        - name: etc+ }' U3 Z" P: `" s3 i$ X; K
          mountPath: /etc/mysql
! a- y3 j1 |* V" ~- J        - name: run
' j$ h, \# o4 }          mountPath: /run/mysqld
0 H7 w. L# M9 w7 k      volumes:
9 O$ V+ w0 |% F3 P2 T5 X        - name: time& k& s# K, Q9 |4 G
          hostPath:
" ?- X7 n4 P" O- m( U: w# K            path: /etc/localtime( K, Y; [, l3 Z8 p
        - name: data
, h% i# R0 Y) u7 i8 i! S          hostPath:+ Q) {$ M; S; u% K1 b% |3 A2 r" h
            path: /docker/mysql/data- l$ `+ h- S2 C
        - name: etc
, S! ^, B/ B: F0 V          hostPath:
* k: p9 Y" L; K4 t0 Y            path: /docker/mysql/etc
8 f3 U. S" \, F. j5 \        - name: run
' N  l9 ~5 h9 ^4 l          hostPath:" P0 O* E8 B# O. B2 y
            path: /docker/mysql/run
- t" F- M+ P" w0 D$ g8 }      nodeSelector:
2 b* \& T1 ?# C# W6 A1 c( Y% O        slave: "13"7 A" I' ~  d; _$ z1 P
      imagePullSecrets:
3 D9 Q: M, {, ]      - name: registrykey4 V7 H8 y! C+ ?2 u. d! [7 }
# @) p1 @  w# _5 J: \2 H7 I, X
为方便代码编写及统一管理,应提前做好内部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
5 u4 g( U( F& W4 n1 I) c9 ~  W. Ykubectl config set-context default-context --cluster=default-cluster --user=default-admin, G) _& z' X8 H+ e5 f9 b' }6 O0 F
kubectl config use-context default-context

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2018-9-20 21:31:29 | 显示全部楼层
搭建私有库
; P+ P0 Z' ~. _8 l- |2 T  ^0 H  i. Z7 v* e; G+ @; }' q' M
私有库用于系统内部存储成品镜像,能够快速进行下载及被k8s调度。) s/ ^! C/ b  S! ~! M4 t+ t
( d( E3 r. G5 n5 u
1.下载并启动私有库
/ Y7 u0 Y$ q3 ^4 g& E' w5 G& r4 R4 `/ y4 Y
[centos-master]:docker run --name registry -v /etc/localtime:/etc/localtime -v /opt/registry:/var/lib/registry -p 5000:5000 -itd docker.io/registry; [% l5 s- h2 Y5 s( {% R

6 g: b1 v' N0 s4 K* {  U#--name 表示启动的容器后名称,此处为registry" m& j" F" ?. D
#-v 表示挂载路径  格式为宿主机路径:容器内路径
& ?: L) K) y! X5 ~8 C2 I#-p 表示映射端口  格式为宿主机端口:容器内端口, `1 P9 c6 F6 e! b7 V! ~
#-itd   docker的内部参数,此处声明后台运行容器并分配一个伪终端并绑定到容器的标准输入上,后跟镜像名称此处为docker.io/registry. m, X, W& ^3 |

0 i1 w; N, J5 U, r2.创建一个secret服务,用于k8s调度私有库容器时的“令牌”。简单来说,secret服务就是一个存储密码的服务$ c4 B$ ^, f5 U
. m9 e. O' K3 H5 y1 r
[centos-master]:kubectl create secret docker-registry registrykey --docker-server=registry.evehicle.cn --docker-username=docker --docker-password=docker --docker-email=lienhua@zhongchuangsanyou.com) v4 F  v3 T# w( g0 b/ a) \0 {

& I# L6 o4 [9 {) p) ?[centos-master]:kubectl get secret/ Z% ]7 m6 d9 D( U' {. k2 v6 M7 K; n
NAME          TYPE                      DATA      AGE
0 S- k: [# r; Nregistrykey   kubernetes.io/dockercfg   1         6s
1 P" C- a1 m1 o0 `8 L5 `, L" }' ~( |& m5 P$ E/ G" }$ E! R
此时登录时会提示认证错误
" b8 V0 M& n! J; d7 x& m) e) v* z- W: V6 v) Z
[centos-master]:docker login -u docker -p docker -e lienhua@zhongchuangsanyou.com registry.evehicle.cn
& a" s9 Q/ q  XFlag --email has been deprecated, will be removed in 1.13.& n' v4 b( n7 |% x  k
Error response from daemon: login attempt to https://registry.evehicle.cn/v2/ failed with status: 401 Unauthorized
, l2 L  L. G2 Y" C- a* m8 y/ L) Q; g
5 [( A/ e9 `+ G& Q9 V' W- s( l这是因为Docker官方是推荐采用Secure Registry的工作模式的,即transport采用tls。这样我们就需要为Registry配置tls所需的key和crt文件了
$ n0 o/ j6 ~* |& }0 P* ^
$ G0 U1 k/ x$ g. @, R2 c% G! ~3.配置nginx反向代理
6 m0 t% I  E6 C; b[centos-master]: cat registry.evehicle.cn.conf( A- k; a8 k- @5 ~. c$ w5 |
0 k# l9 O6 z5 W6 W9 `
# For versions of nginx > 1.3.9 that include chunked transfer encoding support
8 f/ m6 G9 L7 B/ }8 I# Replace with appropriate values where necessary- e6 H* o6 b2 }$ `

; w- B0 a6 {* p( V7 ~upstream docker-registry {3 R4 J' q. J/ q  I( X% g  _
  server 192.168.121.9:5000;( \+ S6 _( x- z: g, W, u
  #server 10.44.170.95:5000;: a% A$ N/ E2 n6 B( ~/ A
}
7 G- c( P7 T5 ?4 S, y1 y; q  V; \. b7 T" n
# uncomment if you want a 301 redirect for users attempting to connect
( K& y8 L' Y! C; y0 B8 v# on port 80
4 y& L4 c# V5 x4 m1 [# NOTE: docker client will still fail. This is just for convenience
4 b2 U, x9 T7 ~8 C# server {
( u; e1 J) P2 ?8 V#   listen *:80;# \% e8 i/ d0 {, ?3 b
#   server_name my.docker.registry.com;
% Q) N, S2 `# j  I+ z2 M#   return 301 https://$server_name$request_uri;
: ?6 v8 d5 y( D# U9 @% J# }/ S" `) C: Y5 I' c
' w  @5 l2 t  h3 x
server {
- H! z& B# K' v0 F/ O    listen 443;6 T( x; A+ P! W. _. U  g! i
    server_name registry.evehicle.cn;
+ f4 i# Z& \% A) ]% n  a, v/ N3 \) q
    ssl on;  G0 k6 i9 ]6 `( |& A3 I, I
    ssl_certificate ssl/registry.evehicle.cn.crt;7 r' a# Y: b& g0 X) B8 R
    ssl_certificate_key ssl/registry.evehicle.cn.key;- ~; }5 O! `4 ^6 a# W4 P$ a
5 I% S% k4 B+ D' f$ o
    client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads3 K, P9 N: L( V- w# j$ j
3 [& i0 |  N$ N8 h+ s# J( y
    # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486): \3 d  m2 y0 a( M! k& N6 Z! K
    chunked_transfer_encoding on;
2 l, C& j2 f7 L1 y" z# H% r: ]$ }; w* {. }
    location / {& _8 p- f3 d1 ^: m. I
        auth_basic  "Restricted";
; |& I1 a) \2 I) [8 D. m* g+ C        auth_basic_user_file  passwd;9 W7 h1 P; N# Y8 p
        add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;6 ~1 P& v4 W5 m/ |8 E' [6 e2 T
5 R/ l* R' G" N- C! ]2 }
        proxy_pass                          http://docker-registry;/ U! e3 q% N, }0 X" q
        proxy_set_header  Host              $http_host;   # required for docker client's sake
+ U& D9 C1 i/ r, A8 E% \        proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
4 Y! ]' I( w/ F& A" _: u8 ^" l        proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;1 i, H: p+ w6 l' I  S! y( V4 D$ j& b* F
        proxy_set_header  X-Forwarded-Proto $scheme;
5 j5 K5 s% a, v        proxy_read_timeout                  900;, @3 d6 M: J, o) `, F' l: Y
        }0 G; [7 y$ U6 ?* r4 |

1 h* J* {' O! D6 _6 |    location /_ping {
1 n2 p4 c; f* y' T: a# c6 U        auth_basic off;9 j4 J( t  I& p; e( P  @1 g. S4 _! j; |: r
        include               docker-registry.conf;% }! C7 ]! s' m9 K3 l5 }( Q
    }6 k: E8 k* m+ b2 r9 u6 Y

; I2 b+ M9 }* C( `    location /v1/_ping {
6 \. [+ W& F( H/ G8 F  Z- o        auth_basic off;/ b, H) v  c. G# U
        include               docker-registry.conf;
% b) {6 ]3 G% `0 W8 B    }
2 x) w7 Q" O4 p+ |0 I# E
( `  f5 q( i1 R    location /v2/_ping {: [8 [, z0 q& D
        auth_basic off;* n! W' v1 E5 J" U6 M
        include               docker-registry.conf;8 z% [6 t' K; C/ D
    }
. c* `3 Y* x; x: A( J}* h0 h8 C4 S# X( k& z  M  O
5 R1 \$ u* m4 C* _# {5 |
将key及crt证书文件放到../ssl目录下。使用htpasswd生成密码放于./上一级目录% h+ V$ R4 s! s
) ^) Z) j. ?7 v, H0 v. n! G& Q
htpasswd -bcm passwd docker docker
2 j& Y7 F! I5 a/ c/ I #-c:创建一个加密文件+ a" U" s  w6 f' p  H: ^( v
#-m:md5加密,默认可不填写9 ]/ Z1 Z  e! R
#-b:表示用户名密码在命令行中一并输入,不用分别填写3 L7 K% ?6 H! X/ {) g( Y3 v

* x. w3 v* p+ W/ e- `% \4 W" Q4.再次登录& Z' w: V" `. W8 L/ J7 m; ?$ C
- P$ Q2 l, w2 R% G2 z6 }- ?
[centos-master]:docker login -u docker -p docker -e lienhua@zhongchuangsanyou.com registry.evehicle.cn( M0 c! e. k: f+ t

8 w- P3 y+ H& Z0 m0 }9 MLogin Succeeded* @1 p1 S8 K, S
表示成功,此时再pull\push既在私有库中进行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 00:25 , Processed in 0.023671 second(s), 21 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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