kubernetes 1.3.5 集群部署 step by step

kubernetes(简称k8s)是google开源的容器集群管理系统。使用kubernetes,可以方便的实现对容器的调度服务、负载均衡、自动伸缩等。本文主要介绍如何在centos7.2上部署kubernetes1.3.5集群。

k8s集群相关组件

master节点

  • etcd:etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。k8s使用etcd存储集群信息。
  • kube-apiserver:封装etcd操作,实现了一套REST接口。k8s其他组件通过apiserver进行交互。
  • kube-controller-manager:简称KCM,通过apiserver监听资源(容器、node)的变化并执行相应操作。
  • kube-scheduler:通过apiserver监听Pod的变化,对Pod进行调度。
  • kubectl:k8s提供的一个CLI程序,可以通过kebectl操作apiserver

node节点

  • flannel:CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具。可以实现每个node上的所有容器都在同一个子网中,并且不同node上的容器可以直接通信。
  • kubelet:相当于kubernetes在每个node节点上的agent。负责创建、监控、删除容器以及监控node。
  • kube-proxy:service代理及负载均衡
  • docker:
  • bridge-util:linux网桥管理套件

准备环境

安装新版的docker:

tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

yum install docker-engine -y

设置hosts,修改/etc/hosts

127.0.0.1  localhost  localhost.localdomain  VM_82_192_centos
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
<youre master ip here> kube-master
<your node1 ip here> kube-node1
<your node2 ip here> kube-node2

下载k8s源码,编辑kubernetes\cluster\centos\build.sh,修改要下载的k8s版本:

...
# Define flannel version to use.
FLANNEL_VERSION=${FLANNEL_VERSION:-"0.5.5"}

# Define etcd version to use.
ETCD_VERSION=${ETCD_VERSION:-"2.3.7"}

# Define k8s version to use.
K8S_VERSION=${K8S_VERSION:-"1.3.5"}
...

运行./build.sh all下载并提前对应版本的k8s到binaries目录中。

[root@VM_82_192_centos centos]# ./build.sh all
Download flannel release v0.5.5 ...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   608    0   608    0     0    474      0 --:--:--  0:00:01 --:--:--   475
100 3408k  100 3408k    0     0   647k      0  0:00:05  0:00:05 --:--:-- 1010k
Download etcd release v2.3.7 ...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   606    0   606    0     0    543      0 --:--:--  0:00:01 --:--:--   543
100 8347k  100 8347k    0     0  1430k      0  0:00:05  0:00:05 --:--:-- 1981k
Download kubernetes release v1.3.5 ...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   593    0   593    0     0    549      0 --:--:--  0:00:01 --:--:--   549
100 1418M  100 1418M    0     0  5921k      0  0:04:05  0:04:05 --:--:-- 6571k
Download docker-latest ...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 76963  100 76963    0     0  73290      0  0:00:01  0:00:01 --:--:-- 73367
/tmp/downloads/kubernetes/server ~/gopath/centos
~/gopath/centos
Done! All binaries are stored in /root/gopath/centos/binaries

注:如果想要自己编译k8s的话,主机的内存应在4G,硬盘应在10G以上。或者通过以下命令添加一个swap:

dd if=/dev/zero of=/var/myswap bs=1M count=4096
mkswap /var/myswap
swapon /var/myswap
swapon -s

这里为了方便起见,我使用了nfs在多个主机间共享文件,关于nfs的设置,可以参考:Configure NFS ServerCentOS 7 NFS服务器和客户端设置

接下来,我们将使用这些二进制包搭建一个k8s集群。

配置ETCD

修改/etc/etcd/etcd.conf中的localhost为kube-master
执行:

systemctl start etcd
systemctl enable etcd
alias etcdctl='etcdctl --peers="http://kube-master:2379"'
etcdctl ls

启动apiserver

./kube-apiserver --logtostderr=false --v=0 --etcd-servers=http://kube-master:2379 --insecure-bind-address=0.0.0.0 --allow-privileged=false --service-cluster-ip-range=10.254.0.0/16 --admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota --log-dir=/data/kubernetes --secure-port=0

启动KCM

./kube-controller-manager

启动scheduler

./kube-scheduler

使用kubectl验证apiserver是否正常启动:

# ./kubectl  version
Client Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.5", GitCommit:"b0deb2eb8f4037421077f77cb163dbb4c0a2a9f5", GitTreeState:"clean", BuildDate:"2016-08-11T20:29:08Z", GoVersion:"go1.6.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.5", GitCommit:"b0deb2eb8f4037421077f77cb163dbb4c0a2a9f5", GitTreeState:"clean", BuildDate:"2016-08-11T20:21:58Z", GoVersion:"go1.6.2", Compiler:"gc", Platform:"linux/amd64"}

配置flannel

在etcd中写入flannel配置,每个node节点上的flannel将会从这个大的CIDR中随机分配一个不冲突的子网给docker使用:

etcdctl   mk /kube/network/config '{"Network":"10.254.0.0/16"}

在node节点上编辑/etc/sysconfig/flanneld

FLANNEL_ETCD="http://kube-master:2379"
FLANNEL_ETCD_KEY="/kube/network"

在node上启动flannel:

systemctl start flannel
systemctl enable flannel
systemctl start docker

使用ifconfig查看docker0网桥网关是否在同一个网段中,如果不一致需要执行以下命令修改:

systemctl stop docker
ifconfig docker0 down
brctl delbr docker0
systemctl start docker

在node上启动kubelet

./kubelet --logtostderr=true --v=0 --api-servers=http://kube-master:8080 --address=0.0.0.0 --port=10250 --hostname-override=kube-node1 --allow-privileged=false --pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest --log-dir=/data/kubernetes

在node上启动kube-proxy

./kube-proxy --logtostderr=true --v=0 --master=http://kube-master:8080

测试集群是否可以正常工作

在master节点上使用kubectl创建一个redis容器:

kubectl run redis --image=redis

配置Dashboard

进入/kubernetes/cluster/addons/dashboard目录,注意由于这里的配置默认把RC和Service都创建在了kube-system这个namespace下,导致不能直接使用kubectl命令查看相关信息,所以我这里将namespace: kube-system给注释掉了,关于namespace的更多信息,可以参考:Namespaces。同时需要给dashboard添加一个参数,以便dashboard能够正确访问apiserver:

    spec:
      containers:
      - name: kibernetes-dashboard
        image: gcr.io/google_containers/kubernetes-dashboard-amd64:v1.1.1
        imagePullPolicy: IfNotPresent // 如果node节点上已经有这个镜像了,就不再拉取。默认每次创建时都会拉取镜像
        resources:
          # keep request = limit to keep this container in guaranteed class
          limits:
            cpu: 100m
            memory: 50Mi
          requests:
            cpu: 100m
            memory: 50Mi
        ports:
        - containerPort: 9090
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30
        args:
        - --apiserver-host=http:/ / <your master ip here> :8080 // 这里要改为master节点的ip

修改dashboard-service.yaml,设置Node Port,这样访问节点的ip+port就可以访问dashboard了:

# This file should be kept in sync with cluster/gce/coreos/kube-manifests/addons/dashboard/dashboard-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: k8s-dashboard
  labels:
    k8s-app: k8s-dashboard
    #kubernetes.io/cluster-service: "true"
spec:
  type: NodePort
  selector:
    k8s-app: k8s-dashboard
  ports:
  - port: 80
    targetPort: 9090
    nodePort: 30001

创建dashboard rc和service:

# kubectl create -f dashboard-controller.yaml
# kubectl create -f dashboard-service.yaml

使用kubectl查看Pod的信息:

# kubectl get pod
NAME                         READY     STATUS    RESTARTS   AGE
k8s-dashboard-v1.1.1-4h4df   1/1       Running   0          55m
k8s-dashboard-v1.1.1-x6sl6   1/1       Running   0          1h
redis-4282552436-neov9       1/1       Running   0          1h

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值