环境配置
CentOS Linux release 7.3.1611 (Core)
etcd-v3.2.6
docker-ce-17.03.2.ce
kubernetes-v1.6.9
192.168.108.128 节点1
192.168.108.129 节点2
192.168.108.130 节点3
Kubernetes下载
https://github.com/kubernetes/kubernetes/releases/download/v1.6.9/kubernetes.tar.gz
安装配置
先决条件
1.在node节点上必须有可用的docker,docker的安装请参考官方文档
2.安装etcd v3,具体安装可以参考《ETCD集群安装配置及简单应用》
开始安装
这里选择二进制文件安装,下载的kubernetes.tar.gz并不是可执行文件,而是一系列的脚本。
解压已下载的kubernetes.tar.gz
$ tar zxvf kubernetes.tar.gz -C /opt/
$ cd /opt/kubernetes
执行get-kube-binaries.sh下载server和client的可执行文件
$ ./cluster/get-kube-binaries.sh
Kubernetes release: v1.6.9
Server: linux/amd64 (to override, set KUBERNETES_SERVER_ARCH)
Client: linux/amd64 (autodetected)
Will download kubernetes-server-linux-amd64.tar.gz from https://storage.googleapis.com/kubernetes-release/release/v1.6.9
Will download and extract kubernetes-client-linux-amd64.tar.gz from https://storage.googleapis.com/kubernetes-release/release/v1.6.9
Is this ok? [Y]/n
y
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 347M 100 347M 0 0 6110k 0 0:00:58 0:00:58 --:--:-- 10.6M
md5sum(kubernetes-server-linux-amd64.tar.gz)=decfd705eb0f32205d9016a41f2262b6
sha1sum(kubernetes-server-linux-amd64.tar.gz)=85f88c723881a092da67230936879909cb7882ac
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 29.0M 100 29.0M 0 0 1910k 0 0:00:15 0:00:15 --:--:-- 2919k
md5sum(kubernetes-client-linux-amd64.tar.gz)=ff28d0f1f3384d7594f2a71d2daa89f3
sha1sum(kubernetes-client-linux-amd64.tar.gz)=b941a95770d5f4b5c6784d1918a766480f600930
Extracting /opt/kubernetes/client/kubernetes-client-linux-amd64.tar.gz into /opt/kubernetes/platforms/linux/amd64
Add '/opt/kubernetes/client/bin' to your PATH to use newly-installed binaries.
执行该shell会自动下载kube的server和client可执行文件,其中客户端文件会自动解压到kubernetes目录下的client文件夹下,只需将bin添加到PATH下就可以了,这里也可以不任何处理,因为server的可执行包里也包含了客户端命令行工具。服务端可执行文件下载到了server文件夹,没有自动解压,后面会新创建/opt/kube目录, 然后解压到当前目录。
$ cp -au /opt/kubernetes/server/kubernetes-server-linux-amd64.tar.gz /opt/kube
$ cd /opt/kube
$ tar xzvf /kubernetes-server-linux-amd64.tar.gz
[root@bogon kube]# ll kubernetes/server/bin
总用量 1624384
-rwxr-x--- 1 root root 119891993 8月 24 01:20 cloud-controller-manager
-rwxr-x--- 1 root root 191034128 8月 24 01:20 hyperkube
-rwxr-x--- 1 root root 69883109 8月 24 01:20 kubeadm
-rwxr-x--- 1 root root 55257883 8月 24 01:20 kube-aggregator
-rw-r----- 1 root root 33 8月 24 01:20 kube-aggregator.docker_tag
-rw-r----- 1 root root 56611328 8月 24 01:20 kube-aggregator.tar
-rwxr-x--- 1 root root 149557444 8月 24 01:20 kube-apiserver
-rw-r----- 1 root root 33 8月 24 01:20 kube-apiserver.docker_tag
-rw-r----- 1 root root 150910976 8月 24 01:20 kube-apiserver.tar
-rwxr-x--- 1 root root 131818104 8月 24 01:20 kube-controller-manager
-rw-r----- 1 root root 33 8月 24 01:20 kube-controller-manager.docker_tag
-rw-r----- 1 root root 133171712 8月 24 01:20 kube-controller-manager.tar
-rwxr-x--- 1 root root 70704763 8月 24 01:20 kubectl
-rwxr-x--- 1 root root 68136904 8月 24 01:20 kubefed
-rwxr-x--- 1 root root 138853888 8月 24 01:20 kubelet
-rwxr-x--- 1 root root 64015718 8月 24 01:20 kube-proxy
-rw-r----- 1 root root 33 8月 24 01:20 kube-proxy.docker_tag
-rw-r----- 1 root root 110821888 8月 24 01:20 kube-proxy.tar
-rwxr-x--- 1 root root 75646372 8月 24 01:20 kube-scheduler
-rw-r----- 1 root root 33 8月 24 01:20 kube-scheduler.docker_tag
-rw-r----- 1 root root 76999680 8月 24 01:20 kube-scheduler.tar
配置和启动服务
构建kubernetes集群,首先需要在Master节点上启动kube-apiserver、kube-controller-manager、kube-scheduler服务。然后在每个Node上启动kubelet、kube-proxy服务。
Master节点服务配置
kube-apiserver.service
vi /usr/lib/systemd/system/kube-apiserver.service
[Unit]
Description=Kube-apiserver Service
After=network.target
[Service]
Type=notify
ExecStart=/opt/kube/kubernetes/server/bin/kube-apiserver \
--admission-control=NamespaceAutoProvision,LimitRanger,SecurityContextDeny \
--apiserver-count=1 \
--cors-allowed-origins=.* \
--enable-garbage-collector=false \
--etcd-servers=http://192.168.108.128:2379 \
--insecure-bind-address=0.0.0.0 \
--insecure-port=8080 \
--log-dir=/opt/kube/log/kube-apiserver \
--logtostderr=false \
--service-cluster-ip-range=192.168.108.0/24 \
--v=5 \
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=default.target
$ vi /usr/lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kube-controller-manager Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/kube/kubernetes/server/bin/kube-controller-manager \
--enable-garbage-collector=false \
--logtostderr=false \
--log-dir=/opt/kube/log/kube-controller-manager \
--pod-eviction-timeout=5m0s \
--master=http://0.0.0.0:8080 \
--node-monitor-grace-period=40s \
--terminated-pod-gc-threshold=12500 \
--leader-elect=true \
--v=5 \
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=default.target
kube-scheduler.service
$ vi /usr/lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kube-scheduler Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/kube/kubernetes/server/bin/kube-scheduler \
--log-dir=/opt/kube/log/kube-scheduler \
--logtostderr=false \
--master=http://0.0.0.0:8080 \
--leader-elect=true \
--v=5 \
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=default.target
systemctl --system daemon-reload
systemctl start kube-apiserver.service
systemctl start kube-controller-manager.service
systemctl start kube-scheduler.service
systemctl start kube-apiserver.service
systemctl start kube-controller-manager.service
systemctl start kube-scheduler.service
查看服务启动信息:
systemctl status kube-apiserver.service -l
systemctl status kube-controller-manager.service -l
systemctl status kube-scheduler.service -l
systemctl status kube-controller-manager.service -l
systemctl status kube-scheduler.service -l
Node服务配置
192.168.108.129
kubelet.service
[Unit]
Description=Kubelet Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/kube/kubernetes/server/bin/kubelet \
--api-servers=http://192.168.108.128:8080 \
--hostname-override=Node-2 \
--image-gc-high-threshold=80 \
--image-gc-low-threshold=50 \
--log-dir=/opt/kube/log/kubelet \
--logtostderr=false \
--pod-infra-container-image=docker.cloudin.com/google_containers/pause-amd64:3.0 \
--system-reserved cpu=2000m,memory=1G \
--v=5 \
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=default.target
kube-proxy.service
$ vi /usr/lib/systemd/system/kube-proxy.service
[Unit]
Description=Kube-proxy Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/kube/kubernetes/server/bin/kube-proxy \
--log-dir=/opt/kube/log/kube-proxy \
--logtostderr=false \
--master=http://192.168.108.128:8080 \
--v=5 \
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=default.target
192.168.108.130
kubelet.service
kubelet.service
$ vi /usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubelet Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/kube/kubernetes/server/bin/kubelet \
--api-servers=http://192.168.108.128:8080 \
--hostname-override=Node-3 \
--image-gc-high-threshold=80 \
--image-gc-low-threshold=50 \
--log-dir=/opt/kube/log/kubelet \
--logtostderr=false \
--pod-infra-container-image=docker.cloudin.com/google_containers/pause-amd64:3.0 \
--system-reserved cpu=2000m,memory=1G \
--v=5 \
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=default.target
kube-proxy.service
$ vi /usr/lib/systemd/system/kube-proxy.service
[Unit]
Description=Kube-proxy Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/kube/kubernetes/server/bin/kube-proxy \
--log-dir=/opt/kube/log/kube-proxy \
--logtostderr=false \
--master=http://192.168.108.128:8080 \
--v=5 \
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=default.target
配置完成后,执行systemctl start命令启动这2个服务。
systemctl --system daemon-reload
systemctl start kubelet.service
systemctl --system daemon-reload
systemctl start kubelet.service
systemctl start kube-proxy.service
查看服务启动信息:
systemctl status kubelet.service -l
查看服务启动信息:
systemctl status kube-proxy.service -l
客户端命令
$ cd /opt/kube/kubernetes/server
查看集群节点:
$ bin/kubectl get nodes
删除服务:
$ bin/kubectl delete node $NODENAME
查看kubernets相关接口:
http://192.168.108.128:8080/