一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

K8S落地實(shí)踐經(jīng)驗(yàn)分享

馬哥Linux運(yùn)維 ? 來源:稀土掘金技術(shù)社區(qū) ? 2024-01-02 11:45 ? 次閱讀

前言

k8s 即 Kubernetes,是一個(gè)開源的容器編排引擎,用來對(duì)容器化應(yīng)用進(jìn)行自動(dòng)化部署、 擴(kuò)縮和管理
本篇文章將分享 k8s v1.18.8 的安裝,以及其面板,監(jiān)控,部署服務(wù),使用Ingress-Ningx進(jìn)行負(fù)載均衡的實(shí)踐
因?yàn)楣居玫倪@個(gè)老版本,并且后面要負(fù)責(zé)搭建,擔(dān)心無法復(fù)刻,趁此周末,實(shí)踐一二,確認(rèn)可行,遂與君分享。

虛擬機(jī)準(zhǔn)備

宿主機(jī):Windows10

虛擬機(jī)工具:Hyper-V 10.0.19041.1

虛擬機(jī) Linux 系統(tǒng):CentOS 8.5

已安裝軟件:docker (v2.21.0)及 docker compose(24.0.6)

Hyper-V虛擬機(jī)一覽

6c25d238-a8a7-11ee-8b88-92fbcf53809c.jpg

IP 及主機(jī)名

192.168.123.100 master
192.168.123.101 worker01
192.168.123.102 worker02

CentOS8.5 設(shè)置固定 IP

設(shè)置IP及網(wǎng)關(guān):vi /etc/sysconfig/network-scripts/ifcfg-eth0


TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
DEVICE=eth0
ONBOOT=yes
PREFIX=24
IPV6_PRIVACY=no


BOOTPROTO=static
IPADDR=192.168.123.100
GATEWAY=192.168.123.1

CentOS8.5 聯(lián)網(wǎng)檢查

配置好網(wǎng)絡(luò)后先測(cè)試 curl 是否可以正常訪問網(wǎng)絡(luò)curl ``http://mirrors.aliyun.com,如果提示:curl: (6) Could not resolve host: ``mirrors.aliyun.com,則需要檢查dns設(shè)置

cat /etc/resolv.conf默認(rèn)應(yīng)該是網(wǎng)關(guān)的地址,也可以自行修改為其他公共dns

nameserver 192.168.123.1

CentOS8.5 設(shè)置主機(jī)名

查看主機(jī)信息:hostnamectl,通過導(dǎo)入虛擬機(jī)創(chuàng)建的主機(jī)信息除了mac地址其他基本都一樣

設(shè)置主機(jī)名:hostnamectl set-hostname 主機(jī)名


# 查看hostname
hostnamectl --static
#設(shè)置 hostname 對(duì)應(yīng)機(jī)器設(shè)置
# 192.168.123.100
hostnamectl set-hostname master
# 192.168.123.101
hostnamectl set-hostname worker01
# 192.168.123.102
hostnamectl set-hostname worker02

確保每個(gè)節(jié)點(diǎn)上 MAC 地址的唯一性

可以在外部使用 PowerShell 查看 Hyper-V 虛擬機(jī)的地址,在導(dǎo)入時(shí)選擇新注冊(cè)會(huì)自動(dòng)生成 Mac 地址,無需更改

centos8.5 查看mac地址:ip link show dev eth0

6c2fbdde-a8a7-11ee-8b88-92fbcf53809c.jpg

外部使用 PowerShell 查看:(Get-VMNetworkAdapter -VMName "k8s-master").MacAddress

6c495b36-a8a7-11ee-8b88-92fbcf53809c.jpg

確保 product_uuid 的唯一性

執(zhí)行sudo cat /sys/class/dmi/id/product_uuid查看product_uuid我這里因?yàn)槎际菑?fù)制的虛擬機(jī),查出來是一樣的的,所以需要修改

6c5a18cc-a8a7-11ee-8b88-92fbcf53809c.jpg

修改需要關(guān)閉虛擬機(jī)后執(zhí)行PowerShell腳本 ,文章總結(jié)

外部查看Hyper-V虛擬機(jī) UUID


Get-VM "k8s-master" | % { (gwmi -Namespace rootvirtualizationv2 -Class msvm_computersystem -Filter ('ElementName="{0}"' -f $_.Name)).GetRelated('msvm_virtualsystemsettingdata') | select BIOSGUID }
Get-VM "k8s-worker01" | % { (gwmi -Namespace rootvirtualizationv2 -Class msvm_computersystem -Filter ('ElementName="{0}"' -f $_.Name)).GetRelated('msvm_virtualsystemsettingdata') | select BIOSGUID }
Get-VM "k8s-worker02" | % { (gwmi -Namespace rootvirtualizationv2 -Class msvm_computersystem -Filter ('ElementName="{0}"' -f $_.Name)).GetRelated('msvm_virtualsystemsettingdata') | select BIOSGUID }





PowerShell 修改 Hyper-V虛擬機(jī) UUID


$VMname="k8s-master"
$vmx = Get-WmiObject -Namespace rootvirtualizationv2 -Class msvm_virtualsystemsettingdata 


$CurrentSettingsData = $vmx | Where-Object { $_.ElementName -eq $VMname }


$CurrentSettingsData.BIOSGUID


$GUID = [System.Guid]::NewGuid()


$CurrentSettingsData.BIOSGUID = "{" + $GUID.Guid.ToUpper() + "}" 


$VMMS = Get-WmiObject -Namespace rootvirtualizationv2 -Class msvm_virtualsystemmanagementservice
$ModifySystemSettingsParams = $VMMS.GetMethodParameters('ModifySystemSettings')


$ModifySystemSettingsParams.SystemSettings = $CurrentSettingsData.GetText([System.Management.TextFormat]::CimDtd20)


$VMMS.InvokeMethod('ModifySystemSettings', $ModifySystemSettingsParams, $null)


開機(jī)后查詢可以看到已經(jīng)修改成功

6c6b7130-a8a7-11ee-8b88-92fbcf53809c.jpg

確保 Machine ID 的唯一性

執(zhí)行/etc/machine-id或使用 hostnamectl 發(fā)現(xiàn)機(jī)器id是一樣的

6c7b6734-a8a7-11ee-8b88-92fbcf53809c.jpg

重新生成了機(jī)器id


sudo cp /etc/machine-id /etc/machine-id.backup
sudo rm /etc/machine-id
sudo systemd-machine-id-setup
cat /etc/machine-id

執(zhí)行結(jié)果

6c8b5c20-a8a7-11ee-8b88-92fbcf53809c.jpg

檢查端口是否被占用

6ca542b6-a8a7-11ee-8b88-92fbcf53809c.jpg

centos8.5 使用 ss 查詢端口是否使用


ss -tuln | grep -E "6443|2379|2380|10250|10259|10257|30000-32767"


執(zhí)行結(jié)果,無占用

6cbdb530-a8a7-11ee-8b88-92fbcf53809c.jpg

安裝 K8S v1.18.8

都2023年了,為什么還是 v1.18.8?

因?yàn)楣居玫倪@個(gè)版本,并且后面要負(fù)責(zé)搭建,趁此周末,實(shí)踐一二,確認(rèn)可行,遂與君分享。

節(jié)點(diǎn)初始化

執(zhí)行主機(jī):master,worker01,worker02

關(guān)閉防火墻

關(guān)閉swap分區(qū)

允許 iptables 檢查橋接流量

添加阿里云 yum 源


# 關(guān)閉防火墻
systemctl stop firewalld
# 設(shè)置永久不開啟防火墻
systemctl disable firewalld


# 關(guān)閉swap 分區(qū) 
swapoff -a   
#永久關(guān)閉
sed -ri 's/.*swap.*/#&/' /etc/fstab


# 將 SELinux 設(shè)置為 permissive 模式(相當(dāng)于將其禁用)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config


# 允許 iptables 檢查橋接流量
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF


# 添加阿里云 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

執(zhí)行主機(jī):master,worker01,worker02

kubeadm:用來初始化集群的指令。

kubelet:在集群中的每個(gè)節(jié)點(diǎn)上用來啟動(dòng) Pod 和容器等。

kubectl:用來與集群通信的命令行工具。


# 安裝
yum install -y kubeadm-1.18.8 kubelet-1.18.8 kubectl-1.18.8 ipvsadm
# 自啟
sudo systemctl enable --now kubelet


驗(yàn)證是否安裝完成

kubelet --version

kubeadm version

kubectl version

安裝容器

執(zhí)行主機(jī):master,worker01,worker02

在 Docker 19.x 版本之前,Docker 使用自己的容器運(yùn)行時(shí)(稱為 Docker Runtime)。從 Docker 19.x 版本開始,Docker Engine 開始使用 containerd 作為默認(rèn)的容器運(yùn)行時(shí),以提供更穩(wěn)定、可靠的容器管理功能。

k8s v1.18.8 版本,安裝docker v24 暫未遇到問題

判斷是否啟用:systemctl status containerd

安裝docker及container


curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
rm /etc/yum.repos.d/CentOS-Linux-AppStream.repo -f
rm /etc/yum.repos.d/CentOS-Linux-BaseOS.repo -f
dnf clean all
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce-3:24.0.0-1.el8 docker-ce-cli-1:24.0.6-1.el8 containerd.io docker-buildx-plugin docker-compose-plugin







可參考Docker V24 及 Docker Compose V2 的安裝及使用

設(shè)置節(jié)點(diǎn)網(wǎng)絡(luò)的別名

執(zhí)行主機(jī):master,worker01,worker02

cat >> /etc/hosts << EOF
192.168.123.100 master
192.168.123.101 worker01
192.168.123.102 worker02
EOF

初始化集群

執(zhí)行主機(jī):master

--apiserver-advertise-address:指定通訊節(jié)點(diǎn),使用master節(jié)點(diǎn)即可

--image-repository:k8s官網(wǎng)鏡像庫

--service-cidr: svc網(wǎng)絡(luò)的ip段設(shè)置

--pod-network-cidr:pod的ip段配置,每個(gè)pod都會(huì)有自己的ipkube-flannel.yml默認(rèn) 10.244.0.0/16


kubeadm init 
  --apiserver-advertise-address=192.168.123.100 
  --image-repository registry.aliyuncs.com/google_containers 
  --kubernetes-version v1.18.8 
  --service-cidr=10.10.0.0/16 
  --pod-network-cidr=10.244.0.0/16 
  --ignore-preflight-errors=all

執(zhí)行結(jié)果,創(chuàng)建成功

6cca662c-a8a7-11ee-8b88-92fbcf53809c.jpg

輸出結(jié)果如下


您的Kubernetes控制平面已成功初始化!


要開始使用集群,非root用戶需要使用以下操作:


  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config


您現(xiàn)在應(yīng)該向集群部署一個(gè)pod網(wǎng)絡(luò)。
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
  
然后,您可以通過以root身份在每個(gè)工作節(jié)點(diǎn)上運(yùn)行以下操作來加入任意數(shù)量的工作節(jié)點(diǎn):
kubeadm join 192.168.123.100:6443 --token nn9das.wslckjkd1ng3oxui 
    --discovery-token-ca-cert-hash sha256:7b3f413e6bfbd1f91448460426a144741bd14c2bb3119cfa058d07d65ab329fd


配置集群身份驗(yàn)證文件


  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

若不配置直接使用 kubectl 相關(guān)命令會(huì)提示:The connection to the server ``localhost:8080`` was refused - did you specify the right host or port?

想要在哪里管理k8s 就要將 .kube 文件夾拷貝到目標(biāo)主機(jī),即工作節(jié)點(diǎn)需要復(fù)制 .kube 目錄到 $HOME 目錄中

安裝網(wǎng)絡(luò)插件 flannel

下載kube-flannel.yml

若初始化時(shí)指定了 --pod-network-cidr 則需要修改配置中 net-conf.json:Network 項(xiàng)

執(zhí)行安裝


kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml --insecure-skip-tls-verify

worker節(jié)點(diǎn)配置

執(zhí)行主機(jī):worker01,worker02

根據(jù)前面的 環(huán)境設(shè)置,k8s工具安裝,docker安裝,在worker節(jié)點(diǎn)也執(zhí)行,進(jìn)行初始化

將worker節(jié)點(diǎn)加入集群:執(zhí)行master初始化后輸出的join命令

kubeadm join 192.168.123.100:6443 
    

若找不到或失效可通過:kubeadm token create --print-join-command重新生成join命令

復(fù)制 master 節(jié)點(diǎn)的k8s配置文件 $HOME/.kube/config 到工作節(jié)點(diǎn)

安裝網(wǎng)絡(luò)插件 flannel


khttps://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml --insecure-skip-tls-verify

安裝 Dashboard v2.0.3

Kubernetes Dashboard 是一個(gè)用于管理和監(jiān)控 Kubernetes 集群的 Web 用戶界面。它提供了一個(gè)直觀的圖形界面,可以幫助你查看和管理集群中的各種資源、部署應(yīng)用程序、監(jiān)控集群狀態(tài)等

官方倉庫

執(zhí)行recommended.yaml, 安裝面板,完全支持的版本為v2.0.3

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml

若需要修改token默認(rèn)15分鐘的過期時(shí)間為7天,修改對(duì)應(yīng)參數(shù)即可

args:
- --auto-generate-certificates
- --namespace=kubernetes-dashboard
- --token-ttl=604800

默認(rèn)創(chuàng)建的 kubernetes-dashboard 無權(quán)限,所以需要授權(quán),這里直接創(chuàng)建使用命令創(chuàng)建一個(gè)新用戶 admin 并授權(quán)

創(chuàng)建用戶


cat <

角色授權(quán)


cat <

獲取登陸token


kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep kubernetes-dashboard| awk '{print $1}')


[root@master ~]
Name:         admin-token-4nqqz
Namespace:    kubernetes-dashboard
Labels:       
Annotations:  kubernetes.io/service-account.name: admin
              kubernetes.io/service-account.uid: 6f432133-5007-4d8b-9239-8c55efa03826


Type:  kubernetes.io/service-account-token


Data
====
ca.crt:     1025 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IlUycUl0Zmpnb0Y4Z2FWXzVkbmtjSjR6UngwNW05Z0tDcjVydklLWURYY1EifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi00bnFxeiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjZmNDMyMTMzLTUwMDctNGQ4Yi05MjM5LThjNTVlZmEwMzgyNiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbiJ9.J8nXyfpWjs9IbnvdfrW5hSq5SkCWy16NL89nphiDk-UGZP0qbcx0xQG_IfmTUfO0lxDQdD84VyZ8EzLENtwtqt3oIVZQyyyUAonOzqnAUfN3l9Jd_uFVbZhS_tfnwC3p4z2htUpDfXNLFoA4hav-2EgT6wY3voIZtnarfNvvBCBCimi-pG4AcCvc34V_udpYRXYpP1IPswS82NMTBVt_T1Y8gm_zKwq8LH6Z4LYr6wdr3MxGT4Fr7H5GK1jVS_wbna06HEK-GI_szNf5u-zRTMP5Si4JOHxnEWwHH4keLG6ez0pwkk5jYTqncczeb91Es_zZE95rvLxn1yh2mzAP5g

暴露到集群外


kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard -p '{"spec":{"type":"NodePort","ports":[{"port":443,"targetPort":8443,"nodePort":30001}]}}'

使用 Chrome 訪問:https://192.168.123.102:30001/#/login

6cddc762-a8a7-11ee-8b88-92fbcf53809c.jpg

因?yàn)橐蟊仨氁褂胔ttps,所以結(jié)合之前文章**前后端都用得上的 Nginx 日常使用經(jīng)驗(yàn)**,生成證書并添加域名配置


server {


    listen 80
    listen       443 ssl
    server_name k8s.devops.test.com


    ssl_certificate      /certs/k8s.devops.test.com/server.crt
    ssl_certificate_key  /certs/k8s.devops.test.com/server.key
    ssl_session_cache    shared1m
    ssl_session_timeout  5m
    ssl_ciphers  HIGH!MD5
    ssl_prefer_server_ciphers  on


    location / {
            proxy_pass https://192.168.123.100:30001
            proxy_http_version 1.1
            proxy_buffering off
            proxy_request_buffering off
            proxy_set_header Upgrade $http_upgrade
            proxy_set_header Connection "upgrade"
            proxy_set_header Host $host
            proxy_set_header X-Forwarded-For $remote_addr
    }
}

成功使用https+域名訪問

6cf8a0c8-a8a7-11ee-8b88-92fbcf53809c.jpg

切換面板版本 v2.2.0 ,可以更好的顯示 ingress 相關(guān)信息


kubectl -n kubernetes-dashboard delete $(kubectl -n kubernetes-dashboard get pod -o name | grep dashboard)


kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml

安裝 Metrics Server v0.3.7

Metrics Server 是一個(gè)用于收集集群中各個(gè)組件的資源使用情況和性能指標(biāo)數(shù)據(jù)的組件。安裝后可以在面板中或使用命令 kubectl top node 查看集群使用情況

官方倉庫

k8s v1.18 對(duì)應(yīng)可以使用v0.3.7部署文件 metrics-server/deploy/1.8+/

修改配置 metrics-server-deployment.yaml

修改鏡像源:registry.aliyuncs.com/google_containers

新增command配置跳過證書的驗(yàn)證:-kubelet-insecure-tls

設(shè)置首選通信類型:--kubelet-preferred-address-

types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname


spec:
      serviceAccountName: metrics-server
      volumes:
      
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
        
        image: registry.aliyuncs.com/google_containers/metrics-server:v0.3.7
        imagePullPolicy: IfNotPresent
        
        command:
        - /metrics-server
        
        - --kubelet-insecure-tls
        
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname

拷貝文件到服務(wù)器或直接在master節(jié)點(diǎn)修改

到考本文件的目錄執(zhí)行命令安裝即可


cd /app/k8s/
kubectl apply -f metrics-server-0.3.7/deploy/1.8+/

目錄結(jié)構(gòu)及修改

6d0a4a94-a8a7-11ee-8b88-92fbcf53809c.jpg

執(zhí)行成功

6d186066-a8a7-11ee-8b88-92fbcf53809c.jpg

等待pod部署成功后刷新頁面可以看到監(jiān)控就出來了

6d260b94-a8a7-11ee-8b88-92fbcf53809c.jpg

6d41e918-a8a7-11ee-8b88-92fbcf53809c.jpg

使用kubectl top node查看節(jié)點(diǎn)資源使用情況

6d562d56-a8a7-11ee-8b88-92fbcf53809c.jpg

使用kubectl top pod -A查看 Pod 資源使用情況

安裝 Helm v3.13.1

Kubernetes Helm 是一個(gè)包管理工具,用于在 Kubernetes 環(huán)境中簡(jiǎn)化應(yīng)用程序的部署和管理。Helm 允許你定義、安裝和升級(jí) Kubernetes 應(yīng)用程序的預(yù)定義軟件包,這些軟件包稱為 Helm Charts。

官方倉庫

安裝v3版本


curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash


安裝成功,版本為 v3.13.1

6d5f7758-a8a7-11ee-8b88-92fbcf53809c.jpg

安裝目錄:/usr/local/bin/helm

可以看到有一個(gè)警告說沒有安裝git, 因?yàn)?Helm 在安裝插件(push插件)時(shí)需要使用 Git,所以可以順手安裝一下 git

sudo dnf install git -y

查看Helm倉庫列表:helm repo list,默認(rèn)為空,如果要按照什么應(yīng)用,需要添加對(duì)應(yīng)的倉庫

helm 搜索應(yīng)用:helm search repo ingress-nginx/ingress-nginx --version='<4'

helm 卸載應(yīng)用:helm uninstall -n ingress-nginx ingress-nginx

具體使用可參考下面安裝 ingress-nginx

在 Helm 中修改鏡像源需要使用--set或--set-string參數(shù)來覆蓋默認(rèn)值。對(duì)于 Nginx Ingress Controller,可以通過指定controller.image.repository和controller.image.tag來修改鏡像源的包地址和版本。這個(gè)在安裝ingress-nginx就有使用,在無法使用官方鏡像的時(shí)候一般都需要替換為國(guó)內(nèi)鏡像

使用 K8S 集群部署服務(wù)

常用命令

部署服務(wù):kubectl apply -f 配置文件名.yml

查看副本集信息:kubectl get replicasets

[root@master tests]
NAME                  DESIRED   CURRENT   READY   AGE
my-nginx-69448bd7d9   2         2         2       36m

查看 Deployment 信息:kubectl describe deployments my-nginx

6d6c86f0-a8a7-11ee-8b88-92fbcf53809c.jpg

查看 Service 信息:kubectl get services my-nginx-service

[root@master tests]
NAME               TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
my-nginx-service   NodePort   10.10.143.180           80:30080/TCP   35m

集群中可以使用此服務(wù)IP進(jìn)行通訊

6d8d9f52-a8a7-11ee-8b88-92fbcf53809c.jpg

查看部署的 nginx 服務(wù)的 Pod :kubectl get pods --selector=app=my-nginx

[root@master tests]
NAME                        READY   STATUS    RESTARTS   AGE
my-nginx-69448bd7d9-q8xtl   1/1     Running   0          39m
my-nginx-69448bd7d9-zghxb   1/1     Running   0          30m

刪除服務(wù):kubectl delete services my-nginx-service

刪除負(fù)載:kubectl delete deployment my-nginx

部署一個(gè) nginx 服務(wù)

配置一個(gè)簡(jiǎn)單的 nginx 服務(wù):nginx.yml

部署了 Deployment 和 Service

暴露了容器的端口:80

暴露集群外的端口:30080

設(shè)置了2個(gè)副本:replicas: 2

完整配置文件


apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-nginx
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      containers:
        - name: my-nginx
          image: nginx:latest
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-nginx-service
spec:
  selector:
    app: my-nginx
  type: NodePort
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30080

上傳到服務(wù)器執(zhí)行:kubectl apply -f nginx.yml

部署成功后使用節(jié)點(diǎn)IP+端口號(hào)即可訪問

6d9fa364-a8a7-11ee-8b88-92fbcf53809c.jpg

目前部署了兩個(gè)服務(wù),但是可以目前沒有能夠設(shè)置負(fù)載的地方,所以還需要一個(gè) Ingress 控制器來管理流量和負(fù)載均衡

使用 Ingress-Nginx v3.41進(jìn)行服務(wù)負(fù)載

Kubernetes 默認(rèn)使用的負(fù)載均衡算法是基于 IP 的輪詢(IP-based round-robin),它會(huì)將請(qǐng)求按照源 IP 地址的順序分發(fā)到不同的 Pod 上。如果需要其他負(fù)載均衡算法,可以使用 Ingress 控制器或者自定義的負(fù)載均衡解決方案

如果使用 Kubernetes 1.19 或更高版本,可以使用最新版本的 NGINX Ingress Controller;

如果使用舊版本的 Kubernetes(1.18 或更早版本),則必須使用 Ingress-Nginx Controller 的 0.X 版本(例如 0.49 版本

準(zhǔn)備

官方倉庫

版本選擇說明

ArtifactHub:v3.41

使用 helm 查找 ingress-nginx 包


# 查詢倉庫列表
helm repo list
# 添加倉庫地址
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
# 搜索包
helm search repo ingress-nginx/ingress-nginx --version='<4'
# ingress-nginx/ingress-nginx     3.41.0          0.51.0          Ingress controller for Kubernetes using NGINX a


安裝

創(chuàng)建 namespace

kubectl create namespace ingress-nginx

安裝 ingress-nginx 源下的 v3.41 版本 ingress-nginx, 指定 namespace 為 ingress-nginx,指定鏡像源為阿里云


helm install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --version 3.41.0 --set controller.image.repository=registry.aliyuncs.com/google_containers/nginx-ingress-controller

如果安裝后報(bào)錯(cuò)負(fù)載無法啟動(dòng),可能是因?yàn)榘鼰o法拉取,可指定鏡像源--set controller.image.repository為國(guó)內(nèi)源(registry.aliyuncs.com/google_containers/nginx-ingress-controller) 重新安裝(卸載helm uninstall -n ingress-nginx ingress-nginx)即可

安裝成功,并給出提示應(yīng)該如何使用

6db0e85e-a8a7-11ee-8b88-92fbcf53809c.jpg

如果需要在局域網(wǎng)中使用,還需要修改兩個(gè)配置

修改負(fù)載 ingress-nginx-controller 配置 保存后生效

dnsPolicy: ClusterFirstWithHostNet策略將首先嘗試使用主機(jī)的 DNS 解析服務(wù)來解析域名,如果主機(jī)的 DNS 無法解析該域名,將會(huì)嘗試使用其他配置的 DNS 解析器

hostNetwork:truePod 中的容器將使用主機(jī)的網(wǎng)絡(luò)棧和網(wǎng)絡(luò)配置

6dcafc80-a8a7-11ee-8b88-92fbcf53809c.jpg

使用

通過 Dashboard 右上角直接創(chuàng)建 YAML 文件


apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx-test
  namespace: default
spec:
  rules:
  - host: nginx.k8stest.com
    http:
      paths:
      - backend:
          serviceName: my-nginx-service
          servicePort: 80

保存后將會(huì)轉(zhuǎn)發(fā)域名請(qǐng)求到前面部署的 my-nginx-service 服務(wù)中,此時(shí)將使用 ingress-nginx 進(jìn)行負(fù)載,當(dāng)然,還需要將域名解析到目標(biāo)服務(wù)器,本地局域網(wǎng)可以使用 hosts 或者 dns 設(shè)置

通過kubectl describe pod ingress-nginx-controller -n ingress-nginx可獲取到ingress-nginx所在節(jié)點(diǎn)信息,IP為 192.168.123.102

6ddf0c66-a8a7-11ee-8b88-92fbcf53809c.jpg

設(shè)置 hosts192.168.123.102 nginx.k8stest.com,再刷新下dns緩存ipconfig /flushdns訪問即可,每次刷新都會(huì)請(qǐng)求到不同的pod上面

6df3e028-a8a7-11ee-8b88-92fbcf53809c.jpg

至此,在局域網(wǎng)中安裝使用 k8s v1.18.8,并進(jìn)行相關(guān)配置已經(jīng)完成,得益與大佬們的分享,耗時(shí)兩天,邊弄邊記,優(yōu)化了一些步驟與細(xì)節(jié)。后續(xù)將嘗試安裝更新的版本,敬請(qǐng)期待。

踩坑記錄

使用yum安裝kubeadm時(shí)報(bào)錯(cuò),測(cè)試發(fā)現(xiàn)curl無法使用,錯(cuò)誤如下,需要檢查設(shè)置dns:cat /etc/resolv.conf寫入默認(rèn)配置或公告dns: nameserver 192.168.123.1

[root@master ~]# yum install -y kubeadm-1.18.8 kubelet-1.18.8 kubectl-1.18.8 ipvsadm
Repository extras is listed more than once in the configuration
CentOS-8.5.2111 - Base - mirrors.aliyun.com                                                                                                                  0.0  B/s |   0  B     00:00
Errors during downloading metadata for repository 'base':
  - Curl error (6): Couldn't resolve host name for http://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/x86_64/os/repodata/repomd.xml [Could not resolve host: mirrors.aliyun.com]
  - Curl error (6): Couldn't resolve host name for http://mirrors.aliyuncs.com/centos-vault/8.5.2111/BaseOS/x86_64/os/repodata/repomd.xml [Could not resolve host: mirrors.aliyuncs.com]
  - Curl error (6): Couldn't resolve host name for http://mirrors.cloud.aliyuncs.com/centos-vault/8.5.2111/BaseOS/x86_64/os/repodata/repomd.xml [Could not resolve host: mirrors.cloud.aliyuncs.com]
Error: Failed to download metadata for repo 'base': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried


阿里云鏡像源的使用,指定鏡像源時(shí)需要使用registry.aliyuncs.com/google_containers/metrics-server:v0.3.7

helm 安裝 ingress-nginx 報(bào)錯(cuò),看是否是因?yàn)榘幌聛?,可以通過指定鏡像源重新安裝(卸載helm uninstall -n ingress-nginx ingress-nginx)即可:k8s v1.18.8 安裝 ingress-nginx:helm install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --version 3.41.0 --set controller.image.repository=``registry.aliyuncs.com/google_containers/nginx-ingress-controller

6dff0df4-a8a7-11ee-8b88-92fbcf53809c.jpg

后語

前前后后嘗試了好幾次搭建k8s,之前基本都看著這座大山,望而卻步,各種理由而終止。當(dāng)時(shí)21立的flag,終于是在這2023的末尾給實(shí)現(xiàn)了。

不積硅步 無以至千里,與君共勉

好了,今天的小知識(shí)你學(xué)會(huì)了嗎?

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • WINDOWS
    +關(guān)注

    關(guān)注

    4

    文章

    3598

    瀏覽量

    90692
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3533

    瀏覽量

    43292
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    504

    瀏覽量

    22320
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    955

    瀏覽量

    28878

原文標(biāo)題:一篇可供參考的 K8S 落地實(shí)踐經(jīng)驗(yàn)

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    k8s核心原理學(xué)習(xí)指南3

    k8s學(xué)習(xí)3 - 核心原理
    發(fā)表于 09-25 16:37

    OpenStack與K8s結(jié)合的兩種方案的詳細(xì)介紹和比較

    OpenStack與K8S結(jié)合主要有兩種方案。一是K8S部署在OpenStack平臺(tái)之上,二是K8S和OpenStack組件集成。
    的頭像 發(fā)表于 10-14 09:38 ?2.8w次閱讀

    如何使用kubernetes client-go實(shí)踐一個(gè)簡(jiǎn)單的與K8s交互過程

    【導(dǎo)讀】Kubernetes項(xiàng)目使用Go語言編寫,對(duì)Go api原生支持非常便捷。 本篇文章介紹了如何使用kubernetes client-go實(shí)踐一個(gè)簡(jiǎn)單的與K8s交互過程
    的頭像 發(fā)表于 02-02 11:16 ?7140次閱讀
    如何使用kubernetes client-go<b class='flag-5'>實(shí)踐</b>一個(gè)簡(jiǎn)單的與<b class='flag-5'>K8s</b>交互過程

    Docker不香嗎為什么還要用K8s

    Docker 雖好用,但面對(duì)強(qiáng)大的集群,成千上萬的容器,突然感覺不香了。 這時(shí)候就需要我們的主角 Kubernetes 上場(chǎng)了,先來了解一下 K8s 的基本概念,后面再介紹實(shí)踐,由淺入深步步為營(yíng)
    的頭像 發(fā)表于 06-02 11:56 ?3593次閱讀

    簡(jiǎn)單說明k8s和Docker之間的關(guān)系

    這篇文章主要介紹了k8s和Docker關(guān)系簡(jiǎn)單說明,本文利用圖文講解的很透徹,有需要的同學(xué)可以研究下 最近項(xiàng)目用到kubernetes(以下簡(jiǎn)稱k8s,ks之間有
    的頭像 發(fā)表于 06-24 15:48 ?3589次閱讀

    K8S集群服務(wù)訪問失敗怎么辦 K8S故障處理集錦

    問題1:K8S集群服務(wù)訪問失敗? ? ? 原因分析:證書不能被識(shí)別,其原因?yàn)椋鹤远x證書,過期等。 解決方法:更新證書即可。 問題2:K8S集群服務(wù)訪問失敗? curl: (7) Failed
    的頭像 發(fā)表于 09-01 11:11 ?1.6w次閱讀
    <b class='flag-5'>K8S</b>集群服務(wù)訪問失敗怎么辦 <b class='flag-5'>K8S</b>故障處理集錦

    K8S(kubernetes)學(xué)習(xí)指南

    K8S(kubernetes)學(xué)習(xí)指南
    發(fā)表于 06-29 14:14 ?0次下載

    mysql部署在k8s上的實(shí)現(xiàn)方案

    的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng)) 應(yīng)用軟件之一。這里主要講 mysql 部署在 k8s 上,mysql 部署在 k8s 上的優(yōu)勢(shì)主要有以下幾點(diǎn)。
    的頭像 發(fā)表于 09-26 10:39 ?2719次閱讀

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    k8s是什么意思? kubernetes簡(jiǎn)稱K8s,是一個(gè)開源的,用于管理云平臺(tái)中多個(gè)主機(jī)上的容器化的應(yīng)用,Kubernetes的目標(biāo)是讓部署容器化的應(yīng)用簡(jiǎn)單并且高效(powerful
    發(fā)表于 07-19 13:14 ?1249次閱讀

    什么是K3sK8s?K3sK8s有什么區(qū)別?

    Kubernetes,通??s寫為 K8s,是領(lǐng)先的容器編排工具。該開源項(xiàng)目最初由 Google 開發(fā),幫助塑造了現(xiàn)代編排的定義。該系統(tǒng)包括了部署和運(yùn)行容器化系統(tǒng)所需的一切。
    的頭像 發(fā)表于 08-03 10:53 ?8088次閱讀

    k8s生態(tài)鏈包含哪些技術(shù)

    1. Apache APISIX Ingress 定義 ? 在 K8s 生態(tài)中,Ingress 作為表示 K8s 流量入口的一種資源,想要讓其生效,就需要有一個(gè) Ingress Controller
    的頭像 發(fā)表于 08-07 10:56 ?1416次閱讀
    <b class='flag-5'>k8s</b>生態(tài)鏈包含哪些技術(shù)

    k8s云原生開發(fā)要求

    Kubernetes(K8s)云原生開發(fā)對(duì)硬件有一定要求。CPU方面,建議至少配備2個(gè)邏輯核心,高性能CPU更佳。內(nèi)存至少4GB,但8GB或更高更推薦。存儲(chǔ)需至少20-30GB可用空間,SSD提升
    的頭像 發(fā)表于 10-24 10:03 ?463次閱讀
    <b class='flag-5'>k8s</b>云原生開發(fā)要求

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需在本地與公有云分別建立K8s集群,并確保網(wǎng)絡(luò)連接。接著,配置kubeconfig文件連接兩集群,并安裝云服務(wù)插件以實(shí)現(xiàn)資源互通。然后,編寫Deployment文件部署應(yīng)用,并使用kubectl命令應(yīng)用至集群。最后,驗(yàn)證應(yīng)用狀態(tài)并監(jiān)控集群性能
    的頭像 發(fā)表于 11-07 09:37 ?375次閱讀

    k8s和docker區(qū)別對(duì)比,哪個(gè)更強(qiáng)?

    Docker和Kubernetes(K8s)是容器化技術(shù)的兩大流行工具。Docker關(guān)注構(gòu)建和打包容器,適用于本地開發(fā)和單主機(jī)管理;而K8s則提供容器編排和管理平臺(tái),適用于多主機(jī)或云環(huán)境,具備自動(dòng)化
    的頭像 發(fā)表于 12-11 13:55 ?458次閱讀

    自建K8S集群認(rèn)證過期

    今天使用kubectl命令查看pod信息時(shí),一直正常運(yùn)行的k8s集群突然不能訪問了,輸入任何命令都提示以下報(bào)錯(cuò)。
    的頭像 發(fā)表于 02-07 12:32 ?269次閱讀