k8s-kubeadm安裝

Rancher方式:
二次封裝的常用發行版【可視化構建kubernetes】
minikube方式:
Minikube是一個工具,可以在本地快速運行一個單點的Kubernetes,適合嘗試Kubernetes或日常開發的用戶使用,但是不能用於生產環境。
kubeadm方式:
Kubeadm也是一個工具,提供kubeadm init和kubeadm join,可用於快速部署Kubernetes集羣。
二進制包方式:
從官方下載發行版的二進制包,手動部署每個組件,組成Kubernetes集羣,過程較爲繁瑣。

官方資料:https://feisky.gitbooks.io/kubernetes/components/kubeadm.html
[Kubernetes] 國內獲取 Kubernetes 鏡像的方法
https://blog.csdn.net/shida_csdn/article/details/78480241
https://www.cnblogs.com/fengzhihai/p/9849683.html

本例將採用kubeadm安裝:

安裝要求:
1、centos7.X
2、2G、2C、30GB
3、集羣之間網絡互通
4、可以訪問外網,需要拉去鏡像

部署步驟:
0、設置先設條件
1、在所有節點上安裝Doctor和kubeadm、kubelet
2、部署kubernetes的Master
3、部署容器網絡插件
4、部署kubernetes Node,將節點加入到kubernetes集羣中
5、部署Dashboard Web頁面,可視化查看Kubernetes資源

先設條件【所有節點】:
1、關閉防火牆【影響通信,學習,也可以將默認的規則清空重新生成】
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld

2、關閉selinux:linux下的一個安全機制,主要是對文件系統訪問做一個權限控制,這個權限控制會影響到kubernetes中的一個組件kuberlete的安裝,因爲這個組件的安裝會訪問本地的文件操作系統
setenforce 0
vim /etc/selinux/config :# 更改爲 SELINUX=disabled
getenforce:快照查詢

3、禁止swap分區:swap分區的作用是當物理內存不足時,利用swap分區做數據交換,但是在kubernetes中完全不支持swap分區,所以必須禁止掉,或者創建系統的時候就不創建他
    臨時關閉:swapoff -a
    永久性關閉: vim /etc/fstab 
    中註釋掉:/dev/mapper/centos-swap swap     swap    defaults        0 0
sysctl --system

4、添加主機名和對應ip的關係
ip1    主機名1
ip2    主機名2
ip3    主機名3

5、時間同步【啓動chronyd系統服務】
systemctl  start  chronyd.service
systemctl  enable  chronyd.service

6、將橋接的IPv4流量傳遞到iptables的鏈【有一些ipv4的流量不能走iptables鏈【linux內核的一個過濾器,每個流量都會經過他,然後再匹配是否可進入當前應用進程去處理】,導致流量丟失】:
配置k8s.conf文件(#k8s.conf文件原來不存在,需要自己創建的)
cat /etc/sysctl.d/k8s.conf       
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
vm.swappiness=0

sysctl --system

安裝安裝Doctor、kubeadm【引導集羣的客戶端工具】、kubelet【kubernetes中管理容器】【所有節點】

1、安裝Docker
配置Docker官方源並將下載的源文件存放於/etc/yum.repos.d/下:https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
安裝:yum -y install docker-ce-18.06.1.ce-3.el7
設置開機啓動並啓動docker:systemctl enable docker && systemctl start docker

2、安裝kubeadm、kubelet、kubectl
配置kubernetes的阿里YUM軟件源: 放在 /etc/yum.repos.d 目錄下,vim /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
安裝:
yum install -y kubelet-1.13.3
yum install -y kubeadm-1.13.3
# yum install -y kubectl-1.13.3
systemctl enable kubelet【此時此刻不需要啓動kubelet,因爲最後kubeadm會一鍵部署,僅僅設置開機啓動即可】


部署【初始化】kubernetes Master【Master節點】

kubeadm init \
--apiserver-advertise-address 192.168.88.149 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.13.3 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

使用kubectl工具,執行:
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 node

記住:
You can now join any number of machines by running the following on each node
as root:
kubeadm join 192.168.88.149:6443 --token qlzhpw.fy30lar1jiz11xbw --discovery-token-ca-cert-hash sha256:ed2f22c8a4727f7be52a1495b49e52638e1f79107677daf6722dfa009218f2e8

安裝Pod網絡插件【master節點,node節點加入後自動下載】

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
查看狀況:
kubectl get pods -n kube-system
kubectl get node

將node節點加入網絡【node節點執行】:
kubeadm join 192.168.88.149:6443 --token qlzhpw.fy30lar1jiz11xbw --discovery-token-ca-cert-hash sha256:ed2f22c8a4727f7be52a1495b49e52638e1f79107677daf6722dfa009218f2e8
kubectl get node

舉例:創建一個nginx的pod
kubectl create deployment nginx --image=nginx
創建service:暴露容器讓外部訪問【--type=NodePort說明創建的是NodePort類型,則通過任意一個NodeIP+Port就可以訪問】:
kubectl expose deployment nginx --port=80 --type=NodePort
查看pod詳情:kubectl get pods,svc -o wide

kubernetes-dashboard安裝

https://blog.csdn.net/weixin_41806245/article/details/89381752
[Kubernetes] 國內獲取 Kubernetes 鏡像的方法
https://blog.csdn.net/shida_csdn/article/details/78480241
https://www.cnblogs.com/fengzhihai/p/9849683.html
驗證:kubectl get pods -n kube-system
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
kubectl create -f kubernetes-dashboard.yaml

待完善

當主節點ip發生變化時,重新構建集羣步驟:

1、修改hosts文件【各節點】
2、kubeadm reset 或者 嘗試
systemctl stop kubelet;
docker rm -f -v $(docker ps -q);
find /var/lib/kubelet | xargs -n 1 findmnt -n -t tmpfs -o TARGET -T | uniq | xargs -r umount -v;
rm -r -f /etc/kubernetes /var/lib/kubelet /var/lib/etcd;
參考:https://www.colabug.com/596892.html

3、刪除 /user/.kube/ 下文件和目錄
4、docker ps 查看
5、修改--apiserver-advertise-address參數 重新構建
kubeadm init \
--apiserver-advertise-address 192.168.88.149 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.13.3 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
後續一樣,使用kubectl工具、安裝pod網絡kube-flannel、加入節點
 

當子節點ip發生變化時,重新構建集羣步驟:
1、修改hosts文件【各節點】
2、kubeadm reset 
3、執行更新後的:kubeadm join 192.168.88.149:6443 --token qlzhpw.fy30lar1jiz11xbw --discovery-token-ca-cert-hash sha256:ed2f22c8a4727f7be52a1495b49e52638e1f79107677daf6722dfa009218f2e8

問題:子節點執行kubectl get pods報錯:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
出現這個問題的原因是kubectl命令需要使用kubernetes-admin來運行。
解決方法如下:
1、將主節點中的【/etc/kubernetes/admin.conf】文件拷貝到從節點相同目錄下
2、配置環境變量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
立即生效:source ~/.bash_profile
參考:https://www.jianshu.com/p/6fa06b9bbf6a

kubeadm 續坑篇
https://www.colabug.com/596892.html
https://mritd.me/2016/11/21/kubeadm-other-problems/

kubectl:常用操作命令:
創建:kubectl run <name> --image=<image> 或者 kubectl create -f manifest.yaml
查詢:kubectl get <resource>
更新 kubectl set 或者 kubectl patch
刪除:kubectl delete <resource> <name> 或者 kubectl delete -f manifest.yaml
查詢 Pod IP:kubectl get pod <pod-name> -o jsonpath='{.status.podIP}'
查看狀況:
kubectl get pods -n kube-system
kubectl get node
查看pod詳情:
kubectl get pods,svc -o wide
kubectl get node
查看在哪個節點上:kubectl get pods -o wide
查看指定命名空間:kube-system下:kubectl get pods -n kube-system
查看所有命名空間:kubectl get pod --all-namespaces

容器內執行命令:kubectl exec -ti <pod-name> sh
容器日誌:kubectl logs [-f] <pod-name>
導出服務:kubectl expose deploy <name> --port=80
kubectl logs 用於顯示 pod 運行中,容器內程序輸出到標準輸出的內容。跟 docker 的 logs 命令類:kubectl logs nginx
kubectl attach 用於連接到一個正在運行的容器。跟 docker 的 attach 命令類似
kubectl exec 用於在一個正在運行的容器執行命令。跟 docker 的 exec 命令類似。
kubectl exec 123456-7890 date
Options:
  -c, --container='': Container name. If omitted, the first container in the pod will be chosen
  -p, --pod='': Pod name
  -i, --stdin=false: Pass stdin to the container
  -t, --tty=false: Stdin is a TT

kubectl cp 支持從容器中拷貝,或者拷貝文件到容器中
https://feisky.gitbooks.io/kubernetes/components/kubectl.html

kubeadm常用命令:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章