Berbagi teknologi

penerapan offline kluster k8s

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Penerapan offline K8

lingkungan

Masukkan deskripsi gambar di sini

Target

penerapan offline k8

melangkah

Terapkan buruh pelabuhan

Untuk detailnya, lihat artikel: "Instalasi offline buruh pelabuhan dan pengemasan offline proyek back-end"
https://blog.csdn.net/qq_45371023/artikel/detail/140279746?spm=1001.2014.3001.5501
Semua file yang digunakan ada di:
Tautan: https://pan.baidu.com/s/10cb-dXkgdShdjPEBCyvTrw?pwd=fpuy
Kode ekstraksi: fpuy

Instal cri_dockerd

1. Instal cri_dockerd

rpm -ivh cri-dockerd-0.3.9-3.el8.x86_64.rpm
Masukkan deskripsi gambar di sini

2. Muat ulang daemon sistem → Atur cri-dockerd untuk memulai secara otomatis → Mulai cri-dockerd

Muat ulang daemon sistem

sudo systemctl daemon-reload
  • 1

Atur cri-dockerd untuk memulai secara otomatis

sudo systemctl enable cri-docker.socket cri-docker
  • 1

Mulai cri-dockerd

sudo systemctl start cri-docker.socket cri-docker

sudo systemctl status cri-docker.socket

sudo systemctl status cri-docker
  • 1
  • 2
  • 3
  • 4
  • 5

Masukkan deskripsi gambar di sini

Masalah: Gagal memulai cri-docker

Masukkan deskripsi gambar di sini

ukuran:

Metode 1: systemctl restart buruh pelabuhan # Mulai ulang buruh pelabuhan

Metode 2: Copot pemasangan buruh pelabuhan dan pasang kembali, lalu lakukan kembali langkah-langkah di atas

*Instal Kubernetes

Instal kubectl

1. Instal kubectl

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
  • 1

2. Periksa apakah instalasi sudah selesai

kubectl version --client
  • 1

Masukkan deskripsi gambar di sini

Instal kubeadm

3. Buka port atau tutup firewall (untuk memastikan kelancaran proses instalasi)

Port terbuka (server cloud)

Buka port 6443

sudo firewall-cmd --zone=public --add-port=6443/tcp --permanent
  • 1

Muat ulang firewall

sudo firewall-cmd --reload
  • 1

Lihat semua port yang terbuka

sudo firewall-cmd --zone=public --list-ports
  • 1

Atau matikan firewall (mesin virtual)

Matikan firewall

sudo systemctl stop firewalld
  • 1

Matikan mulai otomatis firewall

sudo systemctl disable firewalld
  • 1

4. Nonaktifkan SELinux (pastikan container dapat mengakses sumber daya sistem)

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  • 1
  • 2

5. Instal kubeadm, kubelet dan kubectl

Unduh paket instalasi offline yang relevan dalam format rpm, yang ada di bawah 3_yum_package. Gunakan perintah untuk menginstal semua paket instalasi rpm di direktori.

cd 3_yum_package && rpm -ivh *.rpm
  • 1

Masukkan deskripsi gambar di sini

6. Atur kubelet untuk memulai secara otomatis

sudo systemctl enable --now kubelet
  • 1

Masukkan deskripsi gambar di sini

*Menyebarkan kluster k8s

Setelah menyelesaikan langkah-langkah di atas, Anda akan memiliki lingkungan berikut

·Dua server atau mesin virtual dengan alamat IP berbeda dapat berkomunikasi satu sama lain dan mempertahankan status LAN..34 dan 192.168..35

·Waktu proses container (Docker+cri_dockerd) telah diinstal pada kedua server, dan komponen kubernetes kubectl, kubeadm dan kubelet telah diinstal.

Persiapan lingkungan

7. Tutup partisi swap. Ini dibagi menjadi shutdown sementara dan shutdown permanen. Shutdown permanen disarankan untuk lingkungan mesin virtual karena akan sering dihidupkan dan dimatikan.

Tutup sementara partisi swap

swapoff -a
  • 1

Untuk menutup partisi swap secara permanen, beri komentar pada baris yang berisi swap di fstab.

vi /etc/fstab
  • 1

# /dev/mapper/centos-swap swap swap default 0 0

Mulai ulang agar dapat diterapkan. Memulai ulang dapat menyebabkan status cri-dockerd berubah. Dalam penerapan sebenarnya, saya tidak memilih untuk memulai ulang. Alasannya adalah versi atau konfigurasi tidak dikonfigurasi dengan benar cri-dockerd dan kemudian mulai cri-dockerd untuk membuat status cri -dockerd menjadi normal

menyalakan ulang

8. Instal runc sebagai lingkungan operasi k8s

Instal runc

sudo install -m 755 runc.amd64 /usr/local/bin/runc
  • 1

# Periksa apakah instalasi berhasil

runc -v
  • 1

Masukkan deskripsi gambar di sini

9. Docker dan cri-dockerd mengatur akselerasi image domestik (Karena nama paket perangkat lunak berikut yang akan digunakan dalam folder ini memiliki alamat mirror, disarankan untuk mengkonfigurasi akselerasi mirror yang sesuai bahkan pada jaringan area lokal untuk mencegah kubectl mengharuskan Internet untuk menarik paket perangkat lunak dan mengabaikan mirror lokal setelahnya. instalasi selesai.

sudo tee /etc/docker/daemon.json <<-'EOF'

{

 "registry-mirrors": ["https://tsvqojsz.mirror.aliyuncs.com"]

}

EOF

# 找到第10行

vi /usr/lib/systemd/system/cri-docker.service

# 修改为ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Mulai ulang komponen Docker

systemctl daemon-reload && systemctl restart docker cri-docker.socket cri-docker
  • 1

# Periksa status komponen Docker

systemctl status docker cir-docker.socket cri-docker
  • 1

10. Periksa nama host dan host

simpul utama

nama hostnya adalah k8s-master

vi /etc/hostname
  • 1

Tambahkan pemetaan nama domain

echo "192.168.**.35 k8s-slave01">> /etc/hosts
  • 1

Node lainnya

nama host为k8s-slave01

vi /etc/hostname
  • 1

Tambahkan pemetaan nama domain

echo "192.168.**.34 k8s-master" >> /etc/hosts
  • 1

11. Teruskan IPv4 dan biarkan iptables melihat aliran jembatan

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf

overlay

br_netfilter

EOF

 

sudo modprobe overlay

sudo modprobe br_netfilter
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

Tetapkan parameter sysctl yang diperlukan, yang tetap ada saat reboot

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.ipv4.ip_forward          = 1

EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

#Terapkan parameter sysctl tanpa memulai ulang

sudo sysctl --system

 

lsmod | grep br_netfilter

lsmod | grep overlay

 

sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

# Jika error iptables masih muncul saat init, silakan jalankan

echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables

echo "1">/proc/sys/net/ipv4/ip_forward
  • 1
  • 2
  • 3

Inisialisasi node/master bidang kontrol

12. Inisialisasi node master

Sebelum inisialisasi, Anda perlu mendapatkan image buruh pelabuhan yang diperlukan untuk inisialisasi melalui image konfigurasi kubeadm:

Masukkan deskripsi gambar di sini

Instal gambar docker load -i **.tar

File gambar yang relevan ada di 5_kubeadm-images.

Lakukan inisialisasi:

kubeadm init --node-name=k8s-master list--image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.**.34 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
  • 1

–image-repository=registry.aliyuncs.com/google_containers # Ganti sumber gambar container yang diunduh dengan Alibaba Cloud. Jika tidak, gambar tidak dapat ditarik karena alasan jaringan, dan eksekusi pasti akan gagal.

–cri-socket=unix:///var/run/cri-dockerd.sock # Ini adalah runtime container yang ditentukan, karena containerd juga merupakan salah satu komponen Docker. Mengunduh Docker juga akan mengunduh containerd saat melakukan inisialisasi Saat Kubernetes mendeteksi bahwa ada beberapa lingkungan runtime kontainer, ia harus memilih salah satu secara manual. Terlihat juga di sini bahwa containerd sebenarnya jauh lebih ringan daripada Docker.

–apiserver-advertise-address=192.168.56.50 # Tetapkan alamat siaran untuk server API. Pilih alamat IPv4 lokal di sini. Jika Anda tidak ingin SERVER API disetel pada node lain, jangan ubah ke alamat lain.

–pod-network-cidr=10.244.0.0/16 # Tentukan rentang alamat IP yang dapat digunakan oleh jaringan pod. Jika Anda belum yakin, Anda dapat mengabaikannya dan menggunakan nilai ini.

–service-cidr=10.96.0.0/12 # Tentukan segmen alamat IP tambahan untuk alamat IP virtual layanan.

Masalah: cek cordns:v1.10.1 tidak ada, sebenarnya cordns:v1.10.1 sudah ada, tetapi cordns:1.10.1.

Masukkan deskripsi gambar di sini

Tindakan: Ubah tag kabel.

docker tag registry.aliyuncs.com/google_containers/coredns:1.10.1 registry.aliyuncs.com/google_containers/coredns:v1.10.1
  • 1

Jalankan kembali perintah inisialisasi

Masukkan deskripsi gambar di sini

Catat informasi di bawah kubeadm join, yang diperlukan untuk node join. Informasi yang relevan untuk contoh di atas adalah:

kubeadm join 192.168.51.34:6443 --token 1qtv3k.p8tfvdcds6x5ichf 

​    --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26
  • 1
  • 2
  • 3

Jika Anda lupa, Anda dapat menggunakan daftar token kubeadm untuk melakukan kueri. Token tersebut ada selama 24 jam, membuat ulang token kubeadm, membuat --print-join-command, dan menghapusnya menggunakan token kubeadm, hapus tokenid.

Pengguna non-root silakan jalankan

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 1
  • 2
  • 3
  • 4
  • 5

Pengguna root mengeksekusi secara langsung

Ini berlaku sementara dan akan menjadi tidak valid setelah dimulai ulang.

export KUBECONFIG=/etc/kubernetes/admin.conf 
  • 1

Ini berlaku secara permanen. Tidak perlu menjalankan perintah ini lagi setelah menjalankan kubeadm reset dan init lagi.

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile 
  • 1

Setelah menjalankan perintah efektif permanen, Anda perlu mencari sumbernya agar efektif.

source ~/.bash_profile
  • 1

Periksa apakah konfigurasinya efektif

echo $KUBECONFIG 

/etc/kubernetes/admin.conf
  • 1
  • 2
  • 3

13. Instal dan konfigurasikan plug-in jaringan

Flanel digunakan di sini untuk mendownload dan mengupload file kube-flannel.yml ke server.

Unggah gambar yang relevan ke server untuk instalasi. kube-flannel.yml dan file gambar ada di 6_kube-flannel.

Kartu jaringan permintaan

konfigurasi if

Masukkan deskripsi gambar di sini

kube-flannel.yml akan mencari kartu jaringan enp1s0 secara default. Dalam contoh ini, kartu jaringan 34 adalah enp1s0 dan tidak perlu dimodifikasi.

//Ubah kube-flannel.yml dari 35 dan tambahkan –iface=enp0s3 untuk menentukan (enp0s3 di sini adalah kartu jaringan yang sesuai dengan ip, seperti bagian dalam kotak di atas). Lokasi parameternya adalah sebagai berikut:

container:

  ......

  command:

  - /opt/bin/flanneld

  arg:

  - --ip-masq

  - --kube-subnet-mgr

  - --iface=enp4s0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Mengonfigurasi plugin jaringan flanel untuk Kubernetes

kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
  • 1

Masukkan deskripsi gambar di sini

cat /run/flannel/subnet.env
  • 1

# Jika tidak ada file atau folder tersebut, Anda perlu membuatnya secara manual. Isinya sama seperti di bawah ini.

FLANNEL_NETWORK=10.244.0.0/16

FLANNEL_SUBNET=10.244.0.1/24

FLANNEL_MTU=1450

FLANNEL_IPMASQ=true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Node node bergabung dengan Master

14. Node bergabung dengan Master

14.1. Salin /etc/kubernetes/admin.conf di mesin node master ke mesin node slave

scp /etc/kubernetes/admin.conf 192.168.56.51:/etc/kubernetes/
  • 1

# Jangan lupa menambahkan admin.conf ke variabel lingkungan. Gunakan langsung di sini agar berlaku secara permanen.

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

source ~/.bash_profile
  • 1
  • 2
  • 3

Jika ada masalah saat menyalin:

Kunci host ECDSA untuk 192.168.55.187 telah berubah dan Anda telah meminta pemeriksaan ketat. Verifikasi kunci host gagal.

Jalankan pernyataan berikut untuk memperbaiki

ssh-keygen -R 192.168.55.187
  • 1

14.2. Jalankan perintah join (setelah node master berhasil diinisialisasi, perintah join akan diberikan)

Misalnya:

kubeadm gabung 192.168.51.34:6443 --token by7t4x.da3f98dzrvjylykz --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --cri-socket unix:///var/run/cri-dockerd.sock

Masukkan deskripsi gambar di sini

14.3. Jalankan node kubectl get

Masukkan deskripsi gambar di sini

Cluster k8s berhasil di-deploy! ! !

pertanyaan

Pertanyaan pertama

kubectl dapatkan node

Masukkan deskripsi gambar di sini

Tindakan: Periksa apakah swap ditutup; periksa apakah firewall membuka port 6443

Tutup pertukaran

Masukkan deskripsi gambar di sini

Matikan firewall untuk sementara

Masukkan deskripsi gambar di sini

kesuksesan

Masukkan deskripsi gambar di sini

Pertanyaan 2

kubectl dapatkan node

Setelah menambahkan simpul k8s ke klaster, periksa apakah status simpulnya adalah NotReady.

Masukkan deskripsi gambar di sini

ukuran:

systemctl restart kubelet.service

systemctl restart docker.service
  • 1
  • 2
  • 3

Mulai ulang kubelet dan buruh pelabuhan

Masukkan deskripsi gambar di sini

Pertanyaan ketiga

kubeadm gabung 192.168.51.34:6443 --token l2qlvh.and3fnjmzecueu9h --token-penemuan-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --cri-socket unix:///var/run/cri-dockerd.sock

Batas waktu inisialisasi terjadi saat menambahkan node anak ke kluster k8s.

Masukkan deskripsi gambar di sini
ukuran:

kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
  • 1

Masukkan deskripsi gambar di sini

kesuksesan

Masukkan deskripsi gambar di sini

Masukkan deskripsi gambar di sini

Pertanyaan 4

Salin /etc/kubernetes/admin.conf di mesin node master ke mesin node slave

scp /etc/kubernetes/admin.conf 192.168.55.187:/etc/kubernetes/

Jika penyalinan file gagal, pesan kesalahannya adalah sebagai berikut:

Kunci host ECDSA untuk 192.168.55.187 telah berubah dan Anda telah meminta pemeriksaan yang ketat.

Verifikasi kunci host gagal.

Jalankan pernyataan berikut untuk memperbaiki

ssh-keygen -R 192.168.55.187
  • 1

Hapus cepat

kubectl delete node k8s-slave01
kubectl delete node k8s-slave02
kubectl delete node k8s-master
  • 1
  • 2
  • 3

simpul budak

rm -rf /etc/kubernetes/*
kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
  • 1
  • 2

simpul utama

rm -rf /etc/kubernetes/*
rm -rf ~/.kube/*
rm -rf /var/lib/etcd/*
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
  • 1
  • 2
  • 3
  • 4

Jika perlu, inisialisasi ulang cluster k8s.

kubeadm init --node-name=k8s-master --image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.51.34 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
  • 1

simpul utama

kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
kubectl get pod -A
  • 1
  • 2

simpul utama

scp /etc/kubernetes/admin.conf 192.168.51.35:/etc/kubernetes/
scp /etc/kubernetes/admin.conf 192.168.51.36:/etc/kubernetes/
  • 1
  • 2

simpul budak

kubeadm join 192.168.51.34:6443 --token 1k9kdy.dvn2qbtd7rjar1ly 
       --discovery-token-ca-cert-hash sha256:ff90d8ed41ae1902a839194f179a1c3ba8374a5197ea3111e10e5ca1c09fa442 --cri-socket unix:///var/run/cri-dockerd.sock
  • 1
  • 2
kubectl get pod -A
kubectl get nodes
  • 1
  • 2