很多小伙伴想學(xué)kubernetes,都會(huì )遇到這些問(wèn)題
今天就介紹一種省錢(qián)省時(shí)的方式來(lái)玩kubernetes
很多小伙伴電腦配置比較高,可以直接用虛擬機開(kāi)兩臺機器,至少得確保自己的電腦16G內存以上
我一個(gè)窮鬼,用著(zhù)8G內存小本,沒(méi)辦法,我選擇云服務(wù)器
在阿里云平臺充值100塊,選擇按量付費,每小時(shí)3毛錢(qián)的2c4G突發(fā)性能實(shí)例,玩一晚上也就一罐紅牛的價(jià)格
服務(wù)器開(kāi)好就可以開(kāi)始部署kubernetes了,本文采用kubeadm方式快速搭建kubernetes集群
- 查看是否加載br_netfilter
- lsmod | grep br_netfilter
- 加載br_netfilter
- modprobe br_netfilter
- 或者修改module-load文件
- cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
- br_netfilter
- EOF
- cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
- net.bridge.bridge-nf-call-ip6tables = 1
- net.bridge.bridge-nf-call-iptables = 1
- EOF
- sudo sysctl --system
- swapoff -a
- systemctl stop firewalld && systemctl disable firewalld
- setenforce 0
- sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
- master: hostnamectl set-hostname k8s-master
- node: hostnamectl set-hostname k8s-node01
- cat >> /etc/hosts << EOF
- 192.168.4.34 k8s-master
- 192.168.4.35 k8s-node01
- EOF
- yum -y install epel-release chrony && systemctl enable chronyd && systemctl start chronyd
- # 配置docker-ce的yum源
- wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
- # 安裝docker-ce
- yum -y install docker-ce
- # 設置開(kāi)機自啟動(dòng)并啟動(dòng)docker
- systemctl enable docker && systemctl start docker
- # 查看docker版本
- docker version
- cat > /etc/yum.repos.d/kubernetes.repo << EOF
- [kubernetes]
- name=Kubernetes
- baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
- enabled=1
- gpgcheck=0
- repo_gpgcheck=0
- gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
- EOF
- yum -y install kubeadm kubelet kubectl
- systemctl enable kubelet
kubelet是kubernetes項目用來(lái)操作Docker等容器運行時(shí)的核心組件,在每個(gè)節點(diǎn)上都存在,可以說(shuō)除了跟容器運行時(shí)打交道外,kubelet在配置容器網(wǎng)絡(luò )、管理容器數據卷時(shí),他都需要直接操作宿主機
如果kubelet本身就是運行在一個(gè)容器里,那么直接操作宿主機就會(huì )變的很麻煩,所以為了解決這個(gè)問(wèn)題,kubeadm選擇直接將kubelet部署在宿主機上,然后使用容器部署其他組件
- kubeadm init \
- --apiserver-advertise-address=172.22.29.78 \
- --image-repository registry.aliyuncs.com/google_containers \
- --kubernetes-version v1.21.2 \
- --service-cidr=10.1.0.0/16 \
- --pod-network-cidr=10.244.0.0/16
提示coredns:v1.8.0不存在,解決辦法:
- # 添加docker加速器
- tee /etc/docker/daemon.json <<-'EOF'
- {
- "registry-mirrors": ["https://fl791z1h.mirror.aliyuncs.com"]
- }
- EOF
- systemctl daemon-reload
- systemctl restart docker
- # 手動(dòng)下載coredns鏡像
- docker pull coredns/coredns:1.8.0
- # 修改鏡像tag
- docker tag coredns/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns:v1.8.0
之后再重新初始化
最后生成的join部分是節點(diǎn)加入集群的命令
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
- source <(kubectl completion bash)
默認token有效期24小時(shí),過(guò)期后token不可用,如果后續有node加入,解決方法是重新生成token
- kubeadm token create
- kubeadm token list
- kubectl get pod --all-namespaces
可以看到coredns的pod沒(méi)有啟動(dòng),是pending狀態(tài),node節點(diǎn)為NotReady,缺少網(wǎng)絡(luò )pod
- kubeadm join 172.22.29.78:6443 --token gtj686.cu5kxoxbgq8iha4m \
- --discovery-token-ca-cert-hash sha256:e6aa8e197b74a08d9bae4b5d72854a49980539bc504691440fe5d716a3d299d9
查看node
安裝網(wǎng)絡(luò ),這里選擇calico
- kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
安裝后查看pod狀態(tài)
從下載鏡像到初始化到running狀態(tài)
calico網(wǎng)絡(luò )安裝的時(shí)候,其中有一個(gè)pod一直是imagepullbackoff狀態(tài)
后來(lái)發(fā)現是因為node沒(méi)有做鏡像倉庫加速處理,所以鏡像下載失敗,導致pod狀態(tài)一直是imagepullbackoff狀態(tài)
配置完成后,Pod自動(dòng)下載鏡像,所有pod都running狀態(tài)
查看node節點(diǎn)的images
至此kubernetes集群部署完畢
在集群中創(chuàng )建一個(gè)pod,對外暴露端口,驗證是否正常訪(fǎng)問(wèn)
- # 創(chuàng )建一個(gè)nginx的deployment
- kubectl create deployment nginx --image=nginx
- # 對外暴露端口
- kubectl expose deployment nginx --port=80 --type=NodePort
- # 查看pod和svc
- kubectl get pod,svc
可以看到nginx的pod映射到宿主機端口為30830,安全組和防火墻開(kāi)放的情況下嘗試訪(fǎng)問(wèn)
- # 下載dashboard編排文件
- wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml
- # 以該編排文件創(chuàng )建pod
- kubectl create -f recommended.yaml
- # 查看創(chuàng )建好的pod和svc
- kubectl get pod,svc -n kubernetes-dashboard
這里改了recommended.yaml里面,kubernetes-dashboard的端口類(lèi)型為nodeport,并對外暴露30000
訪(fǎng)問(wèn)提示兩種登錄方式,這里用token登錄
- # 獲取token
- kubectl describe secrets -n kubernetes-dashboard
復制token然后登錄
提示沒(méi)有權限,重新創(chuàng )建
- # 創(chuàng )建sa,并綁定cluster-admin權限
- apiVersion: v1
- kind: ServiceAccount
- metadata:
- name: dashboard-admin
- namespace: kube-system
- ---
- kind: ClusterRoleBinding
- apiVersion: rbac.authorization.k8s.io/v1beta1
- metadata:
- name: dashboard-admin
- subjects:
- - kind: ServiceAccount
- name: dashboard-admin
- namespace: kube-system
- roleRef:
- kind: ClusterRole
- name: cluster-admin
- apiGroup: rbac.authorization.k8s.io
- # 將上面的編排文件保存為k8s-admin.yaml,然后創(chuàng )建
- kubectl create -f k8s-admin.yaml
重新獲取token,重新登錄
- kubectl describe secret -n kube-system
創(chuàng )建用戶(hù)的時(shí)候,這里走進(jìn)誤區了,剛開(kāi)始一直創(chuàng )建的是在kubernetes-dashboard的namespaces,其實(shí)這個(gè)namespaces下什么權限都沒(méi)有,所以它創(chuàng )建的user的token是獲取不到任何內容的
修改了yaml,重新創(chuàng )建sa之后,在kube-system中找到dashboard-admin用戶(hù)的token,重新登錄后,一切ok
【編輯推薦】
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站