一、系統配置(所有節點都需要執行)
1. 關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
2. 禁用SELinux
setenforce 0
# 編輯文件/etc/selinux/config,將SELINUX修改為disabled,如下:
SELINUX=disabled
3. 關閉系統Swap
swapoff -a
vim /etc/fstab #注釋掉swap相關行即可
# step 1: 安裝必要的一些系統工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加軟件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 更新並安裝Docker-CE sudo yum makecache fast sudo yum -y install docker-ce-18.06 # Step 4: 開啟Docker服務 systemctl enable docker && systemctl docker start
由於默認拉取鏡像地址k8s.gcr.io國內無法訪問,這里指定阿里雲鏡像倉庫地址。
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF # yum install -y kubelet-1.13.3 kubeadm-1.13.3 kubectl-1.13.3 # systemctl enable kubelet && systemctl start kubelet
# cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables=1 net.bridge.bridge-nf-call-iptables=1 EOF # sysctl --system
5. 部署Kubernetes Master
# kubeadm init \ --apiserver-advertise-address=192.168.31.62 \ #api組件監聽的ip地址,一般是內網的ip地址 --image-repository registry.aliyuncs.com/google_containers \ #指定鏡像倉庫,這里是阿里雲的地址 --kubernetes-version v1.13.3 \ #k8s的版本 --service-cidr=10.1.0.0/16\ #指定service網絡的ip地址段 --pod-network-cidr=10.244.0.0/16 #pod網絡,容器使用的ip地址
證書文件路徑 /etc/kubernetes/pki
配置文件路徑 /etc/kubernetes
靜態pod
CoreDNS k8s內部dns解析
kube-proxy 容器之間提供服務發現
使用kubectl工具(默認配置文件讀取路徑在家目錄下.kube文件夾里):
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # kubectl get nodes
6. 安裝Pod網絡插件(CNI)
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
確保能夠訪問到quay.io這個registery。
7. 加入Kubernetes Node
向集群添加新節點,執行在kubeadm init輸出的kubeadm join命令:
kubeadm join 192.168.31.64:6443 --token l79g5t.6ov4jkddwqki1dxe --discovery-token-ca-cert-hash sha256:4f07f9068c543130461c9db368d62b4aabc22105451057f887defa35f47fa076
8. 測試kubernetes集群
在Kubernetes集群中創建一個pod,驗證是否正常運行:
# kubectl create deployment nginx --image=nginx # kubectl expose deployment nginx --port=80 --type=NodePort # kubectl get pod,svc
9. 部署 Dashboard
# kubectl apply -f
https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
默認鏡像國內無法訪問,修改鏡像地址為: lizhenliang/kubernetes-dashboard-amd64:v1.10.1
默認Dashboard只能集群內部訪問,修改Service為NodePort類型,暴露到外部:
kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system spec: type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 30001 selector: k8s-app: kubernetes-dashboard
# kubectl apply -f kubernetes-dashboard.yaml
訪問地址:http://NodeIP:30001
創建service account並綁定默認cluster-admin管理員集群角色:
$ kubectl create serviceaccount dashboard-admin -n kube-system $ kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin $ kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')