Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Describes addition and deletion of minions (or nodes) at run time, and some other fixes. #5847

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 57 additions & 43 deletions docs/getting-started-guides/fedora/fedora_manual_config.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,34 @@

This is a getting started guide for Fedora. It is a manual configuration so you understand all the underlying packages / services / ports, etc...

This guide will only get ONE minion working. Multiple minions require a functional [networking configuration](https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/networking.md) done outside of kubernetes. Although the additional kubernetes configuration requirements should be obvious.
This guide will only get ONE node (previously minion) working. Multiple nodes require a functional [networking configuration](https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/networking.md) done outside of kubernetes. Although the additional kubernetes configuration requirements should be obvious.

The kubernetes package provides a few services: kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy. These services are managed by systemd and the configuration resides in a central location: /etc/kubernetes. We will break the services up between the hosts. The first host, fed-master, will be the kubernetes master. This host will run the kube-apiserver, kube-controller-manager, and kube-scheduler. In addition, the master will also run _etcd_ (not needed if _etcd_ runs on a different host but this guide assumes that _etcd_ and kubernetes master run on the same host). The remaining host, fed-minion will be the minion and run kubelet, proxy and docker.
The kubernetes package provides a few services: kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy. These services are managed by systemd and the configuration resides in a central location: /etc/kubernetes. We will break the services up between the hosts. The first host, fed-master, will be the kubernetes master. This host will run the kube-apiserver, kube-controller-manager, and kube-scheduler. In addition, the master will also run _etcd_ (not needed if _etcd_ runs on a different host but this guide assumes that _etcd_ and kubernetes master run on the same host). The remaining host, fed-node will be the node and run kubelet, proxy and docker.

**System Information:**

Hosts:
```
fed-master = 192.168.121.9
fed-minion = 192.168.121.65
fed-node = 192.168.121.65
```

**Prepare the hosts:**

* Install kubernetes on all hosts - fed-{master,minion}. This will also pull in etcd and docker. This guide has been tested with kubernetes-0.12.0 but should work with later versions too.
* Install kubernetes on all hosts - fed-{master,node}. This will also pull in etcd and docker. This guide has been tested with kubernetes-0.12.0 but should work with later versions too.

```
yum -y install --enablerepo=updates-testing kubernetes
```

* Add master and minion to /etc/hosts on all machines (not needed if hostnames already in DNS). Make sure that communication works between fed-master and fed-minion by using a utility such as ping.
* Add master and node to /etc/hosts on all machines (not needed if hostnames already in DNS). Make sure that communication works between fed-master and fed-node by using a utility such as ping.

```
echo "192.168.121.9 fed-master
192.168.121.65 fed-minion" >> /etc/hosts
192.168.121.65 fed-node" >> /etc/hosts
```

* Edit /etc/kubernetes/config which will be the same on all hosts to contain:
* Edit /etc/kubernetes/config which will be the same on all hosts (master and node) to contain:

```
# Comma separated list of nodes in the etcd cluster
Expand All @@ -45,7 +45,7 @@ KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow_privileged=false"
```

* Disable the firewall on both the master and minion, as docker does not play well with other firewall rule managers. Please note that iptables-services does not exist on default fedora server install.
* Disable the firewall on both the master and node, as docker does not play well with other firewall rule managers. Please note that iptables-services does not exist on default fedora server install.

```
systemctl disable iptables-services firewalld
Expand All @@ -70,44 +70,63 @@ KUBE_SERVICE_ADDRESSES="--portal_net=10.254.0.0/16"
KUBE_API_ARGS=""
```

* Edit /etc/kubernetes/controller-manager to appear as such:
* Start the appropriate services on master:

```
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
```
# The following values are used to configure the kubernetes controller-manager

# defaults from config and apiserver should be adequate
* Addition of nodes:

# Comma separated list of minions
KUBELET_ADDRESSES="--machines=fed-minion"
* Create following node.json file on kubernetes master node:

# Add you own!
KUBE_CONTROLLER_MANAGER_ARGS=""
```json
{
"id": "fed-node",
"kind": "Minion",
"apiVersion": "v1beta1",
"labels": {
"name": "fed-node-label"
}
}
```

* Start the appropriate services on master:
Now create a node object internally in your kubernetes cluster by running:

```
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
$ kubectl create -f node.json

$ kubectl get nodes
NAME LABELS STATUS
fed-node name=fed-node-label Unknown
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You haven't actually started the api-server yet.... this needs to go later. I'd suggest after you set up the node itself, but that's up to you....

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually you are right, that it should happen after api-server is started. But it should happen on fed-master, so should be ok to go after services are started.


```

**Configure the kubernetes services on the minion.**
Please note that in the above, it only creates a representation for the node
_fed-node_ internally. It does not provision the actual _fed-node_. Also, it
is assumed that _fed-node_ (as specified in `id`) can be resolved and is
reachable from kubernetes master node. This guide will discuss how to provision
a kubernetes node (fed-node) below.

***We need to configure the kubelet and proxy and start them.***
**Configure the kubernetes services on the node.**

***We need to configure the kubelet on the node.***

* Edit /etc/kubernetes/kubelet to appear as such:

```
###
# kubernetes kubelet (minion) config
# kubernetes kubelet (node) config

# The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
KUBELET_ADDRESS="--address=0.0.0.0"

# You may leave this blank to use the actual hostname
KUBELET_HOSTNAME="--hostname_override=fed-minion"
KUBELET_HOSTNAME="--hostname_override=fed-node"

# location of the api-server
KUBELET_API_SERVER="--api_servers=http://fed-master:8080"
Expand All @@ -116,19 +135,7 @@ KUBELET_API_SERVER="--api_servers=http://fed-master:8080"
#KUBELET_ARGS=""
```

* Edit /etc/kubernetes/proxy to appear as such:

```
###
# kubernetes proxy config

# default config should be adequate

# Add your own!
KUBE_PROXY_ARGS="--master=http://fed-master:8080"
```

* Start the appropriate services on minion (fed-minion).
* Start the appropriate services on the node (fed-node).

```
for SERVICES in kube-proxy kubelet docker; do
Expand All @@ -138,15 +145,22 @@ for SERVICES in kube-proxy kubelet docker; do
done
```

*You should be finished!*

* Check to make sure the cluster can see the minion (on fed-master).
* Check to make sure now the cluster can see the fed-node on fed-master, and its status changes to _Ready_.

```
kubectl get minions
kubectl get nodes
NAME LABELS STATUS
fed-minion <none> Ready
fed-node name=fed-node-label Ready
```
* Deletion of nodes:

To delete _fed-node_ from your kubernetes cluster, one should run the following on fed-master (Please do not do it, it is just for information):

```
$ kubectl delete -f node.json
```

*You should be finished!*

**The cluster should be running! Launch a test pod.**

Expand Down