Centos7.3下二进制文件安装kubernetes1.11

本文在centos7.3环境中进行安装
kubernetes版本为1.11.1
etcd版本为3.3.9

1. 下载相关文件

1.1 首先下载k8s相关文件

登录github-kubernetes,点击releases连接:

image.png

找到1.11.1版本,并点击其中的CHANGELOG-1.11.md连接,如图:

image.png

就能进入具体的下载列表界面,我也不知道要哪些东东,先下载下来,如图:


image.png

image.png

下载下来的文件如下图所示:


image.png

1.2 下载etcd

登录github-etcd,找到对应的版本,如下图所示:

image.png

2. 安装前的配置

2.1 防火墙

查看防火墙的状态:

firewall-cmd --state

关闭防火墙:

systemctl stop firewall
systemctl disable firewall

2.2 selinux

关闭selinux:

vi /etc/selinux/config

将SELINUX=enforcing改为SELINUX=disabled,wq保存退出。

2.3 swap

关闭swap

swapoff -a
vi /etc/fstab

将swap那一行注释掉。

3. 安装Docker

删除旧的docker

$sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-selinux \
                      docker-engine-selinux \
                      docker-engine

安装需要的组件:

sudo yum install -y yum-utils \
  device-mapper-persistent-data \ lvm2

在yum中配置docker地址:

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

如果连不上,则使用下面这个:

sudo yum-config-manager --add-repo http://mirrors/aliyun.com/docker-ce/linux/centos/docker-ce.repo

再配置两个:

sudo yum-config-manager --enable docker-ce-edge
sudo yum-config-manager --enable docker-ce-test

安装docker,这一步需要一点时间,有可能还会连不上docker镜像网站

sudo yum install docker-ce

安装完成之后,启动docker:

sudo systemctl start docker

启动完成之后,使用下面的命令测试docker有没有启动成功:

sudo docker run hello-world

第一次安装时,会去拉镜像,然后会看到Hello from Docker!这样的信息,表示安装成功。

4. Node节点安装

我只有一台服务器,今天第一次安装,不一定能成功,尤其是因为不知道kubernetesmasternode能不能安装在一起,错了再说吧。

4.1 准备工作

Node节点主要是需要安装kubeletkube-proxy。这两个文件在上面下面的安装包里有。
之前下面的安装包有好几个,好像server的那个安装包,里面什么都有了,我们先解压那个安装包:

tar -zxvf kubernetes-server-linux-amd64.tar.gz

解压之后,进入server/bin目录,看一下有哪些东东:

image.png

我们需要将kubeletkube-proxy两个文件复制到/usr/bin目录下面去,因为当前命令行已经在bin目录了,使用下面的命令进行复制:

cp kubelet kube-proxy /usr/bin/

4.2 安装kube-proxy

首先编辑proxy的配置文件:/usr/lib/systemd/system/kube-proxy.service

vi /usr/lib/systemd/system/kube-proxy.service

[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
Requires=network.service
 
[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

编辑完了之后,wq保存退出,接着开始编辑EnvironmentFile参数中指定的两个配置文件,编辑这两个配置文件之前,首先需要创建一个配置文件目录:

mkdir -p /etc/kubernetes

后面所有的配置文件都放在这里:

vi /etc/kubernetes/proxy

KUBE_PROXY_ARGS=""

vi /etc/kubernetes/config

KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_LOG_DIR="--log-dir=/var/log/kubernetes"
KUBE_ALLOW_PRIV="--allow_privileged=false"
KUBE_MASTER="--master=http://172.28.8.193:8080"

这两个文件,分别都是编辑完了之后,wq保存退出。
接下来,启动服务,并验证是否启动成功:

[root@greenvm-y16558v2 kubernetes]# systemctl daemon-reload
[root@greenvm-y16558v2 kubernetes]# systemctl start kube-proxy.service
[root@greenvm-y16558v2 kubernetes]# netstat -lntp | grep kube-proxy
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      27624/kube-proxy    
tcp6       0      0 :::10256                :::*                    LISTEN      27624/kube-proxy    

4.3 安装kubelet服务

跟上面的类似,首先需要编辑服务的配置文件,vim /usr/lib/systemd/system/kubelet.service

vi /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
KillMode=process
 
[Install]
WantedBy=multi-user.target

上面的参数WorkingDirectory所指定的目录需要创建:

mkdir -p /var/lib/kubelet

接下来开始编辑配置文件:

vi /etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=172.28.8.193"
KUBELET_API_SERVER="--api-servers=http://172.28.8.193:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=reg.docker.tb/harbor/pod-infrastructure:latest"
KUBELET_ARGS="--enable-server=true --enable-debugging-handlers=true --fail-swap-on=false --kubeconfig=/var/lib/kubelet/kubeconfig"

上面的配置中,hostname表示的是当前node的名称。
再编辑一下kubeconfig的配置:

vi /var/lib/kubelet/kubeconfig

apiVersion: v1
kind: Config
users:
- name: kubelet
clusters:
- name: kubernetes
  cluster:
    server: http://172.28.8.193:8080
contexts:
- context:
    cluster: kubernetes
    user: kubelet
  name: service-account-context
current-context: service-account-context

最后,启动并验证服务:

[root@greenvm-y16558v2 kubernetes]# swapoff -a
[root@greenvm-y16558v2 kubernetes]# systemctl daemon-reload
[root@greenvm-y16558v2 kubernetes]# systemctl start kubelet.service
[root@greenvm-y16558v2 kubernetes]# netstat -tnlp | grep kubelet
tcp        0      0 127.0.0.1:38496         0.0.0.0:*               LISTEN      27972/kubelet       
tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      27972/kubelet       
tcp6       0      0 :::10250                :::*                    LISTEN      27972/kubelet       
tcp6       0      0 :::10255                :::*                    LISTEN      27972/kubelet       

5. 安装Master

5.1 安装etcd

在安装master上的其它k8s组件之前,首先要安装etcd,前面我们已经下载过了,现在需要解压一下:

tar -zxvf etcd-v3.3.9-linux-amd64.tar.gz

然后将etcdetcdctl复制到/usr/bin目录下:

cp etcd etcdctl /usr/bin/

接下来编辑etcd的服务配置文件:

vi /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

创建上面配置中的两个目录:

mkdir -p /var/lib/etcd && mkdir -p /etc/etcd/

编辑环境文件:

vi /etc/etcd/etcd.conf

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.28.8.193:2379"

最后,启动etcd服务,并验证其正确性:

[root@greenvm-y16558v2 k8s]# systemctl daemon-reload
[root@greenvm-y16558v2 k8s]# systemctl start etcd.service
[root@greenvm-y16558v2 k8s]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://172.28.8.193:2379
cluster is healthy

5.2 安装kube-apiserver

首先,进入之前解压的目录中,/server/bin,把kube-apiserver可执行文件复制到/usr/bin目录中:

cp kube-apiserver /usr/bin/

编辑服务文件:

vi /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

编辑 环境文件:

vi /etc/kubernetes/apiserver

KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http://172.28.8.193:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.0.0.0/24"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""

启动服务,并验证其正确性:

[root@greenvm-y16558v2 bin]# systemctl daemon-reload
[root@greenvm-y16558v2 bin]# systemctl start kube-apiserver.service
[root@greenvm-y16558v2 bin]# netstat -tnlp | grep kube-api
tcp6       0      0 :::6443                 :::*                    LISTEN      29228/kube-apiserve 
tcp6       0      0 :::8080                 :::*                    LISTEN      29228/kube-apiserve 

5.3 安装kube-controller-manager

首先将kube-controller-namager可执行文件复制到/usr/lib目录中:

cp kube-controller-manager /usr/bin/

编辑启动文件:

vi /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

编辑环境文件:

vi /etc/kubernetes/controller-manager

KUBE_MASTER="--master=http://172.28.8.193:8080"
KUBE_CONTROLLER_MANAGER_ARGS=""

启动服务并验证其正确性:

[root@greenvm-y16558v2 bin]# systemctl daemon-reload
[root@greenvm-y16558v2 bin]# systemctl start kube-controller-manager.service
[root@greenvm-y16558v2 bin]# netstat -lntp | grep kube-controll
tcp6       0      0 :::10252                :::*                    LISTEN      29431/kube-controll 

5.4 安装kube-scheduler

首先将kube-scheduler可执行文件复制到/usr/bin目录下:

cp kube-scheduler /usr/bin/

编辑启动文件:

vi /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

编辑环境配置文件:

vi /etc/kubernetes/scheduler

KUBE_MASTER="--master=http://172.28.8.193:8080"
KUBE_SCHEDULER_ARGS="--logtostderr=true --log-dir=/var/log/kubernetes --v=2"

启动服务并验证其正确性:

[root@greenvm-y16558v2 bin]# systemctl daemon-reload
[root@greenvm-y16558v2 bin]# systemctl start kube-scheduler.service
[root@greenvm-y16558v2 bin]# netstat -lntp | grep kube_scheduler
[root@greenvm-y16558v2 bin]# netstat -lntp | grep kube_schedule
[root@greenvm-y16558v2 bin]# netstat -lntp | grep kube-schedule
tcp6       0      0 :::10251                :::*                    LISTEN      29629/kube-schedule 

5.5 配置Profile

server/bin设置为默认搜索路径,应该就是像java设置环境变量一样:

[root@greenvm-y16558v2 bin]# pwd
/home/software/k8s/kubernetes-server/server/bin
[root@greenvm-y16558v2 bin]# sed -i '$a export PATH=$PATH:/home/software/k8s/kubernetes-server/server/bin/' /etc/profile[root@greenvm-y16558v2 bin]# source /etc/profile

5.6 安装kubectl

这个最简单,将server/bin目录下的kubectl可执行文件复制到/usr/bin目录下即可:

[root@greenvm-y16558v2 bin]# cp kubectl /usr/bin/
[root@greenvm-y16558v2 bin]# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   {"health":"true"}   

6 验证

最后查看一下有没有安装成功:

[root@greenvm-y16558v2 bin]# kubectl get nodes
NAME               STATUS    ROLES     AGE       VERSION
greenvm-y16558v2   Ready     <none>    5m        v1.11.1

7 后续

本来以为一切都好了,结果发现在拉镜像创建pod时,一直是不成功的,比如官网上的例子:

kubectl run kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v1 --port=8080

通过如下命令查看时,会发现pod一直在创建中:

[root@greenvm-y16558v2 bin]# kubectl get pods
NAME                                   READY     STATUS              RESTARTS   AGE
kubernetes-bootcamp-7d48d75958-w9hgp   0/1       ContainerCreating   0          52s

然后通过kubectl describe pod xx查看具体的原因,发现了如下截图中的错误:

image.png

即:

Warning FailedCreatePodSandBox ...failed pulling image "k8s.gcr.io/pause:3.1"...

出现这种问题,是因为国内防问不了国外呀,这个可以理解为是一个初始镜像,后续的所有用户创建的镜像,都需要通过这个默认的镜像来启动,而这个pull不下来的话,一切都白瞎。
所以需要从国内的仓库取下来,然后打个tag。

[root@greenvm-y16558v2 docker]# docker pull registry.cn-qingdao.aliyuncs.com/minsec/pause-amd64:3.1
3.1: Pulling from minsec/pause-amd64
7675586df687: Pull complete 
Digest: sha256:fcaff905397ba63fd376d0c3019f1f1cb6e7506131389edbcb3d22719f1ae54d
Status: Downloaded newer image for registry.cn-qingdao.aliyuncs.com/minsec/pause-amd64:3.1
[root@greenvm-y16558v2 docker]# docker tag registry.cn-qingdao.aliyuncs.com/minsec/pause-amd64:3.1 k8s.gcr.io/pause:3.1

重启kubelet

[root@greenvm-y16558v2 bin]# systemctl stop kubelet.service
[root@greenvm-y16558v2 bin]# systemctl daemon-reload
[root@greenvm-y16558v2 bin]# systemctl start kubelet.service

再重新创建pod,查看poddeployment

[root@greenvm-y16558v2 bin]# kubectl run kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v1 --port=8080
deployment.apps/kubernetes-bootcamp created
[root@greenvm-y16558v2 bin]# kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1         1         1            1           9s
[root@greenvm-y16558v2 bin]# kubectl get pods
NAME                                   READY     STATUS    RESTARTS   AGE
kubernetes-bootcamp-7d48d75958-nllfb   1/1       Running   0          15s

一切正常!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容

  • 一、组件版本和配置策略 1、组件版本 Kubernetes 1.10.4Docker 18.03.1-ceEtcd...
    Horne阅读 3,566评论 1 50
  • 一:简介 二:基础环境安装 1.系统环境 2.关闭selinux 3.关闭防火墙 4.修改主机名 5.添加host...
    Goun阅读 13,462评论 5 10
  • docker实现了更便捷的单机容器虚拟化的管理, docker的位置处于操作系统层与应用层之间; 相对传统虚拟化(...
    Harvey_L阅读 19,894评论 3 44
  • 前言 尝到k8s甜头以后,我们就想着应用到生产环境里去,以提高业务迭代效率,可是部署在生产环境里有一个要求,就是k...
    我的橙子很甜阅读 12,905评论 0 15
  • 感赏今天给老公打电话他在忙,很快就回过来了,给儿子聊了会,儿子挺开心的。 感赏今天儿子自己上床睡觉了,不用我再哄着...
    幸福快乐的阅读 326评论 0 1