这里用第二种方法来安装一下 Kubernetes。node
组件 | 版本 | 备注 |
---|---|---|
Kubernetes | 1.3.0 | 从 github 上下载的 |
Docker | 1.13.1 | centos 7 上用 yum 安装 |
etcd | 3.0 | 下载二进制文件安装 |
下载页面:https://github.com/kubernetes/kubernetes/releases?after=v1.3.1linux
下载地址:https://github.com/kubernetes/kubernetes/releases/download/v1.3.0/kubernetes.tar.gzgit
压缩包 kubernetes.tar.gz 内包含了 Kubernetes 的服务程序文件、文档和示例。github
解压缩以后,server 子目录中的 kubernetes-server-linux-amd64.tar.gz 文件包含了 Kubernetes 须要运行的所有服务程序文件。docker
文件名 | 说明 |
---|---|
hyperkube | 总控程序,用于运行其余 Kubernetes 程序 |
kube-apiserver | apiserver 主程序 |
kube-apiserver.docker_tag | apiserver docker 镜像的 tag |
kube-apiserver.tar | apiserver docker 镜像文件 |
kube-controller-manager | controller-manager 主程序 |
kube-controller-manager.docker_tag | controller-manager docker 镜像的 tag |
kube-controller-manager.tar | controller-manager docker 镜像文件 |
kubectl | 客户端命令工具 |
kubelet | kubelet 主程序 |
kube-proxy | proxy 主程序 |
kube-scheduler | scheduler 主程序 |
kube-scheduler.docker_tag | scheduler docker 镜像的 tag |
kube-scheduler.tar | scheduler docker 镜像文件 |
节点 | 须要安装的程序 |
---|---|
Kubernetes Master | etcd、kube-apiserver、kube-controller-manager、kube-scheduler |
Kubernetes Node | kubelet、kube-proxy |
Kubernetes 还提供了一个“all-in-one”的 hyperkube 程序来完成对以上服务程序的启动。数据库
因为是实验阶段,能够直接把防火墙给关了,这样的话能够避免不少意想不到的困难。centos
# 禁用虚拟机 systemctl disable firewalld # 关闭防火墙 systemctl stop firewalld
将 Kubernetes 的可执行文件复制到 /user/bin,若是复制到其余目录,则将 systemd 服务文件中的文件路径修改正确便可。api
etcd 服务做为 Kubernetes 集群的主数据库,在安装 Kubernetes 个服务以前须要首先安装和启动。安全
从 GitHub 官网下载 etcd 发布的二进制文件,将 etcd 和 etcdctl 文件复制到 /usr/bin 目录bash
systemd 服务文件 /usr/lib/systemd/system/etcd.service:
etcd 下载页面:https://github.com/etcd-io/etcd/releases?after=v3.0.1
etcd 下载地址:https://github.com/etcd-io/etcd/releases/download/v3.0.0/etcd-v3.0.0-linux-amd64.tar.gz
# 下载 etcd 的二进制文件 wget https://github.com/etcd-io/etcd/releases/download/v3.0.0/etcd-v3.0.0-linux-amd64.tar.gz # 解压 tar zxvf etcd-v3.0.0-linux-amd64.tar.gz # 将etcd和 etcdctl 复制到 /usr/bin 目录 mv etcd etcdctl /usr/bin # 建立 systemd 服务文件
systemd 服务文件 /usr/lib/systemd/system/etcd.service
[Unit] Description=Etcd Server After=network.target [Service] Type=simple WorkingDirectory=/var/lib/etcd/ EnvironmentFile=/etc/etcd/etcd.conf ExecStart=/usr/bin/etcd [Install] WantedBy=multi-user.target
# 建立 etcd 的数据目录 mkdir /var/lib/etcd # 加入到开机列表并启动服务 systemctl daemon-reload systemctl enable etcd.service systemctl start etcd.service # 验证是否启动正确 etcdctl cluster-health [root@localhost ~]# etcdctl cluster-health member 8e9e05c52164694d is healthy: got healthy result from http://localhost:2379 cluster is healthy
到这一阶段 etcd 已经装好了
先下载好对应的版本呢,而后解压,把这几个复制到 /usr/bin 下
mv kube-apiserver kube-controller-manager kube-scheduler /usr/bin
将 kube-apiserver 的可执行文件复制到 /usr/bin 目录,编辑systemd 服务文件 /usr/lib/systemd/system/kube-apiserver.service
,内容以下:
Description=Kubernetes API Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=etcd.service Wants=etcd.service [Service] EnvironmentFile=/etc/kubernetes/apiserver ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS Restart=on-failure Type=notify LimitNOFILE=65536 [Install] WantedBy=multi-user.target
配置文件 /etc/kubernetes/apiserver
的内容包括了 kube-apiserver 的所有启动参数,主要的配置参数在变量 KUBE_API_ARGS
中指定
cat /etc/kubernetes/apiserver KUBE_API_ARGS="--etcd_servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0 --insecure-port=8080 --service-cluster-ip-range=169.169.0.0/16 --service-node-port-range=1-65535 --admission_control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
启动参数说明
cat /usr/lib/systemd/system/kube-controller-manager.server [Unit] Description=Kubernetes Controller Manager Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=kube-apiserver.service Requires=kube-apiserver.service [Service] EnvironmentFile=/etc/kubernetes/controller-manager ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS Restart=on-failure LimitNOFILE=65535 [Install] WantedBy=multi-user.target
配置文件/etc/kubernetes/controller-manager
的内容包括了 kube-controller-manager 的所有启动参数,主要的配置参数在变量 KUBE_CONTROLLER_MANAGER_ARGS
中指定。
# cat /etc/kubernetes/controller-manager KUBE_CONTROLLER_MANAGER_ARGS="--master=http:192.168.18.3:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
kube-scheduler 服务也依赖于 kube-apiserver 服务
cat /usr/lib/systemd/system/kube-scheduler.service [Unit] Description=Kubernetes Scheduler Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=kbue-apiserver.service Requires=kube-apiserver.service [Service] EnvironmentFile=/etc/kubernetes/scheduler ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target
配置文件 /etc/kubernetes/scheduler 的内容包括了 kube-scheduler 的所有启动参数,主要的配置参数在变量 KUBE_SCHEDULER_ARGS
中指定
cat /etc/kubernetes/scheduler KUBE_SCHEDULER_ARGS="--master=http://192.168.18.3:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
#systemctl start 命令启动这三个服务 #systemctl enable 将服务加入开机启动 systemctl daemon-reload systemctl enable kube-apiserver.service systemctl start kube-apiserver.service systemctl enable kube-controller-manager systemctl start kube-controller-manager systemctl enable kube-scheduler systemctl start kube-scheduler # systemctl status <service_name> 来验证服务的启动状态 # running 表示启动成功
至此 Master 上的服务就所有启动完成了,嗯,有啥问题多看看日志啥的
在Node 节点上须要预先安装好 Docker Daemon,而且正常启动。
kubelet 服务依赖于 Docker 服务
cat /usr/lib/systemd/system/kubelet.service [Unit] Description=Kubernetes Kubelete 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
WorkingDirectory 表示 kubelet 保存数据的目录,须要在 kubelet 启动以前建立。
配置文件 /etc/kubernetes/kubelet 的内容包括了 kubelet 的所有启动参数
cat /etc/kubernetes/kubelet KUBELET_ARGS="--api-server=http://192.168.12.201:8080 --hostname-override=192.168.12.201 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
启动参数的说明以下
kube-proxy 服务依赖于 network 服务
[Unit] Description=Kubernetes Kube-Proxy Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=network.service Requires=network.service [Service] EnvironmentFile=/etc/kubernetes/proxy ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS Restart=on-failure LimitNOFILE=65535 [Install] WantedBy=multi-user.target
配置文件 /etc/kubernetes/proxy 的内容包括了 kube-proxy 的所有启动参数
cat /etc/kubernetes/proxy KUBE_PROXY_ARGS="--master=http://192.168.12.200:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
kubelet 和 kube-proxy 服务的启动命令
systemctl daemon-reload systemctl enable kubelet.service systemctl start kubelet.service systemctl enable kube-proxy systemctl start kube-proxy
mv kubelet kube-proxy /usr/bin
若是只是在内网环境中, Kubernetes 的各个组件与 Master 之间能够经过 apiserver 的非安全端口 http://apiserver:8080 进行访问。若是 apiserver 须要对外提供服务,或者集群中的某些容器也要经过 apiserver 以获取集群中的某些信息,则更安全的作法是启用 HTTPS 安全机制。
Kubernetes 提供了:
其中 CA 的安全性更高。
Kubernetes 的版本升级须要考虑到当前集群中正在运行的容器不受影响。应对集群中的各个Node 逐个进行隔离,而后等待在其上运行的容器所有执行完成,再更新该 Node 上的 kubelet 和 kube-proxy 服务,将所有 Node 都更新完后,最后更新 Master 服务。
其实就是由于不少状况下内网都不能访问 Internete 因此也就不能拉取镜像,就要配置一个私有的镜像仓库