1. 程式人生 > >CentOS7-部署kubernetes

CentOS7-部署kubernetes

rbac disabled eboot watermark soft ssh-key lin pac pod

1 環境準備

節點 主機名 IP OS
Master k8s-master 192.168.57.1 centos 7
Node1 k8s-node-1 192.168.57.2 centos 7

2 離線包下載

我已經整理好需要的可以@我

3 設置主機名

Master上執行:hostnamectl --static set-hostname k8s-master Node1上執行:hostnamectl --static set-hostname k8s-node-1 重啟
reboot

4 分別修改節點的hosts文件,並使內容保持一致

# 編輯hosts文件

vi /etc/hosts

# 新增下面的內容,wq保存。

192.168.57.1 k8s-master 192.168.57.2 k8s-node-1

5 關閉防火墻

systemctl stop firewalld systemctl disable firewalld 6 master節點與node節點做互信 ssh-keygen ssh-copy-id k8s-node-1

下面7-13步需要在Master和Node上都執行

7 關閉selinux

# 編輯config文件

vi /etc/selinux/config

將SELINUX=enforcing改為SELINUX=disabled,wq保存。

# 當前臨時關閉selinux(不重啟臨時關閉selinux的方式)

setenforce 0

8 關閉swap

# 當前臨時關閉虛擬內存

swapoff -a 若不關閉下面初始化master的時候會存在下圖的錯誤: 技術分享圖片

# 修改/etc/fstab文件

vi /etc/fstab

# 加#註釋掉下面的語句屏蔽SWAP的自動掛載,wq保存

#/dev/mapper/centos-swap swapswapdefaults0 0

9 配置路由參數,防止kubeadm報路由警告

# 將內容寫入k8s.conf文件

cat <<EOF > /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF

# 立即生效

sysctl --system 10 安裝docker rpm -ihv docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm 發現缺少依賴包的錯誤 技術分享圖片 在mypackages目錄下執行 yum -y install *.rpm 然後再執行 rpm -ihv docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm rpm -ihv docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm 若出現下圖情況需要先執行以下 rpm -ihv libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm 技術分享圖片 systemctl start docker && systemctl enable docker docker version 技術分享圖片 11 導入鏡像 在k8s_images/docker_images目錄下執行 for i in $(ls *.tar);do docker load < $i;done 12 安裝kubelet kubectl kubeadm包 k8s_images目錄下執行 rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm rpm -ivh kubernetes-cni-0.6.0-0.x86_64.rpm kubelet-1.9.9-9.x86_64.rpm kubectl-1.9.0-0.x86_64.rpm rpm -ivh kubeadm-1.9.0-0.x86_64.rpm 13 啟動kubelet systemctl start kubelet && sudo systemctl enable kubelet 14 初始化MasterMaster執行 kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16 我執行的時候出現沒有默認路由的錯誤,最後發現是我設置靜態IP的時候忘了分配網關導致的,設置好網關重新執行 發現存在錯誤 cat /var/log/message 技術分享圖片 技術分享圖片 是kubelet默認的cgroup的driver和docker的不一樣導致的,docker默認的cgroupfs,kubelet默認為systemd,編輯10- kubeadm.conf修改為cgroupfs (node也需要修改) vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 技術分享圖片 重啟 systemctl daemon-reload && systemctl restart kubelet 環境reset kubeadm reset 重新初始化 kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16 技術分享圖片 kubeadm join 這句話要記錄下來 node節點加入master的時候要用到 忘了可以通過 kubeadm token list查看 技術分享圖片 默認token 24小時就會過期,後續的機器要加入集群需要重新生成token kubeadm token create 查看kubelet狀態 systemctl status kubelet 技術分享圖片 15 此時root用戶還不能使用kubelet控制集群需要,配置下環境變量Master執行

對於非root用戶

mkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(id -u):$(id -g) $HOME/.kube/config 對於root用戶 export KUBECONFIG=/etc/kubernetes/admin.conf 也可以直接放到~/.bash_profile echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile source一下環境變量 source ~/.bash_profile

kubectl version查看版本

技術分享圖片 16 安裝網絡,可以使用flannel、calico、weave、macvlan這裏我用的flannelMaster執行 kube-flannel.yml裏面的網段要和 kubeadm --pod-network-cidr設置的一致 默認是10.244.0.0/16 在k8s_images目錄下執行 kubectl create -f kube-flannel.yml 技術分享圖片 17 節點加入Master(Node執行 執行上面保存的kubeadm join 這句話 kubeadm join --token f22fa7.6a1d26bae177b5f4 192.168.57.1:6443 --discovery-token-ca-cert-hash sha256:2043570da1eaebcf9229910b68b0840cc1080712f20e682504be317aae824d9c 技術分享圖片 18 驗證node 和pod 如下圖代表Kubernetes 1.9.0 離線安裝成功Master執行 kubectl get nodes 技術分享圖片 kubectl get pods --all-namespaces 技術分享圖片 docker ps 技術分享圖片 19 部署kubernetes-dashboardMaster執行 編輯kubernetes-dashboard.yaml 設置type為 NodePort ,設置在範圍30000-32767內的任意端口,我設置的是32000,(端口範圍可以通過kube-apiserver.yaml修改) 技術分享圖片 kubectl create -f kubernetes-dashboard.yaml 設置驗證方式默認驗證方式有kubeconfig和token,這裏都不用,我們使用basicauth的方式進行apiserver的驗證。

創建/etc/kubernetes/pki/basic_auth_file, 用於存放用戶名、密碼、用戶ID。

echo ‘admin,admin,2‘ > /etc/kubernetes/pki/basic_auth_file

編輯kube-apiserver.yaml,給kube-apiserver添加basic_auth驗證

vi /etc/kubernetes/manifests/kube-apiserver.yaml

技術分享圖片

添加- --basic_auth_file=/etc/kubernetes/pki/basic_auth_file,wq保存。保存後若API pod停止了

然後重啟kubelet服務:

  systemctl restart kubelet        ,kubelet 會重啟 kube-apiserver Pod

ps:-與--之間的不是空格

更新apiserver

kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml

授權,k8s 1.6以後的版本都采用RBAC授權模型,給admin授權默認cluster-admin是擁有全部權限的,將admin和cluster-admin bind這樣admin就有cluster-admin的權限。

kubectl create clusterrolebinding login-on-dashboard-with-cluster-admin --clusterrole=cluster-admin --user=admin

驗證apiserver

curl --insecure https://192.168.57.1:6443 -basic -u admin:admin 技術分享圖片

通過火狐瀏覽器訪問https://192.168.57.2:32000,192.168.57.2是節點IP

技術分享圖片

基本下面輸入用戶名密碼登錄後頁面

技術分享圖片 註:由於我在當前主機上裝的時候忘了一些截圖,所以上面部分截圖是我在別的上裝的時候的截圖

CentOS7-部署kubernetes