1、前期準備
一、首先準備至少兩臺虛擬機,能夠使用VMware Workstation Pro部署兩臺虛擬機。我這裏準備兩臺以下:node
192.168.78.128 k8s-masterpython
192.168.78.129 k8s-nodelinux
其中一臺做爲集羣管理主機,一臺爲node主機。docker
二、設置主機的名稱,方便部署時區別節點。json
hostnamectl set-hostname k8s-mastervim
hostnamectl set-hostname k8s-node1centos
三、master主機和node主機須要關閉的內容(必須執行的操做,在兩臺主機上執行以下命令便可)api
systemctl stop firewalld 關閉防火牆緩存
setenforce 0 關閉selinux服務器
ntpdate ntp1.aliyun.com 配置時間同步
swapoff -a 臨時關閉swap
四、在vim /etc/hosts下面配置
master的配置:
192.168.78.128 k8s-master
192.168.78.128 etcd
192.168.78.128 registry
192.168.78.129 k8s-node1
node配置:
192.168.78.128 k8s-master
192.168.78.128 etcd
192.168.78.129 registry
192.168.78.129 k8s-node1
五、配置靜態ip地址,主機通常都須要設置,防止ip動態變化
一、進入到/etc/sysconfig/network-scripts/ifcfg-你的網卡名字 可以使用ipconfig查看網卡名稱
二、例如 vim /etc/sysconfig/network-scripts/ifcfg-ens33 編譯後加入以下內容
master配置:
BOOTPROTO="static" # 使用靜態IP地址,默認是dhcp
IPADDR="192.168.78.128" # 設置的靜態IP地址
NETMASK="255.255.255.0" # 子網掩碼
GATEWAY="192.168.78.2" # 網關地址(使用route -n 第一行就是默認的網關)
DNS1="8.8.8.8" # DNS服務器 (cat /etc/resolv.conf 查看)
node配置:
BOOTPROTO="static" # 使用靜態IP地址,默認是dhcp
IPADDR="192.168.78.129" # 設置的靜態IP地址
NETMASK="255.255.255.0" # 子網掩碼
GATEWAY="192.168.78.2" # 網關地址(使用route -n 第一行就是默認的網關)
DNS1="8.8.8.8" # DNS服務器 (cat /etc/resolv.conf 查看)
六、centos7更換yum源
一、備份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
二、下載對應版本repo文件(如下是CentOS7版本), 放入/etc/yum.repos.d/
進入 cd /etc/yum.repos.d/
執行 wget https://mirrors.163.com/.help/CentOS7-Base-163.repo
三、運行如下命令生成緩存
yum clean all
yum makecache
到此準備工做就已經完成了,接下來就能夠部署了。
2、部署K8s
Master主機部署的相關組件:
安裝etcd:
一、部署etcd 用來持久化存儲k8s的集羣配置和狀態,通常部署到master便可。
[root@k8s-master /]# yum install -y etcd
二、安裝完成後在/etc/etcd/etcd.conf中配置內容以下:
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="master"
ETCD_ADVERTISE_CLIENT_URLS="http://etcd:2379" ##此處的etcd爲上面配置的hosts中的映射。實際ip爲192.168.78.128
三、啓動etcd並驗證時候部署成功
[root@k8s-master ~]# systemctl start etcd
[root@k8s-master ~]# etcdctl -C http://etcd:2379 cluster-health
看到以下內容則表示正常
member 8e9e05c52164694d is healthy: got healthy result from http://etcd:2379 cluster is healthy
安裝kubernetes 安裝完成便可包含相關組件
[root@k8s-master ~]# yum install -y kubernetes
一、在master主機上部署的組件有 kubernetes API server,kubernetes Controller Manager ,Kubernetes Scheduler
姑且須有修改如下的配置
修改/etc/kubernetes/apiserver的配置內容以下:
[root@k8s-master ~]# vim /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_ETCD_SERVERS="--etcd-servers=http://etcd:2379"
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=""
修改/etc/kubernetes/config 內容以下:
[root@k8s-master ~]# grep -v "^#" /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://k8s-master:8080"
二、開機啓動
[root@k8s-master ~]# systemctl enable kube-apiserver kube-controller-manager kube-scheduler
[root@k8s-master ~]# systemctl start kube-apiserver kube-controller-manager kube-scheduler
到此master的安裝部署就已經完成了,接下來須要部署node主機組件,master主機無需安裝docker環境,故此沒有部署。
node主機相關組件部署:
docker安裝
一、[root@k8s-master ~]# yum install docker docker-distribution -y ##docker-distribution爲docker的一個私有倉庫,能夠選擇性安裝
二、[root@k8s-master ~]# systemctl start docker docker-distribution
三、[root@k8s-master ~]# systemctl enable docker docker-distribution
四、查看docekr版本 docker --version
五、配置阿里雲鏡像加速器
訪問https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 自行登陸後查看本身的鏡像加速地址
[root@k8s-master /]# vim /etc/docker/daemon.json
{ "insecure-registries":["192.168.78.130:5000"], "registry-mirrors":["https://4ojlwa2w.mirror.aliyuncs.com"] }
將內容粘貼進去便可。 insecure-registries 表示信任非https的訪問地址 有私有倉庫時配置,沒有則可不配置
kubernetes安裝
yum install kubernetes
一、在node節點上須要啓動kubernetes 下述組件:kubelet、kubernets-Proxy,所以須要相應修改下述配置。
[root@k8s-node-1 ~]# vim /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://k8s-master:8080"
二、修改/etc/kubernetes/kubelet
[root@k8s-node-1 ~]# vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=k8s-node1" #注意配置爲對應node的hostname
KUBELET_API_SERVER="--api-servers=http://k8s-master:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""
三、啓動並測試
[root@k8s-node-1 ~]# systemctl enable kubelet kube-proxy
[root@k8s-node-1 ~]# systemctl start kubelet kube-proxy
啓動後在master主機上執行如下命令查看是否成功
[root@k8s-master kubernetes]# kubectl get node
出現以下內容則表示成功
NAME STATUS AGEk8s-node1 Ready 36s
Flannel覆蓋網絡安裝(master和node都要安裝)
[root@k8s-master ~]# yum install -y flannel
已安裝:
flannel.x86_64 0:0.7.1-4.el7
一、分別在master和node 主機上配置/etc/sysconfig/flanneld配置文件,以下:
[root@k8s-master /]# vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://etcd:2379"
FLANNEL_ETCD_PREFIX="/kube/network"
配置etcd中關於flannel的key(‘/atomic.io/network/config’這個key與上文/etc/sysconfig/flanneld中的配置項FLANNEL_ETCD_PREFIX是相對應的,錯誤的話啓動就會出錯,這裏目前改成/kube/network)
二、Flannel 網絡的IP網段
[root@k8s-master /]# etcdctl mk /kube/network/config '{"Network": "10.88.0.0/16"}'
打印出如下內容則表示成功 {"Network": "10.88.0.0/16"}
部署完成依次從新啓動docker和kubernetes
#在master 執行
systemctl enable docker
systemctl enable etcd kube-apiserver kube-scheduler kube-controller-manager
systemctl restart etcd kube-apiserver kube-scheduler kube-controller-manager
systemctl restart flanneld docker
#在node上執行
systemctl restart kubelet kube-proxy
systemctl restart flanneld docker
#網絡相關後啓動 flanneld 和 docker 重置網絡
systemctl enable flanneld kubelet kube-proxy docker
到此順利的話k8s的部署就已經完成了,基本沒啥坑要踩的了。
3、部署k8s dashboard驗證集羣部署是否可用
前期準備
一、首先要保證防火牆關閉,可以使用
sudo iptables -F 清理防火牆
二、在docker的啓動文件中加入以下內容
一、vim /usr/lib/systemd/system/docker.service
二、在【service】下面加入
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
三、執行yum install *rhsm*
五、執行 rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
六、使用docker pull registry.access.redhat.com/rhel7/pod-infrastructure測試,若是正常便可。
部署dashboard
一、下載dashboard的yaml的配置文件,下載後能夠放到一個目錄下面,我這裏是usr/local下面
[root@k8s-master local]# wget http://mirror.faasx.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
二、修改ymal配置文件
kind: Deployment apiVersion: extensions/v1beta1 metadata: labels: app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system spec: replicas: 1 selector: matchLabels: app: kubernetes-dashboard template: metadata: labels: app: kubernetes-dashboard # Comment the following annotation if Dashboard must not be deployed on master annotations: scheduler.alpha.kubernetes.io/tolerations: | [ { "key": "dedicated", "operator": "Equal", "value": "master", "effect": "NoSchedule" } ] spec: containers: - name: kubernetes-dashboard image: registry.cn-hangzhou.aliyuncs.com/kubeapps/k8s-gcr-kubernetes-dashboard-amd64:v1.8.3 #默認的鏡像是使用google的,這裏改成阿里的 #imagePullPolicy: Always ports: - containerPort: 9090 protocol: TCP args: # Uncomment the following line to manually specify Kubernetes API server Host # If not specified, Dashboard will attempt to auto discover the API server and connect # to it. Uncomment only if the default does not work. - --apiserver-host=http://192.168.78.128:8080 #注意這裏是api的地址 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
若是無需配置角色帳號等信息,可直接將以上內容覆蓋後修改便可。
一、執行kubectl create -f /usr/local/kubernetes-dashboard.yaml 進行部署
二、執行kubectl apply -f /usr/local/kubernetes-dashboard.yaml 進行角色關聯
三、若是部署錯誤可以使用刪除後從新部署:kubectl delete -f /usr/local/kubernetes-dashboard.yaml
四、kubectl get pods --all-namespaces 查看節點是否部署成功
五、kubectl describe pod kubernetes-dashboard-692957223-4rwnr --namespace=kube-system 打印部署具體問題
六、查看dashboard被部署到了那臺機器上 kubectl get pods --all-namespaces -o wide
七、查看集羣內容ip:kubectl get services --all-namespaces
到此dashboard就部署成功了。