# 命令会返回当前kubernetes 已经创建的pods列表,主要会显示以下信息
# NAME READY STATUS RESTARTS AGE
$ kubectl get pod
# NAME READY STATUS RESTARTS AGE
# etcd-global-9002d 1/1 Running 0 2d
# etcd-global-l3ph8 1/1 Running 0 2d
# etcd-global-psj52 1/1 Running 0 2d
查看pod详细信息
# 使用pod名称查看pod的详细信息, 主要是容器的详细信息
$ kubectl describe pod etcd-global-9002d
$ go get github.com/youtube/vitess/go/cmd/vtctlclient
该命令会在$GOPATH/src/github.com/youtube/vitess/目录下下载并且编译vtctlclient源码, 同时也会把编译好的vtctlclient二进制文件拷贝到目录$GOPATH/bin下。
本地kubectl
如果正常按照文档说明安装,本地`kubectl`就应该已经安装完成,这里我们需要再次校验一下,确保`kubectl`处于正常可用状态。
检查`kubectl`是否已经正常安装并设置环境变量PATH:
``` sh
$ which kubectl
### example output:
# /usr/local/bin/kubectl
```
如果kubectl没有包含在$PATH环境变量中, 就需要设置`KUBECTL`环境变量,否则执行启动脚本的时候无法获取`kubectl`位置。
``` sh
$ export KUBECTL=/export/working/bin/kubectl
```
启动Vitess集群
1. 跳转到本地Vitess源代码目录
经过上面的步骤后,我们就可以尝试着运行Vitess官方提供的实例了, 切换到$GOPATH/src/github.com/youtube/vitess/examples/kubernetes目录下:
``` sh
$ cd $GOPATH/src/github.com/youtube/vitess/examples/kubernetes
```
vitess/examples/kubernetes$ ./configure.sh
### example output:
# Vitess Docker image (leave empty for default) []:
# Backup Storage (file, gcs) [gcs]: file
# Root directory for backups (usually an NFS mount): /backup
# NOTE: You must add your NFS mount to the vtctld-controller-template
# and vttablet-pod-template as described in the Kubernetes docs:
# http://kubernetes.io/v1.0/docs/user-guide/volumes.html#nfs
注意: 对于使用file方式备份的我们需要在vttablet和vtctld pod中安装一个读写网络卷, 可以通过NFS(Network File System)将任何存 储服务mount到Kubernetes中;这样我们就可以很方便的备份了。
vitess/examples/kubernetes$ ./etcd-up.sh
### example output:
# Creating etcd service for global cell...
# service "etcd-global" created
# service "etcd-global-srv" created
# Creating etcd replicationcontroller for global cell...
# replicationcontroller "etcd-global" created
# ...
这条命令创建了两个集群, 一个是全局数据中心集群,另一个是本地数据中心集群。你可以通过运行以下命令来检查群集中pods的状态:
$ kubectl get pods
### example output:
# NAME READY STATUS RESTARTS AGE
# etcd-global-8oxzm 1/1 Running 0 1m
# etcd-global-hcxl6 1/1 Running 0 1m
# etcd-global-xupzu 1/1 Running 0 1m
# etcd-test-e2y6o 1/1 Running 0 1m
# etcd-test-m6wse 1/1 Running 0 1m
# etcd-test-qajdj 1/1 Running 0 1m
vitess/examples/kubernetes$ ./vttablet-up.sh
### example output:
# Creating test_keyspace.shard-0 pods in cell test...
# Creating pod for tablet test-0000000100...
# pod "vttablet-100" created
# Creating pod for tablet test-0000000101...
# pod "vttablet-101" created
# Creating pod for tablet test-0000000102...
# pod "vttablet-102" created
# Creating pod for tablet test-0000000103...
# pod "vttablet-103" created
# Creating pod for tablet test-0000000104...
# pod "vttablet-104" created
启动后在vtctld Web管理界面中很快就会看到一个名为test_keyspace的keyspace,其中有一个名为0的分片。点击分片名称可以查看 tablets列表。当5个tablets全部显示在分片状态页面上,就可以继续下一步操作。注意,当前状态tablets不健康是正常的,因为在tablets上面还没有初始化数据库。
tablets第一次创建的时候, 如果pod对应的node上尚未下载对应的Vitess镜像文件,那么创建就需要花费较多的时间。同样也可以通过命令行使用kvtctl.sh查看tablets的状态。
vitess/examples/kubernetes$ ./kvtctl.sh InitShardMaster -force test_keyspace/0 test-0000000100
### example output:
# master-elect tablet test-0000000100 is not the shard master, proceeding anyway as -force was used
# master-elect tablet test-0000000100 is not a master in the shard, proceeding anyway as -force was used
注意: 因为分片是第一次启动, tablets还没有准备做任何复制操作, 也不存在master。如果分片不是一个全新的分片,InitShardMaster命令增加-force标签可以绕过应用的完整性检查。
tablets更新完成后,你可以看到一个 master, 多个 replica 和 rdonly tablets:
# Make sure to run this from the examples/kubernetes dir, so it finds the file.
vitess/examples/kubernetes$ ./kvtctl.sh ApplySchema -sql "$(cat create_test_table.sql)" test_keyspace
创建表的SQL如下所示:
vitess/examples/kubernetes$ ./vtgate-up.sh
### example output:
# Creating vtgate service in cell test...
# service "vtgate-test" created
# Creating vtgate replicationcontroller in cell test...
# replicationcontroller "vtgate-test" created