Step 1:准备镜像
Dockerfile
wiki文档:使用Dockerfile构建镜像
详情可以参考下面的链接 Dockerfile官方创建文档
创建完镜像之后需要push到镜像仓库里,私用镜像仓库地址dockerhub.codoon.com
docker push dockerhub.codoon.com/yourname/yourimage
Step 2:创建pod
kubectl
kubectl是操作kubernetes的客户端工具,在任何一个节点都可以执行。更多信息参考kubectl命令详细用法
定义pod
最简单的pod
只包含一个container
。比如下面的pod.yaml文件定义了一个web server pod
apiVersion: v1
kind: Pod //类型为pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx //使用官方nginx镜像
ports:
- containerPort: 80 //端口为80
管理pod
创建一个包含nginx server的pod:
$kubectl create -f ./pod.yaml列出所有pods:
$kubectl get pods如果pod ip是能够访问的,应该能够curl
$ curl http://$(kubectl get pod nginx -o=template -t=)管理replicationController
官方推荐使用replicationController创建pod,即使只管理一个pod。repclicationController能够管理pods(一组相同labels的pod),当其中一个pod销毁或者迁移到其他
minion
时,replicationController能够自动恢复pod
replicationController.yaml:
apiVersion: v1kind: ReplicationController
metadata:
name: nginx-controller
spec:
replicas: 2
# selector identifies the set of Pods that this
# replication controller is responsible for managing
selector:
app: nginx
# podTemplate defines the 'cookie cutter' used for creating
# new pods when necessary
template:
metadata:
labels:
# Important: these labels need to match the selector above
# The api server enforces this constraint.
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
创建命令和创建pod命令一样 列出所有rc
$kubectl get rcStep 3:创建service
service是pod的抽象,当pod进行扩展的时候,pod的ip会产生变化,service提供了固定的ip地址提供访问
service.yaml:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
ports:
- port: 8000 # the port that this service should serve on
# the container on each pod to connect to, can be a name
# (e.g. 'www') or a number (e.g. 80)
targetPort: 80
protocol: TCP
# just like the selector in the replication controller,
# but this time it identifies the set of pods to load balance
# traffic to.
selector:
app: nginx
使用的命令和前面创建pod的命令一样,都是通过yaml文件创建
最后,获取服务的IP和端口进行访问
$ export SERVICE_IP=$(kubectl get service nginx-service -o=template -t=)
$ export SERVICE_PORT=$(kubectl get service nginx-service -o=template '-t=')
$ curl http://${SERVICE_IP}:${SERVICE_PORT}
Step 4:维护
现阶段的维护主要是使用kubectl这个命令客户端进行的
参考文档http://kubernetes.io/v1.0/docs/user-guide/kubectl/kubectl.html
扩容
// Scale replication controller named 'foo' to 3.
$ kubectl scale --replicas=3 replicationcontrollers foo
// If the replication controller named foo's current size is 2, scale foo to 3.
$ kubectl scale --current-replicas=2 --replicas=3 replicationcontrollers foo
停服
// Scale replication controller named 'foo' to zero
$ kubectl scale --replicas=3 replicationcontrollers foo
// stop service 'bar'
$ kubectl stop service bar
上线
-
手动(推荐)
推荐的方法是创建一个新的
replicationController
,但是只有1个replicas
,扩展新的rc的replicas
(+1),减少旧的rc的replicas
(-1),一个接一个,等旧rc的replicas
达到0时,就删除旧rc。这样的更新就是可控的。比如旧的rc:foo有10个副本,当我需要新上线新的rc: bar时
// Scale rc named ‘foo’ to nine and scale rc name ‘bar’ to 1 $ kubectl scale –replicas=9 rc foo & kubectl scale –replicas=1 rc bar
-
自动
使用rolling-update:每隔一段时间使用新的rc模版更新pod
参考文档: https://github.com/kubernetes/kubernetes/blob/master/docs/design/simple-rolling-update.md
// Update pods of frontend-v1 using new replication controller data in frontend-v2.json. $ kubectl rolling-update frontend-v1 -f frontend-v2.json
回滚
// Replace a pod using the data in pod.json.
$ kubectl replace -f ./pod.json