Chinaunix首页 | 论坛 | 博客
  • 博客访问: 259903
  • 博文数量: 55
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3427
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-18 20:37
个人简介

哈哈

文章分类

全部博文(55)

分类: 云计算

2016-01-13 14:27:38

Kubernets 分为两种节点:master节点和minion节点,前者是管理节点,后者是容器运行的工作节点。部署时管理节点和工作节点可以部署在同一台机器上,也可分别单独工作在不同机器上。所以部署时最少需要一台机器,这样我们学习的时候可以在一台虚拟机上进行安装。

这里我使用了两台虚机,每台虚机的操作系统是Ubuntu14.04 ,其中一台虚机上同时运行master节点和minion节点。

节点

数量

地址

用户名

密码

master + minion

1

10.158.240.100

kuber

123456

minion

1

10.158.240.101

kuber

123456


一、docker的安装

每台minion节点上都需要安装docker。执行下面命令

    $  curl -sSL https://get.docker.com   | sudo sh

设置免sudo 使用docker

    添加用户组

        $ sudo groupadd docker

        $ sudo gpasswd -a kuber docker   //kuber替换成你自己得用户名

        $ sudo service docker restart

注销后重新登录

查看docker是否安装成功

$ docker version


二、设置用户无密码sudo

部署中如果使用的为非root账号,需要设置普通用户账号sudo权限不需要输入密码,减少后续部署过程中的交互情况。每台机器都要设置

1修改/etc/sudoers文件

sudo vim /etc/sudoers 

修改:%sudo ALL=(ALL:ALL) ALL为:%sudo ALL=NOPASSWD: ALL

2添加普通用户到sudo

$ sudo adduser kuber sudo   //替换kuber为你的用户名


三、设置ssh 登录minion 节点免密码

部署过程中需要从master机器ssh以及scpnode节点,因此需要设置master机器到其他minion免密码登陆。在master机器上执行如下命令 

    1生成rsa key

    $ ssh-keygen

    2拷贝pub key到所有minion的虚机

        $ ssh-copy-id  kuber@10.158.240.100   //替换用户名及地址


四、安装bridge-utils

Kubernets需要操作bridge,因此需要安装bridge-utils支持。命令如下:

    $ sudo apt-get install bridge-utils


五、安装kubernets

安装kubernets只需要在master节点操作即可,master会自动给minion节点远程安装kubernets组件。

1)下载kubernets代码

$  git clone https://github.com/kubernetes/kubernetes.git

$  git checkout v1.2.0-alpha.5   //这里我们使用最新的版本

2)下载源码二进制可执行版本及解压生成

$ cd kubernetes/cluster/ubuntu

$ ./download-release.sh

  因为国内网络问题,下载很慢,经常下载错误。可以从以下地址提前把包下载好

    https://github.com/coreos/flannel/releases/download/v0.5.5/flannel-0.5.5-linux-amd64.tar.gz

    https://github.com/coreos/etcd/releases/download/v2.2.1/etcd-v2.2.1-linux-amd64.tar.gz

    https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v1.1.2/kubernetes.tar.gz

   也可以从百度云盘下 http://pan.baidu.com/s/1hqT1okk

  把下载好的包拷贝到 kubernetes/cluster/ubuntu目录下,修改download-release.sh,并执行,diff文件如下


diff --git a/cluster/ubuntu/download-release.sh b/cluster/ubuntu/download-release.sh
index 3fce5d0..ea6100f 100755
--- a/cluster/ubuntu/download-release.sh
+++ b/cluster/ubuntu/download-release.sh
@@ -24,7 +24,7 @@ function cleanup {
   # cleanup work
   rm -rf flannel* kubernetes* etcd* binaries
 }
-trap cleanup SIGHUP SIGINT SIGTERM
+trap  SIGHUP SIGINT SIGTERM
 
 pushd $(dirname $0)
 mkdir -p binaries/master
@@ -34,7 +34,8 @@ mkdir -p binaries/minion
 FLANNEL_VERSION=${FLANNEL_VERSION:-"0.5.5"}
 echo "Prepare flannel ${FLANNEL_VERSION} release ..."
 grep -q "^${FLANNEL_VERSION}\$" binaries/.flannel 2>/dev/null || {
-  curl -L  https://github.com/coreos/flannel/releases/download/v${FLANNEL_VERSION}/flannel-${FLANNEL_VERSION}-linux-amd64.tar.gz -o flannel.tar.gz
+  #curl -L  https://github.com/coreos/flannel/releases/download/v${FLANNEL_VERSION}/flannel-${FLANNEL_VERSION}-linux-amd64.tar.gz -o flannel.tar.gz
+  mv flannel-${FLANNEL_VERSION}-linux-amd64.tar.gz flannel.tar.gz
   tar xzf flannel.tar.gz
   cp flannel-${FLANNEL_VERSION}/flanneld binaries/master
   cp flannel-${FLANNEL_VERSION}/flanneld binaries/minion
@@ -46,7 +47,8 @@ ETCD_VERSION=${ETCD_VERSION:-"2.2.1"}
 ETCD="etcd-v${ETCD_VERSION}-linux-amd64"
 echo "Prepare etcd ${ETCD_VERSION} release ..."
 grep -q "^${ETCD_VERSION}\$" binaries/.etcd 2>/dev/null || {
-  curl -L https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/${ETCD}.tar.gz -o etcd.tar.gz
+  #curl -L https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/${ETCD}.tar.gz -o etcd.tar.gz
+  mv ${ETCD}.tar.gz  etcd.tar.gz
   tar xzf etcd.tar.gz
   cp ${ETCD}/etcd ${ETCD}/etcdctl binaries/master
   echo ${ETCD_VERSION} > binaries/.etcd
@@ -56,7 +58,7 @@ grep -q "^${ETCD_VERSION}\$" binaries/.etcd 2>/dev/null || {
 KUBE_VERSION=${KUBE_VERSION:-"1.1.2"}
 echo "Prepare kubernetes ${KUBE_VERSION} release ..."
 grep -q "^${KUBE_VERSION}\$" binaries/.kubernetes 2>/dev/null || {
-  curl -L https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v${KUBE_VERSION}/kubernetes.tar.gz -o kubernetes.tar.gz
+  #curl -L https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v${KUBE_VERSION}/kubernetes.tar.gz -o kubernetes.tar.gz
   tar xzf kubernetes.tar.gz
   pushd kubernetes/server
   tar xzf kubernetes-server-linux-amd64.tar.gz





3)配置kubernets

修改 kubernetes/cluster/ubuntu/config-default.sh

    export nodes=${nodes:-"kuber@10.158.240.100  kuber@10.158.240.101"}

    role=${role:-"ai i "}

    export NUM_MINIONS=${NUM_MINIONS:-2}


上面的变量定义如下:

    nodes: 指定所有的节点地址和对应的用户名,包括master节点和minion节点。

    role:   指定上面nodes对应位置的节点的角色,主要包括amasteriminion。

    NUM_MINIONS :  minion节点的数量。


4)部署

切换到kubernetes/cluster目录,执行如下命令:

$ KUBERNETES_PROVIDER=ubuntu ./kube-up.sh

该命令会远程部署minion


5)安装Kubernets插件

    1)修改config-default.sh文件,开启DNSUI等(默认即为开启,不需要修改)

    2)修改deployAddons.sh文件(这里为一个bug

     KUBECTL="${KUBE_ROOT}/cluster/kubectl.sh"修改为:KUBECTL="kubectl"

3)添加kubectl的路径到PATH 环境变量中

vim  ~/.barshrc,添加如下一行

      export PATH=$PATH:~/kubernetes/cluster/ubuntu/binaries/ 

      $ source ~/.bashrc    

     路径是kubectl可执行文件的绝对路径。

  4)部署插件,执行如下命令

     KUBERNETES_PROVIDER=ubuntu ./deployAddons.sh

6) 验证部署是否成功,执行如下命令查看minion节点是否安装成功:

    $ kubectl get nodes

NAME             LABELS                            STATUS    AGE

10.158.240.100   kubernetes.io/hostname=10.158.240.100   Ready     4d

10.158.240.101   kubernetes.io/hostname=10.158.240.101   Ready     4d


六、设置docker 仓库镜像

因为国内网络访问docker hub比较慢,我们可以使用daoclouddocker仓库镜像进行加速,在每台minion上执行如下命名,添加daocloud的仓库镜像路径。

echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://988b4023.m.daocloud.io\"" | sudo tee -a /etc/default/docker


sudo service docker restart

该脚本可以将--registry-mirror加入到你的Docker配置文件/etc/default/docker中。适用于Ubuntu14.04,其他版本可能有细微不同。


注意:设置docker仓库镜像要放在安装完kubernets后执行,否则会被kubernets把配置给改掉。


七、下载kubernets使用的基础镜像

由于kubernets创建pod时,要使用pause的镜像,因为国内网络的原因,无法下载,会导致创建pod失败。这里我们需要在每台minion上下载好这个镜像

    $ docker pull kubernetes/pause

    $ docker tag kubernetes/pause gcr.io/google_containers/pause:0.8.0

八、创建pod,验证

$ kubectl create -f pod.yaml

$ kubectl get pods

pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80



阅读(3402) | 评论(0) | 转发(0) |
0

上一篇:go语言开发环境的搭建

下一篇:没有了

给主人留下些什么吧!~~