1. 准备工作:
下载二进制包,下载地址:https://github.com/kubernetes/kubernetes/releases
翻墙软件:https://github.com/getlantern/lantern
使用翻墙软件下载k8s v1.8.8。
下载以后解压,看到的内容如下:
2. 安装etcd,etcd也使用二进制文件进行安装。etcd服务是k8s的主数据库,在安装k8s各服务之前需要首先安装和启动。
1. 下载etcd的二进制文件,https://github.com/coreos/etcd/releases/download/v3.2.15/etcd-v3.2.15-linux-amd64.tar.gz。
2. 解压缩以后,看到的内容如下:
3. 将etcd和etcdctl文件复制到/usr/bin目录下。
cp etcd etcdctl /usr/bin
4. 设置systemd服务文件,在/usr/lib/systemd/system/etcd.service,添加下面的内容:
[Unit] Description=etcd.service [Service] Type=notify TimeoutStartSec=0 Restart=always WorkingDirectory=/var/lib/etcd EnvironmentFile=-/etc/etcd/etcd.conf ExecStart=/usr/bin/etcd [Install] WantedBy=multi-user.target
提前创建WorkingDirectory对应的目录;
提前创建EnvironmentFile对应的配置文件,并添加内容如下:
ETCD_NAME=ETCD Server ETCD_DATA_DIR="/var/lib/etcd/" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_ADVERTISE_CLIENT_URLS="http://172.16.252.217:2379"
配置开机启动
#systemctl daemon-reload #systemctl enable etcd.service #systemctl start etcd.service
检查一下是否启动成功:
3. 安装kube-apiserver服务
1. 将kube-apiserver可执行文件复制到/usr/bin目录。
cp kube-apiserver kube-controller-manager kube-scheduler /usr/bin
2. 配置服务文件kube-apiserver,在/usr/lib/systemd/system/kube-apiserver.service
[Unit] Description=Kubernetes API Server After=etcd.service Wants=etcd.service [Service] EnvironmentFile=/etc/kubernetes/apiserver ExecStart=/usr/bin/kube-apiserver \ $KUBE_ETCD_SERVERS \ $KUBE_API_ADDRESS \ $KUBE_API_PORT \ $KUBE_SERVICE_ADDRESSES \ $KUBE_ADMISSION_CONTROL \ $KUBE_API_LOG \ $KUBE_API_ARGS Restart=on-failure Type=notify LimitNOFILE=65536 [Install] WantedBy=multi-user.target
3. 配置文件/etc/kubernetes/apiserver,内容如下:
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" KUBE_API_PORT="--insecure-port=8080" KUBE_ETCD_SERVERS="--etcd-servers=http://172.16.252.217:2379" KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=169.169.0.0/16" KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota" KUBE_API_LOG="--logtostderr=false --log-dir=/home/k8s-t/log/kubernets --v=2" KUBE_API_ARGS=" "
4. 设置开机启动
systemctl enable kube-apiserver.service
systemctl start kube-apiserver.service
当启动kube-apiserver.service的服务的时候,报错:
[root@k8s-v1 system]# journalctl -xn -u kube-apiserver.service
-- Logs begin at 三 2018-02-28 10:13:48 CST, end at 三 2018-02-28 10:16:17 CST. --
2月 28 10:16:17 k8s-v1.8 systemd[2234]: Failed at step EXEC spawning /usr/bin/kube-apiserver: Permission denied
-- Subject: Process /usr/bin/kube-apiserver could not be executed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- The process /usr/bin/kube-apiserver could not be executed and failed.
--
-- The error number returned while executing this process is 13.
2月 28 10:16:17 k8s-v1.8 systemd[1]: kube-apiserver.service: main process exited, code=exited, status=203/EXEC
2月 28 10:16:17 k8s-v1.8 systemd[1]: Failed to start Kubernetes API Server.
-- Subject: Unit kube-apiserver.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit kube-apiserver.service has failed.
--
-- The result is failed.
2月 28 10:16:17 k8s-v1.8 systemd[1]: Unit kube-apiserver.service entered failed state.
2月 28 10:16:17 k8s-v1.8 systemd[1]: kube-apiserver.service holdoff time over, scheduling restart.
2月 28 10:16:17 k8s-v1.8 systemd[1]: Stopping Kubernetes API Server...
-- Subject: Unit kube-apiserver.service has begun shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit kube-apiserver.service has begun shutting down.
2月 28 10:16:17 k8s-v1.8 systemd[1]: Starting Kubernetes API Server...
-- Subject: Unit kube-apiserver.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit kube-apiserver.service has begun starting up.
2月 28 10:16:17 k8s-v1.8 systemd[1]: kube-apiserver.service start request repeated too quickly, refusing to start.
2月 28 10:16:17 k8s-v1.8 systemd[1]: Failed to start Kubernetes API Server.
-- Subject: Unit kube-apiserver.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit kube-apiserver.service has failed.
--
-- The result is failed.
2月 28 10:16:17 k8s-v1.8 systemd[1]: Unit kube-apiserver.service entered failed state.
解决方法:因为/usr/bin/kube-apiserver文件没有执行权限。一定要注意。
4. 安装kube-controller-manager服务
1. 将可执行文件拷贝到/usr/bin目录下。
2. 配置服务文件kube-controller-manager,在/usr/lib/systemd/system/kube-controller-manager.service
[Unit] Description=Kubernetes Scheduler After=kube-apiserver.service Requires=kube-apiserver.service [Service] EnvironmentFile=-/etc/kubernetes/controller-manager ExecStart=/usr/bin/kube-controller-manager \ $KUBE_MASTER \ $KUBE_CONTROLLER_MANAGER_ARGS Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target
3. 配置文件/etc/kubernetes/controller-manager,内容如下:
KUBE_MASTER="--master=http://172.16.252.217:8080" KUBE_CONTROLLER_MANAGER_ARGS=" "
5. 安装kube-scheduler服务。
1. 将可执行文件复制到/usr/bin目录下。
2. 配置服务文件,在/usr/lib/systemd/system/kube-scheduler.service
[Unit] Description=Kubernetes Scheduler After=kube-apiserver.service Requires=kube-apiserver.service [Service] User=root EnvironmentFile=-/etc/kubernetes/scheduler ExecStart=/usr/bin/kube-scheduler \ $KUBE_MASTER \ $KUBE_SCHEDULER_ARGS Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target
3. 配置文件/etc/kubernetes
KUBE_MASTER="--master=http://172.16.252.217:8080" KUBE_SCHEDULER_ARGS="--logtostderr=true --log-dir=/home/k8s-t/log/kubernetes --v=2"
6. kubectl命令行工具
复制二进制文件到/usr/bin目录下。
cp kubectl /usr/bin/
并给kubectl文件执行权限 chmod 755 kubectl
7. 在node节点上安装kubelet和kube-proxy服务
因为kubelet服务依赖于docker服务,所以在node节点上要提前安装docker。
1. 安装docker。
yum install docker -y
2. 安装kubelet服务。
复制执行文件到/usr/bin目录下,并给执行权限。
配置服务文件kubelet.service,在/usr/lib/systemd/system/目录下。
[Unit] Description=Kubernetes Kubelet Server After=docker.service Requires=docker.service [Service] WorkingDirectory=/var/lib/kubelet EnvironmentFile=-/etc/kubernetes/kubelet ExecStart=/usr/bin/kubelet \ $KUBE_LOGTOSTDERR \ $KUBE_LOG_LEVEL \ $KUBELET_API_SERVER \ $KUBELET_ADDRESS \ $KUBELET_PORT \ $KUBELET_HOSTNAME \ $KUBE_ALLOW_PRIV \ $KUBELET_POD_INFRA_CONTAINER \ $KUBELET_ARGS Restart=on-failure [Install] WantedBy=multi-user.target
需要提前创建目录/var/lib/kubelet。
配置文件/etc/kubernetes/kubelet。
# kubernetes kubelet (minion) 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" # The port for the info server to serve on # KUBELET_PORT="--port=10250" # You may leave this blank to use the actual hostname KUBELET_HOSTNAME="--hostname-override=172.16.252.218" # location of the api-server KUBELET_API_SERVER="--api-servers=http://172.16.252.217:8080" # pod infrastructure container KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=172.16.20.215:5000/pod-infrastructure:pod-base" # Add your own! KUBELET_ARGS=""
3. 启动kubelet服务。
systemctl daemon-reload
systemctl enable kubelet.service
systemctl start kubelet.service
结果启动的时候,报错。后来检查/var/log/message,一定要仔细检查,看到unkown --api-servers,后来查看一些文档,发现v.18以后,已经不支持--api-servers参数。
所以需要在/etc/kubernetes/kubelet文件中注释掉--api-servers这一行。
继续启动,又有报错,如下:
Mar 2 13:19:46 k8s-node1 kubelet: error: failed to run Kubelet: Running with swap on is not supported, please disable swap! or set --fail-swap-on flag to false. /proc/swaps contained: [Filename Type Size Used Priority /dev/dm-0 partition 2113532 0 -1]
解决方法:
需要在KUBELET_ARGS加参数:--fail-swap-on=false
继续启动,又有报错,如下:
Mar 2 13:56:28 k8s-node1 kubelet: error: failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
解决方法:
需要在KUBELET_ARGS加参数:--fail-swap-on=false
继续启动,没有错误了。
现在把kubelet.service和kubelet配置文件,展示出来。
[root@k8s-node1 kubelet]# cat /usr/lib/systemd/system/kubelet.service [Unit] Description=Kubernetes Kubelet Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=docker.service Requires=docker.service [Service] WorkingDirectory=/var/lib/kubelet EnvironmentFile=/etc/kubernetes/kubelet ExecStart=/usr/bin/kubelet $KUBELET_ARGS Restart=on-failure [Install] WantedBy=multi-user.target
[root@k8s-node1 kubelet]# cat /etc/kubernetes/kubelet # Add your own! KUBELET_ARGS="--address=172.16.252.218 --port=10250 --hostname-override=172.16.252.218 --allow-privileged=false --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --cluster-dns=10.10.10.2 --cluster-domain=cluster.local --fail-swap-on=false --cgroup-driver=systemd --logtostderr=true --log-dir=/var/log/kubernetes --v=4"
4. 复制kube-proxy执行文件到/usr/bin目录下,并给文件执行权限。
配置服务文件,在/usr/lib/systemd/system/kube-proxy.service
[Unit] Description=Kubernetes Kube-Proxy Server After=network.target [Service] EnvironmentFile=-/etc/kubernetes/proxy ExecStart=/usr/bin/kube-proxy \ $KUBE_LOGTOSTDERR \ $KUBE_LOG_LEVEL \ $KUBE_MASTER \ $KUBE_PROXY_ARGS Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target
配置文件/etc/kubernetes/proxy,内容如下:
[Unin proxy config # default config should be adequate # Add your own! KUBE_PROXY_ARGS="--master=http://172.16.252.217:8080 --hostname-override=172.16.252.218 --logtostderr=true "