文章目錄
- Docker&K8s---通過kubeadm快速部署K8s
- 環境準備
- 環境初始化
- 開始安裝
- 安裝docker
- 添加kubernetes的yum軟體源
- 安裝kubeadm,kubelet和kubectl
- 部署Kubernetes Master
- 節點加入集群
- 安裝網路插件
- 測驗Kubernetes集群
- 在從節點上也可以使用kubectl
- 其他錯誤
- 卸載
Docker&K8s—通過kubeadm快速部署K8s
環境準備
三臺虛擬機Centos8,選擇最小安裝,勾選網路工具、系統工具和標準安裝即可,
最低配置要求:2C/2G/20G
IP: 192.168.12.10 Master 192.168.12.11 node1 192.168.12.12 node2
環境初始化
虛擬機網路模式選nat模式,
windows配置vmnet8的ipv4
# ip
192.168.12.1
# 掩碼
255.255.255.0
# 首選DNS
192.168.12.254
虛擬機netvm8設定
# IP
192.168.12.0
# 掩碼
255.255.255.0
# 網關
192.168.12.254
Centos8網路ip配置、主機名、epel源、常用工具安裝
三臺機器全部執行
# 關閉selinux
~]# vi /etc/selinux/config
SELINUX=disabled
# 設定網路ip
~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
ONBOOT=yes # 原有內容上修改
BOOTPROTO=static # 原有內容上修改
# 下邊內容在后邊追加
IPADDR=192.168.12.10 # 11 12
NETMASK=255.255.255.0
GATEWAY=192.168.12.254
DNS1=192.168.12.254
~]# systemctl restart NetworkManager
~]# reboot
~]# getenforce
Disabled
~]# ping baidu.com
# 設定主機名
~]# hostnamectl set-hostname k8s-master
~]# hostnamectl set-hostname k8s-node1
~]# hostnamectl set-hostname k8s-node2
# 關閉swap磁區
~]# swapoff -a # 臨時
~]# sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab #永久
# 三臺機器上執行
~]# cat >> /etc/hosts << EOF192.168.12.10 k8s-master192.168.12.11 k8s-node01192.168.12.12 k8s-node02EOF
# 重啟
~]# reboot
~]# systemctl stop firewalld
~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
~]# yum clean all
~]# yum makecache
~]# yum install wget net-tools telnet tree nmap sysstat lrzsz dos2unix bind-utils -y
# 橋接ipv4
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 加載
sysctl --system
開始安裝
安裝docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y
daemon.json
{
"graph": "/data/docker",
"storage-driver": "overlay2",
"insecure-registries": ["registry.access.redhat.com", "quay.io"],
"registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com/"],
"bip": "172.12.10.1/24", # 后邊分配的ip要對應,這個ip設定最好中間兩段取本機ip的最后兩段
"exec-opts": ["native.cgroupdriver=systemd"],
"live-restore":true
}
systemctl start docker
systemctl enable docker
# 卸載docker,備用
yum remove docker-ce.x86_64 ddocker-ce-cli.x86_64 -y
rm -rf /var/lib/docker
添加kubernetes的yum軟體源
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
安裝kubeadm,kubelet和kubectl
三臺機器上執行,這里指定了版本v1.15.0
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
systemctl enable kubelet
部署Kubernetes Master
在Master 節點執行,這里的apiserve需要修改成自己的master地址
[root@k8s-master ~]# kubeadm init \
--apiserver-advertise-address=192.168.12.10 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.15.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=172.12.0.0/16
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.12.10:6443 --token p6hvb3.5sln5g4k32wcrvn2 \
--discovery-token-ca-cert-hash sha256:4d96240030c015b2e146c5ee2e4db4a40b2ff5bd55040b2768388a052d6c3613
# 下邊按照提示執行即可
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
如果提示鏡像拉取超時,則選擇國內的源先docker拉取,然后打上對應的標簽
kubeadm config images list # 查看鏡像的標簽版本
# 拉去國內相應的版本
sudo docker pull registry.cn-beijing.aliyuncs.com/imcto/kube-apiserver:v1.21.2
sudo docker pull registry.cn-beijing.aliyuncs.com/imcto/kube-controller-manager:v1.13.1
sudo docker pull registry.cn-beijing.aliyuncs.com/imcto/kube-proxy:v1.13.1
sudo docker pull registry.cn-beijing.aliyuncs.com/imcto/kube-scheduler:v1.13.1
sudo docker pull registry.cn-beijing.aliyuncs.com/imcto/etcd:3.2.24
sudo docker pull registry.cn-beijing.aliyuncs.com/imcto/pause:3.1
sudo docker pull registry.cn-beijing.aliyuncs.com/imcto/coredns:1.2.6
# 打標簽,和kubeadm config查看的標簽要一致
sudo docker tag registry.cn-beijing.aliyuncs.com/imcto/kube-controller-manager:v1.13.1 k8s.gcr.io/kube-controller-manager:v1.13.1
sudo docker tag registry.cn-beijing.aliyuncs.com/imcto/kube-apiserver:v1.13.1 k8s.gcr.io/kube-apiserver:v1.13.1
sudo docker tag registry.cn-beijing.aliyuncs.com/imcto/kube-proxy:v1.13.1 k8s.gcr.io/kube-proxy:v1.13.1
sudo docker tag registry.cn-beijing.aliyuncs.com/imcto/kube-scheduler:v1.13.1 k8s.gcr.io/kube-scheduler:v1.13.1
sudo docker tag registry.cn-beijing.aliyuncs.com/imcto/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
sudo docker tag registry.cn-beijing.aliyuncs.com/imcto/pause:3.1 k8s.gcr.io/pause:3.1
sudo docker tag registry.cn-beijing.aliyuncs.com/imcto/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6
節點加入集群
在兩臺node上執行
[root@k8s-node01 ~]# kubeadm join 192.168.12.10:6443 --token p6hvb3.5sln5g4k32wcrvn2 \ --discovery-token-ca-cert-hash sha256:4d96240030c015b2e146c5ee2e4db4a40b2ff5bd55040b2768388a052d6c3613
安裝網路插件
安裝網路插件:
# 記得修改你的cidr和模式# net-conf.json: |# {# "Network": "172.12.0.0/16",# "Backend": {# "Type": "host-gw"# }# }# github老是訪問不了,大家懂的,,,,自己做了個鏡像kubectl apply -f http://mirrors.liboer.top/kube-flannel.yaml
安裝flannel時會報錯,查了n久,各種版本都嘗試了,最后發現是我的centos的iptable_nat的問題,,,,,,,
解決方法:
三臺機器全部執行
~]# modinfo iptable_natfilename: /lib/modules/4.18.0-305.3.1.el8.x86_64/kernel/net/ipv4/netfilter/iptable_nat.ko.xzlicense: GPLrhelversion: 8.4srcversion: 98725EFA1CB8A67AC0BE0BDdepends: ip_tables,nf_natintree: Yname: iptable_natvermagic: 4.18.0-305.3.1.el8.x86_64 SMP mod_unload modversions sig_id: PKCS#7signer: CentOS kernel signing keysig_key: 1B:76:0B:00:B4:46:42:E5:5A:5D:E3:52:84:E5:35:67:94:50:0B:72sig_hashalgo: sha256signature: 9A:02:50:27:3E:CF:F1:48:E8:18:E8:2E:43:6A:54:EF:6D:1C:80:8B: A9:9D:51:59:31:80:F3:D1:5F:90:A9:80:AC:63:EC:34:6D:3A:66:8C: 69:FF:21:A5:B3:68:F9:F7:37:7E:31:41:42:E1:78:2F:1F:E8:91:5B: 65:6C:AD:FE:75:38:29:31:0B:81:36:C9:D9:0C:3C:40:13:9E:D1:2D: 46:23:A6:36:27:F7:29:08:25:0A:6A:86:81:9F:27:69:1E:3E:FD:EC: F5:EF:69:57:E9:4B:46:EE:1F:D9:69:B0:E2:8A:E5:6D:59:E7:19:67: 1A:F7:7D:9C:59:0E:80:FA:86:DA:93:64:45:83:47:2C:A1:A4:0F:7B: FB:BF:E7:04:05:4B:5D:8B:F2:F4:CA:5E:2A:20:E4:8E:70:F0:B2:63: BF:8A:F0:9D:BE:41:5E:B1:E8:65:EE:C6:B4:DD:AE:91:F7:62:B2:E1: F2:39:7F:DA:E8:C8:C3:81:36:B0:64:81:ED:E5:B2:BA:A9:F8:EC:C6: E2:34:13:DA:09:22:14:45:F0:87:03:13:BB:56:09:66:F4:48:3B:7F: 39:FF:F8:29:84:58:1C:0A:6B:37:34:0E:3E:CB:9E:DF:78:E0:7D:AC: F0:38:11:2B:C2:C7:A4:C8:01:2F:A3:9B:31:DC:C5:16:C2:44:B3:80: 5D:A9:52:14:AE:2F:E9:F1:22:BA:AE:93:2E:9D:DB:3D:49:3A:53:59: CA:E7:97:BA:61:47:9E:36:C5:FA:B5:E1:BE:6F:1E:58:D6:55:78:FE: B2:28:B0:54:A5:B6:E5:4B:01:3F:5F:F4:87:E4:6B:2F:5C:69:8F:51: C1:CE:D2:D2:D1:B6:C0:FA:26:9F:1F:D4:F8:BE:B6:CD:30:21:C8:AE: DB:C6:43:DC:14:44:DA:67:12:D9:8F:05:EA:C3:A3:70:82:3E:B5:7A: C8:89:38:61:42:FE:B6:AE:61:45:02:37:28:16:C4:DC:6B:A7:F7:59: D0:E3:C1:02~]# insmod /lib/modules/4.18.0-305.3.1.el8.x86_64/kernel/net/ipv4/netfilter/iptable_nat.ko.xzinsmod: ERROR: could not insert module /lib/modules/4.18.0-305.3.1.el8.x86_64/kernel/net/ipv4/netfilter/iptable_nat.ko.xz: Unknown symbol in module~]# modprobe iptable_nat
查看狀態,全是running即可,之前沒有安裝cni插件時node的狀態時NotReady,coredns-bccdc95cf-cgj2m這倆pod是pending狀態,裝上就會ready和running
[root@k8s-master ~]# kubectl get pod -n kube-systemNAME READY STATUS RESTARTS AGEcoredns-bccdc95cf-cgj2m 1/1 Running 0 19mcoredns-bccdc95cf-shkmr 1/1 Running 0 19metcd-k8s-master 1/1 Running 0 19mkube-apiserver-k8s-master 1/1 Running 0 18mkube-controller-manager-k8s-master 1/1 Running 0 18mkube-flannel-ds-7dmd6 1/1 Running 0 30skube-flannel-ds-gdnbw 1/1 Running 0 30skube-flannel-ds-x72ts 1/1 Running 0 30skube-proxy-kd79h 1/1 Running 0 19mkube-proxy-mh2cn 1/1 Running 0 18mkube-proxy-z58qt 1/1 Running 0 18mkube-scheduler-k8s-master 1/1 Running 0 18m
檢查一下:
[root@k8s-master ~]# kubectl get csNAME STATUS MESSAGE ERRORscheduler Healthy ok controller-manager Healthy ok etcd-0 Healthy {"health":"true"} [root@k8s-master ~]# kubectl get nodeNAME STATUS ROLES AGE VERSIONk8s-master Ready master 55m v1.15.0k8s-node01 Ready <none> 53m v1.15.0k8s-node02 Ready <none> 53m v1.15.0
測驗Kubernetes集群
在Kubernetes集群中創建一個pod,然后暴露埠,驗證是否正常訪問:
[root@k8s-master ~]# kubectl create deployment nginx --image=nginxdeployment.apps/nginx created[root@k8s-master ~]# kubectl get podNAME READY STATUS RESTARTS AGEnginx-554b9c67f9-jbch5 1/1 Running 0 2m26s# 如果出問題可以查看詳情或者日志kubectl describe pod nginx-554b9c67f9-jbch5 # 詳情kubectl logs nginx-554b9c67f9-jbch5 -n namespace # default可以不寫后邊的-n[root@k8s-master ~]# kubectl expose deployment nginx --port=80 --type=NodePortservice/nginx exposedkubectl expose deployment polaris-dashboard --port=80 --type=NodePort[root@k8s-master ~]# kubectl get pods,svcNAME READY STATUS RESTARTS AGEpod/nginx-554b9c67f9-jbch5 1/1 Running 0 14mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 52mservice/nginx NodePort 10.1.132.56 <none> 80:30824/TCP 9m48shttp://192.168.12.12:30824# 如果瀏覽器不能訪問,執行下邊這句話(三臺機器),這是因為新版的docker對iptables做了改動iptables -P FORWARD ACCEPT[root@k8s-master ~]# kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-554b9c67f9-jbch5 1/1 Running 0 28m 172.12.1.2 k8s-node02 <none> <none># 直接curl集群內部地址也能看到nginxcurl 172.12.1.2
訪問地址:http://NodeIP:Port ,此例就是
http://192.168.12.10:30824 http://192.168.12.11:30824 http://192.168.12.12:30824 任何一個都能訪問到

在從節點上也可以使用kubectl
在從節點上使用kubectl:
[root@k8s-node01 ~]# kubectl get podThe connection to the server localhost:8080 was refused - did you specify the right host or port?
解決:
將master節點上的/etc/kubernetes/admin.conf復制到從節點相同目錄下
[root@k8s-node01 kubernetes]# scp k8s-master:/etc/kubernetes/admin.conf .
然后配置環境變數:
[root@k8s-node01 ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile[root@k8s-node01 kubernetes]# source ~/.bash_profile[root@k8s-node01 kubernetes]# kubectl get podNAME READY STATUS RESTARTS AGEnginx-554b9c67f9-2w6bf 1/1 Running 0 4d19h
其他錯誤
虛擬機掛起后再打開,coredns的倆pod莫名掛掉,,,,
# 重啟docker# 直接強制洗掉重新拉取kubectl delete pod coredns-bccdc95cf-shkmr --grace-period=0 --force -n kube-system
卸載
希望你不會用到
出問題了,可以直接卸載掉重新按流程安裝
kubeadm reset -fmodprobe -r ipiplsmodrm -rf ~/.kube/rm -rf /etc/kubernetes/rm -rf /etc/systemd/system/kubelet.service.drm -rf /etc/systemd/system/kubelet.servicerm -rf /usr/bin/kube*rm -rf /etc/cnirm -rf /opt/cnirm -rf /var/lib/etcdrm -rf /var/etcdyum clean allyum remove kube*
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289965.html
標籤:其他
