kubernetes 1.9安裝
阿新 • • 發佈:2018-12-26
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