nescafeboy1 发表于 2018-9-16 07:41:04

Kubernetes集群测试环境搭建

1、规划:
  节点:
  Master:
  192.168.88.71
  Node:
  192.168.88.81
  环境:
  # cat /etc/redhat-release

  CentOS Linux>  # uname -a
  Linux localhost.localdomain3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64GNU/Linux
  禁用防火墙:
  systemctl disable firewalld
  systemctl stop firewalld
2、安装:
  Master:
  yum -y install etcd kubernetes flannel
  Slave:
  yum -y install docker kubernetes flannel
3、Master配置:
  Master:
(1)etcd配置:
  # more/usr/lib/systemd/system/etcd.service
  
  Description=Etcd Server
  After=network.target
  
  Type=simple
  WorkingDirectory=/var/lib/etcd/
  EnvironmentFile=-/etc/etcd/etcd.conf
  ExecStart=/usr/bin/etcd
  
  WantedBy=multi-user.target
  # more/etc/etcd/etcd.conf
  ETCD_NAME=default
  ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
  ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
(2)flannel配置:
  # more/usr/lib/systemd/system/flanneld.service
  
  Description=Flanneld overlay address etcdagent
  After=network.target
  After=network-online.target
  Wants=network-online.target
  #After=etcd.service
  Before=docker.service
  
  Type=notify
  EnvironmentFile=/etc/sysconfig/flanneld
  #EnvironmentFile=-/etc/sysconfig/docker-network
  ExecStart=/usr/bin/flanneld-etcd-endpoints=${FLANNEL_ETCD} $FLANNEL_OPTIONS
  #ExecStartPost=/usr/libexec/flannel/mk-docker-opts.sh-k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
  #Restart=on-failure
  
  WantedBy=multi-user.target
  RequiredBy=docker.service
  # more/etc/sysconfig/flanneld
  FLANNEL_ETCD="http://192.168.88.71:2379"
  FLANNEL_ETCD_KEY="/atomic.io/network"
  etcdctl set /atomic.io/network/config '{"Network": "10.1.0.0/16" }'
(3)apiserver配置:
  # more/usr/lib/systemd/system/kube-apiserver.service
  
  Description=Kubernetes API Server
  Documentation=https://github.com/GoogleCloudPlatform/kubernetes
  After=etcd.service
  Wants=etcd.service
  
  EnvironmentFile=/etc/kubernetes/apiserver
  ExecStart=/usr/bin/kube-apiserver \
  $KUBE_API_ARGS
  Restart=on-failure
  Type=notify
  LimitNOFILE=65536
  
  WantedBy=multi-user.target
  # more/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=10.1.0.0/16 --se
  rvice-node-port-range=1-65535--admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ResourceQuota--logtostderr=false --log-dir=/va
  r/log/kubernetes --v=2"
(4)controller-manager配置:
  # more/usr/lib/systemd/system/kube-controller-manager.service
  
  Description=Kubernetes Controller Manager
  Documentation=https://github.com/GoogleCloudPlatform/kubernetes
  After=kube-apiserver.service
  Requires=kube-apiserver.service
  
  EnvironmentFile=/etc/kubernetes/controller-manager
  ExecStart=/usr/bin/kube-controller-manager\
  $KUBE_CONTROLLER_MANAGER_ARGS
  Restart=on-failure
  LimitNOFILE=65536
  
  WantedBy=multi-user.target
  # more/etc/kubernetes/controller-manager
  KUBE_CONTROLLER_MANAGER_ARGS="--master=http://192.168.88.71:8080--logtostderr=false --log-dir=/var/log/kubernetes --v=2"
(5)scheduler配置:
  
  Description=Kubernetes Scheduler Plugin
  Documentation=https://github.com/GoogleCloudPlatform/kubernetes
  After=kube-apiserver.service
  Requires=kube-apiserver.service
  
  EnvironmentFile=-/etc/kubernetes/scheduler
  ExecStart=/usr/bin/kube-scheduler$KUBE_SCHEDULER_ARGS
  Restart=on-failure
  LimitNOFILE=65536
  
  WantedBy=multi-user.target
  # more/etc/kubernetes/scheduler
  KUBE_SCHEDULER_ARGS="--master=http://192.168.88.71:8080--logtostderr=false --log-dir=/var/log/kubernetes --v=2"
4、Slave配置:
(1)Flannel配置:
  # more/usr/lib/systemd/system/flanneld.service
  
  Description=Flanneld overlay address etcdagent
  After=network.target
  After=network-online.target
  Wants=network-online.target
  #After=etcd.service
  Before=docker.service
  
  Type=notify
  EnvironmentFile=/etc/sysconfig/flanneld
  #EnvironmentFile=-/etc/sysconfig/docker-network
  ExecStart=/usr/bin/flanneld-etcd-endpoints=${FLANNEL_ETCD} $FLANNEL_OPTIONS
  #ExecStartPost=/usr/libexec/flannel/mk-docker-opts.sh-k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
  #Restart=on-failure
  
  WantedBy=multi-user.target
  RequiredBy=docker.service
  # more/etc/sysconfig/flanneld
  FLANNEL_ETCD="http://192.168.88.71:2379"
  FLANNEL_ETCD_KEY="/atomic.io/network"
  注:
  启动flanneld服务之前,需要在master etcd中添加一条网络配置记录,该配置用于flanneld分配给每个docker的虚拟IP地址段。
  etcdctl set /atomic.io/network/config '{"Network": "10.1.0.0/16" }'
  flannel将覆盖docker0网桥,故先停止docker服务。设置docker0的网桥IP地址:
  mk-docker-opts.sh -i
  source /run/flannel/subnet.env
  ifconfig docker0 ${FLANNEL_SUBNET}
(2)Kubelet配置:
  # more/usr/lib/systemd/system/kubelet.service
  
  Description=Kubernetes Kubelet Server
  Documentation=https://github.com/GoogleCloudPlatform/kubernetes
  After=docker.service
  Requires=docker.service
  
  WorkingDirectory=/var/lib/kubelet
  #EnvironmentFile=-/etc/kubernetes/config
  EnvironmentFile=-/etc/kubernetes/kubelet
  ExecStart=/usr/bin/kubelet \
  $KUBELET_ARGS
  Restart=on-failure
  
  WantedBy=multi-user.target
  # more/etc/kubernetes/kubelet
  KUBELET_ARGS="--api-servers=http://192.168.88.71:8080--hostname-override=192.168.88.10 --cluster_dns=10.1.0.100 --cluster_domain=cluster.local--log
  tostderr=false--log-dir=/var/log/kubernetes --v=2--pod_infra_container_image=index.tenxcloud.com/google_containers/pause-amd64:3.0"
(3)kube-proxy配置:
  # more/usr/lib/systemd/system/kube-proxy.service
  
  Description=Kubernetes Kube-Proxy Server
  Documentation=https://github.com/GoogleCloudPlatform/kubernetes
  After=network.target
  Requires=network.service
  
  EnvironmentFile=-/etc/kubernetes/proxy
  ExecStart=/usr/bin/kube-proxy \
  $KUBE_PROXY_ARGS
  Restart=on-failure
  LimitNOFILE=65536
  
  WantedBy=multi-user.target
  # more/etc/kubernetes/proxy
  KUBE_PROXY_ARGS="--master=http://192.168.88.71:8080--logtostderr=false --log-dir=/var/log/kubernetes --v=2"
5、启动:
(1)master:
  systemctl start flanneld
  systemctl status flanneld
  systemctl start etcd
  systemctl status etcd
  systemctl start kube-apiserver.service
  systemctl status kube-apiserver.service
  systemctl startkube-controller-manager.service
  systemctl status kube-controller-manager.service
  systemctl start kube-scheduler.service
  systemctl status kube-scheduler.service
(2)slave:
  systemctl start docker
  systemctl status docker
  systemctl start kubelet
  systemctl status kubelet
  systemctl start kube-proxy.service
  systemctl status kube-proxy.service
(3)测试:
  kubectl get node
6、Dashboard:
  kubectl create -f kubernetes-dashboard.yaml
  more kubernetes-dashboard.yaml
  # Copyright 2015 Google Inc. All RightsReserved.
  #
  # Licensed under the Apache License,Version 2.0 (the "License");
  # you may not use this file except incompliance with the License.
  # You may obtain a copy of the License at
  #
  #    http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law oragreed to in writing, software
  # distributed under the License isdistributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANYKIND, either express or implied.
  # See the License for the specific languagegoverning permissions and
  # limitations under the License.

  # Configuration to deploy>  #
  # Example usage: kubectl create -f
  kind: Deployment
  apiVersion: extensions/v1beta1
  metadata:
  labels:
  app: kubernetes-dashboard
  version: v1.1.1
  name: kubernetes-dashboard
  namespace: kube-system
  spec:
  replicas: 1
  selector:
  matchLabels:
  app: kubernetes-dashboard
  template:
  metadata:
  labels:
  app: kubernetes-dashboard
  spec:
  containers:
  - name: kubernetes-dashboard
  image: index.tenxcloud.com/google_containers/kubernetes-dashboard-amd64:v1.4.1
  imagePullPolicy: Always
  ports:
  - containerPort: 9090
  protocol: TCP
  args:
  # Uncomment the following line to manually specify Kubernetes API serverHost
  # If not specified, Dashboard willattempt to auto discover the API server and connect
  # to it. Uncomment only if the default does not work.
  - --apiserver-host=http://192.168.88.71:8080
  livenessProbe:
  httpGet:
  path: /
  port: 9090
  initialDelaySeconds: 30
  timeoutSeconds: 30
  ---
  kind: Service
  apiVersion: v1
  metadata:
  labels:
  app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
  spec:
  type: NodePort
  ports:
  -port: 80
  targetPort: 9090
  selector:
  app: kubernetes-dashboard
  访问:
  http://192.168.88.71:8080/ui

页: [1]
查看完整版本: Kubernetes集群测试环境搭建