Kubernetes 建立私有雲

Docker Hub

主機名稱設定

  • 設定名稱
// Master
hostnamectl --static set-hostname  k8s-master

// Slave
hostnamectl --static set-hostname  k8s-node01
  • 修改master和slave上的hosts(/etc/hosts)
192.168.31.166   k8s-master
192.168.31.166   etcd
192.168.31.166   registry
192.168.31.199   k8s-node01
  • 關閉防火牆
systemctl disable firewalld.service
systemctl stop firewalld.service

開始安裝

Master

  • 軟體安裝
    • etcd
yum install etcd -y

// 編輯 /etc/etcd/etcd.conf
# [member]
ETCD_NAME="master"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
#[cluster]
ETCD_ADVERTISE_CLIENT_URLS="http://etcd:2379,http://etcd:4001"

// 啟動
systemctl start etcd // 启动etcd服务

// 檢查
etcdctl -C http://etcd:2379 cluster-health
etcdctl -C http://etcd:4001 cluster-health
  • flannel 安裝
yum install flannel -y

// 編輯 /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://etcd:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"

// 配置 key
etcdctl mk /atomic.io/network/config '{ "Network": "10.0.0.0/16" }'

// 啟動 flannel
systemctl start flanneld.service
systemctl enable flanneld.service
yum install kubernetes
  • kube-apiserver 配置 /etc/kubernetes/apiserver 文件
# The address on the local server to listen to.
KUBE_API_ADDRESS="--address=0.0.0.0"

# 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://etcd:2379"

# Address range to use for services
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

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

# Add your own!
KUBE_API_ARGS=""
  • 配置/etc/kubernetes/config 文件
# kubernetes system config
#
# The following values are used to configure various aspects of all
# kubernetes services, including
#
#   kube-apiserver.service
#   kube-controller-manager.service
#   kube-scheduler.service
#   kubelet.service
#   kube-proxy.service
# logging to stderr means we get it in the systemd journal
KUBE_LOGTOSTDERR="--logtostderr=true"

# journal message level, 0 is debug
KUBE_LOG_LEVEL="--v=0"

# Should this cluster be allowed to run privileged docker containers
KUBE_ALLOW_PRIV="--allow-privileged=false"

# How the controller-manager, scheduler, and proxy find the apiserver
KUBE_MASTER="--master=http://k8s-master:8080"
  • 啟動各個組件
systemctl start kube-apiserver.service
systemctl start kube-controller-manager.service
systemctl start kube-scheduler.service

Slave

  • flannel 安裝
yum install flannel

// 編輯/etc/sysconfig/flanneld 設定檔
FLANNEL_ETCD_ENDPOINTS="http://etcd:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"

//  啟動服務
systemctl start flanneld.service
systemctl enable flanneld.service
  • docker 安裝
  • Kubernetes 安裝
yum install kubernetes

// 編輯/etc/kubernetes/config 設定檔
KUBE_LOGTOSTDERR="--logtostderr=true"

# journal message level, 0 is debug
KUBE_LOG_LEVEL="--v=0"

# Should this cluster be allowed to run privileged docker containers
KUBE_ALLOW_PRIV="--allow-privileged=false"

# How the controller-manager, scheduler, and proxy find the apiserver
KUBE_MASTER="--master=http://k8s-master:8080"
  • kubelet
// 配置 /etc/kubernetes/kubelet 設定檔
KUBELET_ADDRESS="--address=0.0.0.0"

# The port for the info server to serve on
# KUBELET_PORT="--port=10250"

# You may leave this blank to use the actual hostname
KUBELET_HOSTNAME="--hostname-override=k8s-node-1"

# location of the api-server
KUBELET_API_SERVER="--api-servers=http://k8s-master:8080"

# pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

# Add your own!
KUBELET_ARGS=""
  • kube-proxy
  • 啟動服務
systemctl start kubelet.service
systemctl start kube-proxy.service
systemctl enable kubelet.service
systemctl enable kube-proxy.service

驗證服務

kubectl get endpoints
kubectl cluster-info  // 看cluster訊息
kubectl get nodes

參考資料