1. 程式人生 > >kubernetes 1.9安裝

kubernetes 1.9安裝

1.機器準備

機器列表

hostname ip docker版本 系統版本
master 192.168.6.39 1.13.1 Centos7.1
node1 192.168.6.163 1.13.1 Centos7.1

同步所有叢集節點host檔案

#cat /etc/hosts
192.168.6.39 master
192.168.6.163 node1

Master節點必需元件

元件名稱 作用 版本號
etcd 非關係型資料庫 v3.2.15
kube-apiserver 核心元件,所有元件均與其通訊,提供Http Restful介面 v1.9.6
kube-controller-manager 叢集內部管理中心,負責各類資源管理,如RC,Pod,名稱空間等 v1.9.6
kube-scheduler 排程元件,負責node的排程 v1.9.6

Node節點必需元件

元件名稱 作用 版本號
etcd 非關係型資料庫 v3.2.15
kubelet Node節點中核心元件,負責執行Master下發的任務 v1.9.6
kube-proxy 代理,負責kubelet與apiserver網路。相當於負載均衡,將請求轉到後端pod中 v1.9.6
flannel 網路規劃服務

2.Master節點的安裝與配置

安裝 etcd、docker和Kubernetes

yum -y install etcd docker kubernetes

編輯配置檔案/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";
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
;

編輯配置檔案/etc/kubernetes/config

KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://localhost:8080"

KUBE_MASTER="–master=http://master:8080"是將Kubernetes的apiserver程序的服務地址告訴Kubernetes的controller-manager, scheduler和proxy程序。

編輯配置檔案/etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=127.0.0.1"
KUBELET_HOSTNAME="--hostname-override=127.0.0.1"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=docker.io/kubernetes/pause"
KUBELET_ARGS="--cgroup-driver=systemd --fail-swap-on=false --kubeconfig=/var/lib/kubelet/kubeconfig"

在v1.8版本之後kubelet不再支援api-server引數,那麼在新版本kubelet如何才能與api-server進行通訊呢?是通過kubeconfig引數,指定配置檔案。(這個地方是一個大坑,如果還是按照這種配置的話,master會找不到這個node)
在/etc/kubernetes/kubelet配置檔案中有一個配置項,
KUBELET_ARGS="--fail-swap-on=false --cgroup-driver=cgroupfs --kubeconfig=/var/lib/kubelet/kubeconfig"

編輯配置檔案/var/lib/kubelet/kubeconfig

apiVersion: v1  
clusters:  
- cluster:  
    server: http://127.0.0.1:8080  
  name: myk8s  
contexts:  
- context:  
    cluster: myk8s  
    user: ""  
  name: myk8s-context  
current-context: myk8s-context  
kind: Config  
preferences: {}  
users: []  

編輯配置檔案/etc/kubernetes/apiserver

KUBE_ADMISSION_CONTROL 要去掉 ServiceAccount,
Apiserver需要將--insecure-bind-address地址修改為0.0.0.0(修改為大網ip地址),接收任意地址的連線。

# 啟用日誌標準錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
# 日誌級別
KUBE_LOG_LEVEL="--v=4"
# API服務監聽地址
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
# API服務監聽埠
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
# Etcd服務地址
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
# 對叢集中成員提供API服務地址
KUBE_ADVERTISE_ADDR="--advertise-address=127.0.0.1"
# 叢集分配的IP範圍
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""
# 允許容器請求特權模式,預設false
KUBE_ALLOW_PRIV="--allow-privileged=false"

在etcd裡定義flannel網路配置

etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'

啟動master

只啟動master

for SERVICES in docker etcd kube-apiserver kube-controller-manager kube-scheduler; do
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES
    done

master和node都啟動

for SERVICES in docker etcd kube-apiserver kube-controller-manager kube-scheduler kubelet kube-proxy; do
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES
    done

驗證環境是否正常

如果只啟動master會提示No resources found

[root@localhost k8s]# kubectl get nodes
NAME        STATUS    ROLES     AGE       VERSION
127.0.0.1   Ready     <none>    58m       v1.9.6

3.Node節點的安裝與配置

安裝 etcd、docker、flannel和Kubernetes

yum -y install flannel docker kubernetes

編輯配置檔案/etc/sysconfig/flanneld

FLANNEL_ETCD_ENDPOINTS="http://master:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"

編輯配置檔案/etc/kubernetes/config

KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://master:8080"

編輯配置檔案/etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=node1"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=docker.io/kubernetes/pause"
KUBELET_ARGS="--cgroup-driver=systemd --fail-swap-on=false --kubeconfig=/var/lib/kubelet/kubeconfig"

編輯配置檔案/var/lib/kubelet/kubeconfig

apiVersion: v1  
clusters:  
- cluster:  
    server: http://master:8080  
  name: myk8s  
contexts:  
- context:  
    cluster: myk8s  
    user: ""  
  name: myk8s-context  
current-context: myk8s-context  
kind: Config  
preferences: {}  
users: []  

啟動node

for SERVICES in kube-proxy kubelet docker flanneld; do
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES
done

驗證環境是否正常

在master上執行以下命令

[[email protected] k8s]# kubectl get nodes
NAME        STATUS    ROLES     AGE       VERSION
127.0.0.1   Ready     <none>    58m       v1.9.6
nod1        NotReady   <none>    3s        v1.9.6

4.安裝Rancher k8s管理工具

Rancher已經有封裝好的docker映象了,直接執行就好了

sudo docker run -d -v /data/mysql:/var/lib/mysql --restart=unless-stopped -p 8090:8080 rancher/server