之前體驗了minikube,掉深坑里至今還沒有爬出來,玩單節點用minikube夠了,
但傻瓜試的安裝讓人對k8s理解不是很深刻(坑),而且多節點好像有什么奇怪的問題
所以我這次要用兩個虛擬機來模擬k8s集群 一主節點一工作節點
hostname ipaddr cpu 硬盤 內存 OS docker k8s
m1 1921.168.1.200 2 20G 2G centos7 18 1.16.2
w1 1921.168.1.201 2 20G 2G centos7 18 1.16.2
由於我使用的虛擬機驅動是hyper-v 所以要記得每個虛擬機關閉動態內存 關於虛擬機的安裝配置這里就不再深入討論
虛擬機交換機
動態內存關閉
我先創建一個虛擬機,安裝完docker,k8s和一些其他配置后,再復制,這樣比較快一點
但是k8s集群里的節點 mac和uuid不能重復,這個到時再想辦法修改
安裝centos時選擇最小安裝,圖形界面不安裝,這樣比較省計算機資源
最小安裝完成重啟后, 需要做的事情 1.修改網卡為開機自動啟動,2.打開ssh
先來打開ssh吧, hyper-v里面操作不方便 我要用powersheel連接上去
vi /etc/ssh/sshd_config
取消兩行注,由於我是用root登錄,所以要將permitrootlogin設置成yes
重啟服務
service sshd restart
接下來把網卡設置成開機自啟,因為現在網卡是沒有啟動的
先ip addr 查一下網卡名稱 然后進入到 /etc/sysconfig/network-scripts/目錄 ls|grep 網卡名稱
原來的配置為 動態獲取ip,不開機自動啟動
修改成,開機自動啟動, 靜態ip
修改hosts文件
vi /etc/hosts
在后面加上兩個節點的host
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.200 m1 192.168.1.201 w1
保存后
reboot 指令重啟
管理員權限打開powershell 輸入ssh root@192.168.1.200連接
如果出現
到用戶目錄/.ssh/known_hosts 編輯刪除現有ip的那一行重連即可
連上來后,先更新yum
install -y yum-utils device-mapper-persistent-data lvm2
yum update
再設置docker倉儲
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
然后安裝18版本的docker,安裝太高k8s用不了
yum install docker-ce-18.09.6 docker-ce-cli-18.09.6 containerd.io
安裝完成后 設置啟動docker並設置開機啟動
systemctl start docker && systemctl enable docker
接下來設置docker 的鏡像源, 否則將被牆
[root@localhost ~]# mkdir -p /etc/docker [root@localhost ~]# tee /etc/docker/daemon.json <<-'EOF' > { > "registry-mirrors": ["https://自己去注冊自己的不懂百度.mirror.aliyuncs.com"] > } > EOF
把daemon.json 改名為daemon.conf
mv /etc/docker/daemon.json /etc/docker/daemon.conf
設置好重啟一下docker
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
最后設置k8s相關的配置 先設置hostname 為主節點 m1 (master node
[root@localhost ~]# hostnamectl set-hostname m1
重新登錄一下驗證是否修改成功
[root@localhost ~]# exit logout Connection to 192.168.1.200 closed. PS C:\WINDOWS\system32> ssh root@192.168.1.200 root@192.168.1.200's password: Last login: Mon Nov 4 20:42:51 2019 from 192.168.1.104 [root@m1 ~]#
關防火牆
[root@m1 ~]# systemctl stop firewalld
[root@m1 ~]# systemctl disable firewalld
禁用swap
[root@m1 ~]# swapoff -a [root@m1 ~]# sed -i.bak '/swap/s/^/#/' /etc/fstab
修改網橋模式
[root@m1 ~]# sysctl net.bridge.bridge-nf-call-iptables=1 [root@m1 ~]# sysctl net.bridge.bridge-nf-call-ip6tables=1
[root@m1 ~]# cat <<EOF > /etc/sysctl.d/k8s.conf > net.bridge.bridge-nf-call-ip6tables = 1 > net.bridge.bridge-nf-call-iptables = 1 > EOF
[root@m1 ~]# sysctl -p /etc/sysctl.d/k8s.conf
給yum 加kubernetes 阿里雲 鏡像源
[root@m1 ~]# 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緩存
yum clean all yum -y makecache
安裝 kubeadm kubelet kubectl
- kubelet 運行在集群所有節點上,用於啟動Pod和容器等對象的工具
- kubeadm 用於初始化集群,啟動集群的命令工具
- kubectl 用於和集群通信的命令行,通過kubectl可以部署和管理應用,查看各種資源,創建、刪除和更新各種組件
yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2
啟動kubelet 並設置開機自動啟動
[root@m1 ~]# systemctl enable kubelet && systemctl start kubelet
創建下載kubernetes鏡像緩存腳本 ,並啟動它下載
vi image.sh #!/bin/bash url=registry.cn-hangzhou.aliyuncs.com/google_containers version=v1.16.2 images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`) for imagename in ${images[@]} ; do docker pull $url/$imagename docker tag $url/$imagename k8s.gcr.io/$imagename docker rmi -f $url/$imagename done
發現沒有權限
[root@m1 ~]# ./image.sh -bash: ./image.sh: Permission denied
給權限后重新執行腳本
chmod 777 image.sh
./image.sh
結束后查看一下docker 的鏡像
[root@m1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE k8s.gcr.io/kube-proxy v1.16.2 8454cbe08dc9 2 weeks ago 86.1MB k8s.gcr.io/kube-apiserver v1.16.2 c2c9a0406787 2 weeks ago 217MB k8s.gcr.io/kube-controller-manager v1.16.2 6e4bffa46d70 2 weeks ago 163MB k8s.gcr.io/kube-scheduler v1.16.2 ebac1ae204a2 2 weeks ago 87.3MB k8s.gcr.io/coredns 1.3.1 eb516548c180 9 months ago 40.3MB k8s.gcr.io/etcd 3.3.10 2c4adeb21b4f 11 months ago 258MB k8s.gcr.io/pause 3.1 da86e6ba6ca1 22 months ago 742kB
說明下載正常
,接下來我要將這個虛擬機備份一下, 將來之前做的那些工作都可以用還原的方式略過了
然后我刪除了虛擬機k8s-m1,因為我要重新規划保存的位置
把剛才導出的虛擬機導入
再導入一次,為工作節點
接下來把剛才導入的兩個虛擬機再次刪除,我們要的只是他硬盤里的數據, 否則 product_uuid會重復,所以我們要多做幾步操作
添加 新的虛擬機,選擇硬盤為剛才導入時選擇的硬盤, 前面內存那里記得不要選動態內存,如法炮制 k8s-w1
這時兩個虛擬機的靜態ip是沖突的,我們啟動第二台修改ip地址為192.168.1.201
vi /etc/sysconfig/network-scripts/ifcfg-eth0
hostname也修改成w1
hostnamectl set-hostname w1
修改好后reboot重啟 順便把k8s-m1也啟動
刪除C:\Users\hbb\.sshknown_hosts 后開兩個管理員權限的ps 連接上m1 和w1
接下來我們兩邊都修改hosts文件,加入 我們規划好的ip 的別名
vi /etc/hosts
查看mac 和uuid是否沖突
cat /sys/class/net/eth0/address
cat /sys/class/dmi/id/product_uuid
都沒有沖突了
接下來做主節點m1的配置,下面的操作只需要在m1上執行
kubeadm init --apiserver-advertise-address 192.168.1.200 --pod-network-cidr=192.168.0.0/16
自動補全
[root@m1 ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile [root@m1 ~]# source .bash_profile
安裝網絡策略,
kubectl create -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml
默認情況下 master上不能安裝pod,因為主節點上打上了污點
如果要在master上安裝pod,則要把污點去掉
查看污點
[root@m1 ~]# kubectl describe node m1|grep -i taints
Taints: node-role.kubernetes.io/master:NoSchedule
刪除默認的污點
[root@m1 ~]# kubectl taint nodes m1 node-role.kubernetes.io/master-
node/m1 untainted
打污點的語法有興趣可以自己去研究,這里不再介紹太多
接下來就是工作節點 w1了
在我剛把m1 kubeinit時產生了一個 命令,可以復制去子節點上執行以加入 主節點
也可以手動創建
kubeadm token create --print-join-command
復制去工作節點上執行就可以直接加入主節點
工作節點執行效果如下
主節點查看node service pod compoent
[root@m1 ~]# kubectl get node NAME STATUS ROLES AGE VERSION m1 Ready master 18m v1.16.2 w1 Ready <none> 11m v1.16.2 [root@m1 ~]# kubectl get svc --all-namespaces NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 18m kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 18m [root@m1 ~]# kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-kube-controllers-dc6cb64cb-856pv 1/1 Running 0 15m kube-system calico-node-k259l 1/1 Running 0 12m kube-system calico-node-z5wbs 1/1 Running 0 15m kube-system coredns-5644d7b6d9-v8wjh 1/1 Running 0 19m kube-system coredns-5644d7b6d9-z2zsw 1/1 Running 0 19m kube-system etcd-m1 1/1 Running 0 18m kube-system kube-apiserver-m1 1/1 Running 0 18m kube-system kube-controller-manager-m1 1/1 Running 0 18m kube-system kube-proxy-b882q 1/1 Running 0 12m kube-system kube-proxy-vxfxj 1/1 Running 0 19m kube-system kube-scheduler-m1 1/1 Running 0 17m
[root@m1 ~]# kubectl get cs -o json
接下來可以加入一些pod 測試 ,加入pod的方式有兩種
使用yaml文件安裝/卸載 -f后面接一個yaml文件,可以是網絡路徑
kubectl create -f kubernetes-dashboard.yaml
kubectl delete-f kubernetes-dashboard.yaml
一種是直接使用鏡像,直接使用鏡像比較少見
本人也還沒有研究,可以參考這個地方