環境:
硬件爲ubuntu 16.04,安裝過程藉助ubuntu systemd
2核4g(master)和1核2g(minion)配置.安裝說明
master :etcd (version 3.1.1)| kube-apiserver(version 1.0.1) |kube-controller |kube-scheduler |flanneld (version 0.6.1) |kubelet|docker(version 1.11.2)
minion:flanneld| kubelet |kube-proxy|docker
下面ip地址配置需要按需修改,本人的所有二進制文件全部放在了/root/kube-bin/ 文件夾下。
0.docker 安裝
apt-get 方式
http://www.atjiang.com/install-docker-on-ubuntu/
二進制安裝方式
https://docs.docker.com/engine/installation/binaries/
下邊爲在啓動完flannel時,重啓docker的命令代碼.這句話指定創建的容器的ip範圍.
nohup docker daemon -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock \
--bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU} &
1.etcd 安裝[MASTER]
etcd 在本次安裝教程中單節點安裝。默認裝在master節點上。etcd必須先於flannel的安裝,flannel啓動時需要從etcd中查詢可用的ip段!
$ mkdir -p /var/lib/etcd/
$ mkdir -p /opt/etcd/config/
$ cat <<EOF | sudo tee /opt/etcd/config/etcd.conf
ETCD_DATA_DIR=/var/lib/etcd
ETCD_NAME=iZwz993neuthobfrr8nsptZ
ETCD_INITIAL_CLUSTER_STATE=new
//ETCD_LISTEN_PEER_URLS=http://127.0.0.1:2380
//ETCD_INITIAL_ADVERTISE_PEER_URLS=http://127.0.0.1:2380
//ETCD_ADVERTISE_CLIENT_URLS=http://127.0.0.1:2379
ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
GOMAXPROCS=2
EOF
etcd配置參數官方說明:https://coreos.com/etcd/docs/latest/op-guide/configuration.html
配置etcd systemd service
$ cat <<EOF | sudo tee /etc/systemd/system/etcd.service
[Unit]
Description=Etcd Server
Documentation=https://github.com/coreos/etcd
After=network.target
[Service]
User=root
Type=simple
EnvironmentFile=-/opt/etcd/config/etcd.conf
ExecStart=/root/kube-bin/basic/etcd
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000
[Install]
WantedBy=multi-user.target
EOF
啓動etcd
$ systemctl daemon-reload
$ systemctl enable etcd
$ systemctl start etcd
//journalctl -xe 或是 systemctl status [service name] 查看安裝情況
將flannel 的ip range存入etcd.
/opt/etcd/bin/etcdctl set /coreos.com/network/config '{"Network":"'${FLANNEL_NET}'", "Backend": {"Type": "vxlan"}}'
2.api-server[MASTER]
$ cat <<EOF | sudo tee /etc/systemd/system/kube-apiserver.service
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
After=network.target
[Service]
User=root
ExecStart=/root/kube-bin/kube-apiserver \
--insecure-bind-address=172.18.222.79 \ //api-server 監聽的interface
--insecure-port=8080 \ //api-server 監聽的端口
--etcd-servers=http://172.18.222.79:2379 \ //etcd client監聽地址
--logtostderr=true \
--allow-privileged=false \
--service-cluster-ip-range=10.254.0.0/16 \
--service-node-port-range=30000-32767
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
啓動api-server
$ systemctl daemon-reload
$ systemctl enable kube-apiserver
$ systemctl start kube-apiserver
//journalctl -xe 或是 systemctl status [service name] 查看安裝情況
3.k8s kube-controller-manager [MASTER]
cat <<EOF | sudo tee /etc/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes
[Service]
User=root
ExecStart=/root/kube-bin/kube-controller-manager \
--master=172.18.222.79:8080 \ //指定api-server的監聽地址
--logtostderr=true
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
啓動kube-controller-manager
$ systemctl daemon-reload
$ systemctl enable kube-controller-manager
$ systemctl start kube-controller-manager
//journalctl -xe 或是 systemctl status [service name] 查看安裝情況
4.kube-scheduler[MASTER]
cat <<EOF | sudo tee /etc/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes
[Service]
User=root
ExecStart=/root/kube-bin/kube-scheduler \
--logtostderr=true \
--master=172.18.222.79:8080 //指定api-server的監聽地址
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
啓動kube-scheduler
$ systemctl daemon-reload
$ systemctl enable kube-scheduler
$ systemctl start kube-scheduler
//journalctl -xe 或是 systemctl status [service name] 查看安裝情況
4.flannel
cat <<EOF | sudo tee /etc/systemd/system/flanneld.service
[Unit]
Description=Flanneld
Documentation=https://github.com/coreos/flannel
After=network.target
[Service]
User=root
ExecStart=/root/kube-bin/basic/flanneld \
--etcd-endpoints="http://172.18.222.79:2379" \ //etcd client監聽地址
--iface=172.18.222.80 \
--ip-masq
Restart=on-failure
Type=notify
LimitNOFILE=65536
EOF
啓動kube-scheduler
$ systemctl flanneld
$ systemctl enable flanneld
$ systemctl start flanneld
//journalctl -xe 或是 systemctl status [service name] 查看安裝情況
也可以配置完之後一起啓動
配置重新加載和預設啓動
systemctl daemon-reload
systemctl enable kube-proxy
systemctl enable kube-apiserver
systemctl enable kube-controller-manager
systemctl enable kube-scheduler
systemctl enable flanneld
systemctl start kube-proxy
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start flanneld
5.kubelet
cat <<EOF | sudo tee /etc/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
[Service]
ExecStart=/root/kube-bin/kubelet \
--bind-address=0.0.0.0 \ //不能綁定localhost
--api-servers=http://172.18.222.79:8080 \ //指定api-server的監聽地址
--logtostderr=true
Restart=on-failure
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
以上邊同樣的方式啓動.
6.kube-proxy
cat <<EOF | sudo tee /etc/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Proxy
After=network.target
[Service]
ExecStart=/root/kube-bin/kube-proxy \
--hostname-override=172.18.222.80\
--master=http://172.18.222.79:8080 \
--logtostderr=true
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
以上邊同樣的方式啓動.
7.docker 重啓
import flannel分配的子網ip range
source /run/flannel/subnet.env
重啓docker,設置flannel ip地址段.(重啓之前,先把之前的kill掉!本次安裝docker用的是二進制安裝方式.由於docker api和kubernetes版本選的有兼容問題,docker換了好幾個版本安裝)
nohup docker daemon -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock --bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU} &
8.docker 私有倉庫的搭建
http://blog.csdn.net/landai2011/article/details/54600809
驗證:
在瀏覽器裏輸入:
http://172.18.222.80:8080/swagger-ui/
查看minion節點安裝情況
curl http://172.18.222.80:8080/api/v1/nodes