阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ubuntu上手动安装部署Kubernetes详细指南

151次阅读
没有评论

共计 11157 个字符,预计需要花费 28 分钟才能阅读完成。

背景

两台 Ubuntu16.04 服务器:ip 分别为 192.168.56.160 和 192.168.56.161。。
Kubernetes 版本:1.5.5
Docker 版本:1.12.6
etcd 版本:2.2.1
flannel 版本:0.5.6
其中 160 服务器既做 Kubernetes 的 master 节点,又做 node 节点;161 服务器只做 node 节点。
master 节点上需要部署:kube-apiserver、kube-controller-manager、kube-scheduler、etcd 服务。
node 节点上部署:kubelet、kube-proxy、docker 和 flannel 服务。

下载

Kubernetes 下载

Client 二进制下载:https://dl.k8s.io/v1.5.5/kubernetes-client-linux-amd64.tar.gz
Server 二进制下载:https://dl.k8s.io/v1.5.5/kubernetes-server-linux-amd64.tar.gz
我的服务器是 linux,amd64 的,如果有其他环境,可以前往页面下载
将可执行文件 kubernetes 目录下,server 和 client 目中的 kube-apiserver、kube-controller-manager、kubectl、kubelet、kube-proxy、kube-scheduler 等都拷贝到 /usr/bin/ 目录中。

etcd 下载

etcd 的 github release 下载都是放在 AWS S3 上(点这里)的,我这网络访问不了或者很慢,可以到 Linux 公社资源站下载包。
除此之外,还可以自己编译 etcd 源码,来获取 etcd 的可执行文件。
将 etcd 的可执行文件 etcd 和 etcdctl 拷贝到 /usr/bin/ 目录。

etcd-v2.2.1-linux-amd64.tar 可以到 Linux 公社资源站下载:

—————————————— 分割线 ——————————————

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是 www.linuxidc.com

具体下载目录在 /2017 年资料 / 4 月 / 5 日 /Ubuntu 上手动安装部署 Kubernetes 详细指南 /

下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm

—————————————— 分割线 ——————————————

flannel 下载

flannel 和 etcd 都是 coreOS 公司的产品,所以 flannel 的 github release 下载也是放在 AWS S3 上。不过幸好 flannel 的编译很简单,从 github 上下载,然后直接编译即可。然后会在 flannel 的 bin 或者 dist 目录下(版本不同可能导致目录不同)生成 flannel 可执行文件。

$ git clone -b v0.5.6 https://github.com/coreos/flannel.git
$ cd flannel
$ ./build

具体的编译方法可能会不同,请参考 flannel 目录下的 README.md 文件。
将可执行文件 flanneld 拷贝到 /usr/bin/ 目录。
创建 /usr/bin/flannel 目录,并将 dist 目录下的 mk-docker-opts.sh 文件拷贝到 /usr/bin/flannel/ 中。

Kubernetes master 配置

etcd 配置

创建数据目录

$ sudo mkdir -p /var/lib/etcd/

创建配置目录和文件

$ sudo mkdir -p /etc/etcd/
$ sudo vim /etc/etcd/etcd.conf

ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.160:2379"

创建 systemd 文件

$ sudo vim /lib/systemd/system/etcd.service

[Unit]
Description=Etcd Server
Documentation=https://github.com/coreos/etcd
After=network.target


[Service]
User=root
Type=notify
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target

启动服务

$ sudo systemctl daemon-reload 
$ sudo systemctl enable etcd
$ sudo systemctl start etcd

测试服务端口

$ sudo systemctl status etcd

● etcd.service - Etcd Server
   Loaded: loaded (/lib/systemd/system/etcd.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-03-27 11:19:35 CST; 7s ago
...

再查看端口是否正常开放。

$ netstat -apn | grep 2379
tcp6       0      0 :::2379                 :::*                    LISTEN      7211/etcd 

创建一个 etcd 网络

$ etcdctl set /coreos.com/network/config '{"Network": "192.168.4.0/24" }'

如果部署的是 etcd 集群,那么每台 etcd 服务器上都需要执行上述步骤。但我这里只使用了 standalone,所以我的 etcd 服务就搞定了。

Kubernetes 通用配置

创建 Kubernetes 配置目录

$ sudo mkdir /etc/kubernetes

Kubernetes 通用配置文件

/etc/kubernetes/config 文件中,存储的是 Kubernetes 各组件的通用配置信息。

$ sudo vim /etc/kubernetes/config

KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.56.160:8080"

配置 kube-apiserver 服务

在 Kubernetes 的 master 主机上。

创建 kube-apiserver 配置文件

kube-apiserver 的专用配置文件为 /etc/kubernetes/apiserver。

$ sudo vim /etc/kubernetes/apiserver

###
# kubernetes system config
#
# The following values are used to configure the kube-apiserver
#

# The address on the local server to listen to.
KUBE_API_ADDRESS="--address=0.0.0.0"
#KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1"

# The port on the local server to listen on.
KUBE_API_PORT="--port=8080"

# Port minions listen on
KUBELET_PORT="--kubelet-port=10250"

# Comma separated list of nodes in the etcd cluster
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.56.160:2379"

# Address range to use for services
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=192.168.4.0/24"

# default admission control policies
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"

# Add your own!
KUBE_API_ARGS=""

创建 systemd 文件

$ sudo vim /lib/systemd/system/kube-apiserver.service

[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
After=etcd.service
Wants=etcd.service

[Service]
User=root
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/apiserver
ExecStart=/usr/bin/kube-apiserver \
        $KUBE_LOGTOSTDERR \
        $KUBE_LOG_LEVEL \
        $KUBE_ETCD_SERVERS \
        $KUBE_API_ADDRESS \
        $KUBE_API_PORT \
        $KUBELET_PORT \
        $KUBE_ALLOW_PRIV \
        $KUBE_SERVICE_ADDRESSES \
        $KUBE_ADMISSION_CONTROL \
        $KUBE_API_ARGS
Restart=on-failure
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

配置 kube-controller-manager 服务

创建 kube-controller-manager 配置文件

kube-controller-manager 的专用配置文件为 /etc/kubernetes/controller-manager

$ sudo vim /etc/kubernetes/controller-manager

KUBE_CONTROLLER_MANAGER_ARGS=""

创建 systemd 文件

$ sudo vim /lib/systemd/system/kube-controller-manager.service

[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=etcd.service
After=kube-apiserver.service
Requires=etcd.service
Requires=kube-apiserver.service

[Service]
User=root
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager \
        $KUBE_LOGTOSTDERR \
        $KUBE_LOG_LEVEL \
        $KUBE_MASTER \
        $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

配置 kube-scheduler 服务

创建 kube-scheduler 配置文件

kube-scheduler 的专用配置文件为 /etc/kubernetes/scheduler

$ sudo vim /etc/kubernetes/scheduler

KUBE_SCHEDULER_ARGS=""

创建 systemd 文件

$ sudo vim /lib/systemd/system/kube-scheduler.service

[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes

[Service]
User=root
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler \
        $KUBE_LOGTOSTDERR \
        $KUBE_MASTER
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

启动 Kubernetes master 节点的服务

$ sudo systemctl daemon-reload
$ sudo systemctl enable kube-apiserver kube-controller-manager kube-scheduler
$ sudo systemctl start kube-apiserver kube-controller-manager kube-scheduler

Kubernetes node 配置

Kubernetes node 节点也需要配置 /etc/kubernetes/config 文件,内容与 Kubernetes mater 节点一致。

flannel 配置

创建配置目录和文件

$ sudo vim /etc/default/flanneld.conf

# Flanneld configuration options  

# etcd url location.  Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://192.168.56.160:2379"

# etcd config key.  This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/coreos.com/network"

# Any additional options that you want to pass
#FLANNEL_OPTIONS=""

其中,FLANNEL_ETCD_PREFIX 选项就是刚才配置的 etcd 网络。

创建 systemd 文件

$ sudo vim /lib/systemd/system/flanneld.service

[Unit]
Description=Flanneld
Documentation=https://github.com/coreos/flannel
After=network.target
After=etcd.service
Before=docker.service

[Service]
User=root
EnvironmentFile=/etc/default/flanneld.conf
ExecStart=/usr/bin/flanneld \
        -etcd-endpoints=${FLANNEL_ETCD_ENDPOINTS} \
        -etcd-prefix=${FLANNEL_ETCD_PREFIX} \
        $FLANNEL_OPTIONS
ExecStartPost=/usr/bin/flannel/mk-docker-opts.sh -k DOCKER_OPTS -d /run/flannel/docker
Restart=on-failure
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
RequiredBy=docker.service

启动服务

$ sudo systemctl daemon-reload 
$ sudo systemctl enable flanneld
$ sudo systemctl start flanneld

查看服务是否启动

$ sudo systemctl status flanneld
● flanneld.service - Flanneld
   Loaded: loaded (/lib/systemd/system/flanneld.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-03-27 11:59:00 CST; 6min ago
...

docker 配置

docker 安装

通过 apt 来安装 docker。

$ sudo apt -y install docker.io

使 flannel 作用 docker 网络

修改 docker 的 systemd 配置文件。

$ sudo mkdir /lib/systemd/system/docker.service.d
$ sudo vim /lib/systemd/system/docker.service.d/flannel.conf

[Service]
EnvironmentFile=-/run/flannel/docker

重启 docker 服务。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

查看 docker 是否有了 flannel 的网络。

$ sudo ps -ef | grep docker

root     11285     1  1 15:14 ?        00:00:01 /usr/bin/dockerd -H fd:// --bip=192.168.4.129/25 --ip-masq=true --mtu=1472
...

配置 kubelet 服务

创建 kubelet 的数据目录

$ sudo mkdir /var/lib/kubelet

创建 kubelete 配置文件

kubelet 的专用配置文件为 /etc/kubernetes/kubelet

$ sudo vim /etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=127.0.0.1"
KUBELET_HOSTNAME="--hostname-override=192.168.56.161"
KUBELET_API_SERVER="--api-servers=http://192.168.56.160:8080"
# pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.RedHat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS="--enable-server=true --enable-debugging-handlers=true"

创建 systemd 文件

$ sudo vim /lib/systemd/system/kubelet.service

[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service

[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=-/etc/kubernetes/config
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
KillMode=process

[Install]
WantedBy=multi-user.target

启动 kubelet 服务

$ sudo systemctl daemon-reload
$ sudo systemctl enable kubelet
$ sudo systemctl start kubelet

配置 kube-proxy 服务

创建 kube-proxy 配置文件

kube-proxy 的专用配置文件为 /etc/kubernetes/proxy

$ sudo vim /etc/kubernetes/proxy

# kubernetes proxy config
# default config should be adequate
# Add your own!
KUBE_PROXY_ARGS=""

创建 systemd 文件

$ sudo vim /lib/systemd/system/kube-proxy.service

[Unit]
Description=Kubernetes Proxy
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target

[Service]
EnvironmentFile=-/etc/kubernetes/config
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

启动 kube-proxy 服务

$ sudo systemctl daemon-reload
$ sudo systemctl enable kube-proxy
$ sudo systemctl start kube-proxy

查询 node 状态

执行 kubectl get node 命令来查看 node 状态。都为 Ready 状态时,则说明 node 节点已经成功连接到 master,如果不是该状态,则需要到该节点上,定位下原因。可通过 journalctl -u kubelet.service 命令来查看 kubelet 服务的日志。

$ kubectl get node
NAME             STATUS     AGE
192.168.56.160   Ready      d
192.168.56.161   Ready      d

Kubernetes 测试

测试 Kubernetes 是否成功安装。

编写 yaml 文件

在 Kubernetes master 上创建一个 nginx.yaml,用于创建一个 nginx 的 ReplicationController。

$ vim rc_nginx.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  replicas: 2
  selector:
    name: nginx
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
      - name: nginx
        image: nginx

创建 pod

执行 kubectl create 命令创建 ReplicationController。该 ReplicationController 配置中有两个副本,并且我们的环境有两个 Kubernetes Node,因此,它应该会在两个 Node 上分别运行一个 Pod。
注意:这个过程可能会需要很长的时间,它会从网上拉取 nginx 镜像,还有 pod-infrastructure 这个关键镜像。

$ kubectl create -f rc_nginx.yaml

查询状态

执行 kubectl get pod 和 rc 命令来查看 pod 和 rc 状态。刚开始可能会处于 containerCreating 的状态,待需要的镜像下载完成后,就会创建具体的容器。pod 状态应该显示 Running 状态。

$ kubectl get rc
NAME      DESIRED   CURRENT   READY     AGE
nginx     2         2         2         m

$ kubectl get pod -o wide
NAME          READY     STATUS    RESTARTS   AGE       IP              NODE
nginx-j5x4   1/1       Running   0          m        192.168.4.130   192.168.56.160
nginx-bd28   1/1       Running   0          m        192.168.4.130   192.168.56.161

大功告成!!!

Docker 中部署 Kubernetes http://www.linuxidc.com/Linux/2016-07/133020.htm

Kubernetes 集群部署  http://www.linuxidc.com/Linux/2015-12/125770.htm

OpenStack, Kubernetes, Mesos 谁主沉浮  http://www.linuxidc.com/Linux/2015-09/122696.htm

Kubernetes 集群搭建过程中遇到的问题及解决  http://www.linuxidc.com/Linux/2015-12/125735.htm

Kubernetes 集群部署  http://www.linuxidc.com/Linux/2015-12/125770.htm

Ubuntu 16.04 下安装搭建 Kubernetes 集群环境  http://www.linuxidc.com/Linux/2017-02/140555.htm

Kubernetes 的详细介绍 :请点这里
Kubernetes 的下载地址 :请点这里

更多 Ubuntu 相关信息见 Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-04/142514.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计11157字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中