1. 程式人生 > >搭建k8s叢集,並安裝Kubernetes

搭建k8s叢集,並安裝Kubernetes

環境介紹

基本環境

  • CentOS Linux release 7.5.1804 (Core)
  • JDK1.8.0_161
  • Kubernetes v1.5.2
  • yum源:清華大學

部署規劃

Master:

  • ip: 10.10.202.158
  • hostname: apm-slave-02
  • 安裝節點
    • docker
    • etcd
    • flannel
    • kube-apiserver
    • kube-scheduler
    • kube-controller-manager

Node:

  • ip: 10.10.202.159
  • hostname: apm-slave-03
  • 安裝節點
    • docker
    • flannel
    • kubelet
    • kube-proxy

防火牆

systemctl disable firewalld.service
systemctl stop firewalld.service

部署Master節點

安裝Docker

yum install docker

啟動docker,並加入開機啟動

systemctl start docker
systemctl enable docker

安裝etcd

yum install etcd -y

配置etcd,編輯 /etc/ectd/etcd.conf

vim /etc/etcd/etcd.conf
- ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379"
+ ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
- ETCD_NAME="default"
+ ETCD_NAME="master"
- ETCD_ADVERTISE_CLIENT_URLS="http://127.0.0.1:2379"
+ ETCD_ADVERTISE_CLIENT_URLS="http://apm-slave02:2379,http://apm-slave02:4001"

啟動ectd

systemctl start etcd

檢視服務是否啟動

systemctl is-active etcd

active

獲取etcd的健康指標

etcdctl -C http://apm-slave02:2379 cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://apm-slave02:2379
cluster is healthy

加入開機啟動

systemctl enable etcd

安裝kubernetes

yum install kubernetes

配置kubernetes,編輯 /etc/kubernetes/

下面的apiserverconfigscheduler配置檔案

apiserver

vim /etc/kubernetes/apiserver
- KUBE_API_ADDRESS="--address=127.0.0.1"
+ KUBE_API_ADDRESS="--address=0.0.0.0"
- KUBE_ETCD_SERVERS="--etcd-servers=http://localhost:2379"
+ KUBE_ETCD_SERVERS="--etcd-servers=http://10.10.202.158:2379"
- KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ServiceAccount,SecurityContextDeny,ResourceQuota"
+ KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

config

vim /etc/kubernetes/config
- KUBE_MASTER="--master=http://127.0.0.1:8080"
+ KUBE_MASTER="--master=http://10.10.202.158:8080"

啟動Master元件

systemctl start kube-apiserver.service
systemctl start kube-controller-manager.service
systemctl start kube-scheduler.service

加入開機啟動

systemctl enable kube-apiserver.service
systemctl enable kube-controller-manager.service
systemctl enable kube-scheduler.service

檢查

systemctl list-unit-files |grep kube
kube-apiserver.service                        enabled 
kube-controller-manager.service               enabled 
kube-proxy.service                            disabled
kube-scheduler.service                        enabled 
kubelet.service                               disabled

安裝flannel

yum install flannel

配置flannel

vim /etc/sysconfig/flanneld
-FLANNEL_ETCD_ENDPOINTS="http://127.0.0.1:2379"
+FLANNEL_ETCD_ENDPOINTS="http://10.10.202.158:2379"

配置etcd中flannel的key

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

啟動flannel

systemctl start flanneld.service

設定開機啟動

systemctl enable flanneld.service

檢查服務:

systemctl is-active  kube-apiserver.service kube-controller-manager.service kube-scheduler.service etcd flanneld.service

active
active
active
active
active

注意啟動順序 etcd —> kubernetes

部署Node節點

安裝Docker

yum install docker

啟動docker,並加入開機啟動

systemctl start docker
systemctl enable docker

安裝flannel

yum install flannel

配置flannel

vim /etc/sysconfig/flanneld
-FLANNEL_ETCD_ENDPOINTS="http://127.0.0.1:2379"
+FLANNEL_ETCD_ENDPOINTS="http://10.10.202.158:2379"

配置etcd中flannel的key

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

啟動flannel

systemctl start flanneld.service

設定開機啟動

systemctl enable flanneld.service

安裝kubernetes

yum install kubernetes

node節點需要執行如下元件:

  • kubelet
  • kubernets-proxy

編輯/etc/kubernetes/config

-KUBE_MASTER="--master=http://127.0.0.1:8080"
+KUBE_MASTER="--master=http://10.10.202.158:8080"

編輯/etc/kubernetes/kubelet

###
# kubernetes kubelet (minion) config

# The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
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=apm-slave03"

# location of the api-server
KUBELET_API_SERVER="--api-servers=http://10.10.202.158: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=""

注意此處的KUBELET_POD_INFRA_CONTAINER,它的值是registry.access.redhat.com/rhel7/pod-infrastructure:latest,如果沒有安裝rhsm會出錯,具體請見《解決k8s出現pod服務一直處於ContainerCreating狀態的問題》

啟動kubernetes服務

systemctl start kubelet.service
systemctl start kube-proxy.service

加入開機啟動

systemctl enable kubelet.service
systemctl enable kube-proxy.service

檢測Node節點的服務

systemctl is-active kube-proxy.service kubelet.service flanneld.service

active
active
active

在Master(10.10.202.158)上執行如下命令:

kubectl get endpoints
NAME         ENDPOINTS            AGE
kubernetes   10.10.202.158:6443   2d
kubectl get nodes
NAME          STATUS    AGE
apm-slave03   Ready     22h

此時,k8s叢集就已經安裝完成。

安裝Kubernetes-Dashboard

在Master節點的機器上建立兩個檔案dashboard-controller.yamldashboard-service.yaml,其具體內容為:

dashboard-controller.yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
      serviceAccountName: dashboard
      containers:
      - name: kubernetes-dashboard
        image: registry.cn-hangzhou.aliyuncs.com/google-containers/kubernetes-dashboard-amd64:v1.4.2
        resources:
          limits:
            cpu: 100m
            memory: 50Mi
          requests:
            cpu: 100m
            memory: 50Mi
        ports:
        - containerPort: 9090
        args:
        - --apiserver-host=http://10.10.202.158:8080
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30

注意- --apiserver-host=http://10.10.202.158:8080,請修改成自己的地址。
dashboard-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  type: NodePort
  selector:
    k8s-app: kubernetes-dashboard
  ports:
  - port: 80
    targetPort: 9090

執行如下命令

kubectl create -f .

顯示如下日誌:

deployment "kubernetes-dashboard" created
service "kubernetes-dashboard" created

檢視部署

kubectl get deployments --all-namespaces                             
NAMESPACE     NAME                   DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kube-system   kubernetes-dashboard   1         1         1            1           5s

看到可用節點為1個。

檢視pod

kubectl get pods -n kube-system
NAME                                    READY     STATUS    RESTARTS   AGE
kubernetes-dashboard-2620295069-12qfj   1/1       Running   0          3h

訪問http://10.10.202.158:8080/ui/即可開啟Dashboard