blob: dc8f760228fd30f0429e4b0e5ae4c0fea06dadce [file] [log] [blame] [view]
Integrate with Kubernetes
-------
A simple demo to deploy ServiceCenter Cluster in Kubernetes.
ServiceCenter supports two deploy modes: `Platform Registration` and `Client Side Registration`
## Requirements
1. There is a Kubernetes cluster.
1. Already install `kubectl` and `helm client` in your local machine.
1. (Optional) Already deploy helm tiller on Kubernetes.
## Platform Registration
The platform registration indicates that the ServiceCenter automatically accesses `kubernetes` cluster,
and micro-service instances can discover service and endpoints information through
the ServiceCenter.
Notes: After deployment, it only create ServiceCenter cluster in the `default` namespace.
#### Use Kubectl
You can use the command `kubectl apply` to deploy ServiceCenter cluster.
```bash
cd ${PROJECT_ROOT}/examples/infrastructures/k8s
kubectl apply -f <(helm template --name servicecomb --namespace default service-center/)
```
#### Use Helm Install
You can also use the helm commands to deploy ServiceCenter cluster if
you already deploy helm tiller.
```bash
cd ${PROJECT_ROOT}/examples/infrastructures/k8s
helm install --name servicecomb --namespace default service-center/
```
## Client Side Registration
The client-side registration representational ServiceCenter receives and
processes registration requests from micro-service instances and
stores instance information in `etcd`.
Notes: After deployment, it create ServiceCenter cluster and etcd cluster in the `default` namespace.
#### Use Kubectl
You can use the command `kubectl apply` to deploy ServiceCenter cluster.
```bash
cd ${PROJECT_ROOT}/examples/infrastructures/k8s
# install etcd cluster
kubectl apply -f <(helm template --name coreos --namespace default etcd/)
# install sc cluster
kubectl apply -f <(helm template --name servicecomb --namespace default \
--set sc.discovery.type="etcd" \
--set sc.discovery.clusters="http://coreos-etcd-client:2379" \
--set sc.registry.enabled=true \
--set sc.registry.type="etcd" \
service-center/)
```
#### Use Helm Install
You can also use the helm commands to deploy ServiceCenter cluster if
you already deploy helm tiller.
```bash
cd ${PROJECT_ROOT}/examples/infrastructures/k8s
# install etcd cluster
helm install --name coreos --namespace default etcd/
# install sc cluster
helm install --name servicecomb --namespace default \
--set sc.discovery.type="etcd" \
--set sc.discovery.clusters="http://coreos-etcd-client:2379" \
--set sc.registry.enabled=true \
--set sc.registry.type="etcd" \
service-center/
```
## Confirm the deploy is ok
By default, the ServiceCenter frontend use `NodePort` service type to deploy in Kubernetes.
1. You can execute the command `kubectl get pod`, to check all pods are running.
1. You can also point your browser to `http://${NODE}:30103` to view the dashboard of ServiceCenter.
1. (Recommended) You can use [`scctl`](/scctl) tool to list micro-service information.
```bash
# ./scctl get svc --addr http://servicecomb-service-center:30100 -owide
DOMAIN | NAME | APPID | VERSIONS | ENV | FRAMEWORK | ENDPOINTS | AGE
+---------+-------------------------------------+-------------------------+----------+-----+------------+--------------------------+-----+
default | servicecomb-service-center-frontend | service-center-frontend | 0.0.1 | | Kubernetes | http://172.0.1.101:30103 | 2m
default | servicecomb-service-center | service-center | 0.0.1 | | Kubernetes | http://172.0.1.102:30100 | 2m
```
## Clean up
If you use the kubectl to deploy, take deploy mode `platform registration` as example.
```bash
cd ${PROJECT_ROOT}/examples/infrastructures/k8s
kubectl delete -f <(helm template --name servicecomb --namespace default service-center/)
```
If you use helm tiller to deploy, take deploy mode `platform registration` as example.
```bash
cd ${PROJECT_ROOT}/k8s
helm delete --purge servicecomb
```
## Helm Configuration Values
- **Service Center (sc)**
+ **deployment** (bool: true) Deploy this component or not.
+ **service**
- **`type`** (string: "ClusterIP") The kubernetes service type.
- **`externalPort`** (int16: 30100) The external access port. If the type is `ClusterIP`,
it is set to the access port of the kubernetes service, and if the type
is `NodePort`, it is set to the listening port of the node.
+ **discovery**
- **`type`** (string: "aggregate") The Service Center discovery type.
This can also be set to `etcd` or `servicecenter`. `aggregate` let Service Center merge the
discovery sources and applications can discover microservices from these through using
Service Center HTTP API. `etcd` let Service Center start with client registration mode, all the
microservices information comes from application self registration. `servicecenter` let Service
Center manage multiple Service Center clusters at the same time. It can be applied to multiple
datacenters scenarios.
- **`aggregate`** (string: "k8s,etcd") The discovery sources of aggregation, only enabled if `type`
is set to `aggregate`. Different discovery sources are merged together by commas(,),
indicating that the Service Center will aggregate service information through these
sources. Now support these scenarios: `k8s,etcd`(for managing services from multiple platforms),
`k8s,servicecenter`(for accessing distinct kubernetes clusters).
- **`clusters`** (string: "sc-0=http://127.0.0.1:2380") The cluster address managed by Service Center.
If `type` is set to `etcd`, its format is `http(s)://{etcd-1},http(s)://{etcd-2}`. If `type` is
set to other value, its format is `{cluster name 1}=http(s)://{cluster-1-1},http(s)://{cluster-1-2},{cluster-2}=http(s)://{cluster-2-1}`
+ **registry**
- **`enabled`** (bool: false) Register Service Center itself or not.
- **`type`** (string: "embeded_etcd") The class of backend storage provider, this decide how
Service Center store the microservices information. `embeded_etcd` let Service Center store data
in local file system, it means distributed file system is need if you deploy high availability
Service Center. `etcd` let Service Center store data in existing etcd cluster, then Service Center
could be a stateless service. `builin` disabled the storage.
- **`name`** (string: "sc-0") The Service Center cluster name, only enabled if `type` is set to
`embeded_etcd` or `etcd`.
- **`addr`** (string: "http://127.0.0.1:2380") The backend storage provider address. This value
should be a part of `sc.discovery.clusters` value.
- **UI (frontend)**
+ **deployment** (bool: true) Deploy this component of not.
+ **service**
- **`type`** (string: "NodePort") The kubernetes service type.
- **`externalPort`** (int16: 30103) The external access port. If the type is `ClusterIP`,
it is set to the access port of the kubernetes service, and if the type
is `NodePort`, it is set to the listening port of the node.