.net core i上 K8S(一)集群搭建

来源:https://www.cnblogs.com/chenyishi/archive/2018/12/09/10090769.html
-Advertisement-
Play Games

1.前言 以前搭建集群都是使用nginx反向代理,但現在我們有了更好的選擇——K8S。我不打算一上來就講K8S的知識點,因為知識點還是比較多,我打算先從搭建K8S集群講起,我也是在搭建集群的過程中熟悉了K8S的一些概念,希望對大家有所幫助。K8S集群的搭建難度適中,網上有很多搭建k8s的教程,我搭建 ...


1.前言

  以前搭建集群都是使用nginx反向代理,但現在我們有了更好的選擇——K8S。我不打算一上來就講K8S的知識點,因為知識點還是比較多,我打算先從搭建K8S集群講起,我也是在搭建集群的過程中熟悉了K8S的一些概念,希望對大家有所幫助。K8S集群的搭建難度適中,網上有很多搭建k8s的教程,我搭建的過程中或多或少遇到一些問題,現在就把我總結完的教程給大家總結一下。這裡主要講通過二進位包安裝K8S

2.集群組件介紹

節點 ip 組件
master 192.168.8.201

etcd:存儲集群節點信息

kubectl:管理集群組件,通過kubectl控制集群

kube-controller-manage:監控節點是否健康,不健康則自動修複至健康狀態

kube-scheduler:負責為kube-controller-manage創建的pod選擇合適的節點,將節點信息寫入etcd

node 192.168.8.202

kube-proxy:service與pod通信

kubelet:kube-scheduler將節點數據存入etcd後,kubelet獲取到並按規則創建pod

docker

3.etcd安裝

yum install etcd –y
vi /etc/etcd/etcd.conf

修改etcd.conf內容

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

啟動

systemctl start etcd
systemctl enable etcd

4.下載k8s安裝包

打開github中k8s地址,選擇一個版本的安裝包

點擊CHANGELOG-1.13.md,在master節點上安裝server包,node節點上安裝node包

5.master節點安裝server

tar zxvf kubernetes-server-linux-amd64.tar.gz      #解壓
mkdir -p /opt/kubernetes/{bin,cfg}            #創建文件夾
mv kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl} /opt/kubernetes/bin    #移動文件到上一步的文件夾
chmod +x /opt/kubernetes/bin/*
5.1配置apiserver
cat <<EOF >/opt/kubernetes/cfg/kube-apiserver

KUBE_APISERVER_OPTS="--logtostderr=true \\
--v=4 \\
--etcd-servers=http://192.168.8.201:2379 \\
--insecure-bind-address=0.0.0.0 \\
--insecure-port=8080 \\
--advertise-address=192.168.8.201 \\
--allow-privileged=true \\
--service-cluster-ip-range=10.10.10.0/24 \\
--service-node-port-range=30000-50000 \\
--admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ResourceQuota"

EOF
cat <<EOF >/usr/lib/systemd/system/kube-apiserver.service
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes

[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-apiserver
ExecStart=/opt/kubernetes/bin/kube-apiserver \$KUBE_APISERVER_OPTS
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF
5.2配置kube-controller-manager
cat <<EOF >/opt/kubernetes/cfg/kube-controller-manager


KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=true \\
--v=4 \\
--master=127.0.0.1:8080 \\
--leader-elect=true \\
--address=127.0.0.1"

EOF
cat <<EOF >/usr/lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes

[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-controller-manager
ExecStart=/opt/kubernetes/bin/kube-controller-manager \$KUBE_CONTROLLER_MANAGER_OPTS
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF
5.3配置kube-scheduler
cat <<EOF >/opt/kubernetes/cfg/kube-scheduler

KUBE_SCHEDULER_OPTS="--logtostderr=true \\
--v=4 \\
--master=127.0.0.1:8080 \\
--leader-elect"

EOF
cat <<EOF >/usr/lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes

[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-scheduler
ExecStart=/opt/kubernetes/bin/kube-scheduler \$KUBE_SCHEDULER_OPTS
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF
5.4運行kube-api與kube-controller-manager與kube-scheduler
vim ku.sh    #創建一個腳本,內容如下
#!/bin/bash


systemctl daemon-reload
systemctl enable kube-apiserver
systemctl restart kube-apiserver

systemctl enable kube-controller-manager
systemctl restart kube-controller-manager

systemctl enable kube-scheduler
systemctl restart kube-scheduler

執行以上腳本

chmod +x *.sh    #給許可權

./ku.sh    #運行
5.5將kubectl配置到環境變數,便於執行
echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile
source /etc/profile

至此server安裝成功,可通過命令查看相關進程是否啟動成功

ps -ef |grep kube

啟動失敗可通過以下命令查看信息

journalctl -u kube-apiserver

6.安裝node節點

6.1docker安裝
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum -y install docker-ce
sudo systemctl start docker
6.2解壓node.zip包
tar zxvf kubernetes-node-linux-amd64.tar.gz

mkdir -p /opt/kubernetes/{bin,cfg}

mv kubernetes/node/bin/{kubelet,kube-proxy} /opt/kubernetes/bin/

 chmod +x /opt/kubernetes/bin/*

6.3創建配置文件
vim /opt/kubernetes/cfg/kubelet.kubeconfig
apiVersion: v1
kind: Config
clusters:
- cluster:
    server: http://192.168.8.201:8080
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
  name: default-context
current-context: default-context
vim /opt/kubernetes/cfg/kube-proxy.kubeconfig
apiVersion: v1
kind: Config
clusters:
- cluster:
    server: http://192.168.8.201:8080
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
  name: default-context
current-context: default-context
cat <<EOF >/opt/kubernetes/cfg/kubelet

KUBELET_OPTS="--logtostderr=true \\
--v=4 \\
--address=192.168.8.202 \\
--hostname-override=192.168.8.202 \\
--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \\
--allow-privileged=true \\
--cluster-dns=10.10.10.2 \\
--cluster-domain=cluster.local \\
--fail-swap-on=false \\
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"

EOF
cat <<EOF >/usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service

[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kubelet
ExecStart=/opt/kubernetes/bin/kubelet \$KUBELET_OPTS
Restart=on-failure
KillMode=process

[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/opt/kubernetes/cfg/kube-proxy

KUBE_PROXY_OPTS="--logtostderr=true \
--v=4 \
--hostname-override=192.168.8.202 \
--kubeconfig=/opt/kubernetes/cfg/kube-proxy.kubeconfig"

EOF
cat <<EOF >/usr/lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Proxy
After=network.target

[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-proxy
ExecStart=/opt/kubernetes/bin/kube-proxy \$KUBE_PROXY_OPTS
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF
6.4啟動kube-proxy與kubelet
vim ku.sh
#!/bin/bash

systemctl daemon-reload
systemctl enable kubelet
systemctl restart kubelet

systemctl enable kube-proxy
systemctl restart kube-proxy

至此node安裝完成,查看是否安裝成功

失敗則查看日誌

journalctl -u kubelet

7.master節點驗證是否有node節點

查看集群健康狀態

 

至此master與node安裝成功

8.啟動一個nginx示例

kubectl run nginx --image=nginx --replicas=3
kubectl expose deployment nginx --port=88 --target-port=80 --type=NodePort

驗證

瀏覽器訪問

9.安裝dashbord

vim kube.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kubernetes-dashboard
  template:
    metadata:
      labels:
        app: kubernetes-dashboard
      annotations:
        scheduler.alpha.kubernetes.io/tolerations: |
          [
            {
              "key": "dedicated",
              "operator": "Equal",
              "value": "master",
              "effect": "NoSchedule"
            }
          ]
    spec:
      containers:
      - name: kubernetes-dashboard
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.7.0
        imagePullPolicy: Always
        ports:
        - containerPort: 9090
          protocol: TCP
        args:
           - --apiserver-host=http://192.168.8.201:8080
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30

---

kind: Service
apiVersion: v1
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 9090
  selector:
    app: kubernetes-dashboard

創建

kubectl create -f kube.yaml

查看pod

查看埠

 

訪問bord

 

 至此集群搭建完成


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • python學習之運算符; 算術運算符; 比較運算符;位運算符; 邏輯運算符; 成員運算符; 身份運算符; ++ 或 -- 自運算符; is 和 ==; 數組的兩種賦值方式區別 ...
  • 這兩天比較忙,周末也在加班,所以更新的就慢了一點,不過沒關係,今天我們就進行千呼萬喚的系統開發框架的設計。不知道上篇關於架構設計的文章大家有沒有閱讀,如果閱讀後相信一定對架構設計有了更近一部的理解,如果你沒有閱讀也希望大家能好好閱讀一下!其實說白了,架構是為了應對軟體系統複雜度而提出的一個解決方案, ...
  • .NET Core跨平臺部署 1. Windows IIS 大家對於在IIS上部署.NET站點已經駕輕就熟了,部署.NET Core也沒有什麼本質區別,但是這其中仍然有一些細節是不同的,下麵記錄了一些我在部署時遇到的問題 1.1 安裝.NET Core Windows Server Hosting ...
  • 上一章我們搭建了k8s集群,這一章我們開始在k8s集群上運行.netcore程式 1.kubectl run 在我的Docker系列教程里,我曾往docker hub中推送過一個鏡像“webdokcer_s_provider”,今天我們就是使用這個鏡像來配合K8S來演示。 我們可以看到,創建了資源d ...
  • 參考文檔:https://www.cnblogs.com/xbzhu/p/7064642.html 這是參考文檔的博主寫的Demo:https://github.com/zhu-xb/AES-Cryptography 再次感謝博主 朱小波 https://www.cnblogs.com/xbzhu/ ...
  • 上一篇心得記錄中提到了 AudioGraph, 描述了一下 什麼是 AudioGraph 以及其中涉及到的各種類型的 節點(Node)。 這一篇就其中比較有意思的 AudioFrameInputNode 來詳細展開一下。 借用 AudioFrameInputNode, 實現簡單的音頻左右聲道互換 什 ...
  • Linq中 AsQueryable(), AsEnumerable()和ToList()的區別和用法:在寫LINQ語句的時候,往往會看到AsEnumerable() ,AsQueryable() 和ToList()的用法,三者有何區別呢?以下是我的理解,有毛病請大家指教!在System.Linq命名 ...
  • 在開發 Asp.Net Core 應用程式的過程中,我們常常需要對業務代碼編寫單元測試,這種方法既快速又有效,利用單元測試做代碼覆蓋測試,也是非常必要的事情;但是,但我們需要對系統進行集成測試的時候,需要啟動服務主機,利用瀏覽器或者Postman 等網路工具對介面進行集成測試,這就非常的不方便,同時... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...