k8s的簡介以及搭建


一:簡介

1.什么是k8s?

k8s是一個docker容器管理工具

它是一個全新的基於容器技術的分布式架構領先方案,是開源的容器集群管理系統。

在docker的基礎上,為容器化的應用提供部署運行,資源調度,服務發現和動態伸縮等一系列完整功能

 

2.----k8s的優勢:

a,容器編排

b,輕量級

c,開源

d,彈性伸縮

e,負載均衡

 

二:k8s的核心功能

1.自愈: 重新啟動失敗的容器,在節點不可用時,替換和重新調度節點上的容器,對用戶定義的健康檢查不響應的容器會被中止,並且在容器准備好服務之前不會把其向客戶端廣播。

彈性伸縮: 通過監控容器的cpu的負載值,如果這個平均高於80%,增加容器的數量,如果這個平均低於10%,減少容器的數量

服務的自動發現和負載均衡: 不需要修改您的應用程序來使用不熟悉的服務發現機制,Kubernetes 為容器提供了自己的 IP 地址和一組容器的單個 DNS 名稱,並可以在它們之間進行負載均衡。

滾動升級和一鍵回滾: Kubernetes 逐漸部署對應用程序或其配置的更改,同時監視應用程序運行狀況,以確保它不會同時終止所有實例。 如果出現問題,Kubernetes會為您恢復更改,利用日益增長的部署解決方案的生態系統。

 
2.核心概念
(1)master
                    k8s集群的管理節點,負責管理集群,提供集群的資源數據的訪問入口
(2)Node
                    node是k8s集群架構中運行pod的服務節點
(3)Pod
                    運行於Node節點上,若干相關容器的組合,pod內包含的容器運行在同一宿主機上,使用相同的網絡命名空間,IP地址和端口,能夠通過localhost進行通信
 
三:k8s的應用場景
k8s最適合跑微服務架構
 
四:搭建前的准備工作(所有服務器)
1.准備三台linux服務器,每台服務器配置2G內存和2CPU
角色                    主機名                  IP地址
Master                master                  192.168.175.3
Node                   node1                  192.168.175.250
Node                   node2                  192.168.175.251
 
2.安裝vim  
命令:yum -y install vim
 
3.更改hosts文件添加主機名與IP映射關系
命令:vim /etc/hosts
192.168.175.3     master
192.168.175.250   node1
192.168.175.251   node2
 
4.關閉防火牆和selinux 
命令:iptables -F              #清除防火牆規則
命令:systemctl stop firewalld              #關閉防火牆
命令:setenforce 0              #關閉selinux
 
四:Kubernetes搭建
1.在各個節點上面安裝k8s組件
配置master為etcd和master節點:
命令:[root@master ~]# yum install -y kubernetes etcd flannel ntp
命令:[root@node1 ~]# yum install -y kubernetes etcd flannel ntp
命令:[root@node2 ~]# yum install -y kubernetes etcd flannel ntp
 
2.(1)配置etcd
命令:[root@master ~]# vim /etc/etcd/etcd.conf                  #修改以下配置
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://192.168.175.3:2379"
ETCD_NAME="etcd"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.175.3:2379"

 

(2)啟動服務

命令:[root@master ~]# systemctl start etcd
命令:[root@master ~]# systemctl status etcd
命令:[root@master ~]# systemctl enable etcd

 

 

注意:etcd 通訊使用 2379 端口

(3)查看狀態:

命令:[root@master ~]# ss -antulp | grep 2379

 

 

(4)檢查 etcd 集群成員列表,這里只有一台

命令:[root@master ~]# etcdctl member list

 

 

 

3.配置master服務器
(1)配置master配置文件
命令:[root@master ~]# vim /etc/kubernetes/config                    #修改以下配置文件

KUBE_MASTER="--master=http://192.168.175.3:8080"

 

 

 

(2)配置apiserver配置文件

命令:[root@master ~]# vim /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.175.3:2379"
KUBE_ADMISSION_CONTROL="--admission-control=AlwaysAdmit"

 

 

 (3)配置 kube-scheduler 配置文件
命令:[root@master ~]# vim /etc/kubernetes/scheduler

KUBE_SCHEDULER_ARGS="0.0.0.0"

 

 

 

4.(1) 配置 etcd,指定容器雲中 docker 的 IP 網段

命令:[root@master ~]# etcdctl mkdir /k8s/network

命令:[root@master ~]# etcdctl set /k8s/network/config '{"Network": "10.255.0.0/16"}'

命令:[root@master ~]# etcdctl get /k8s/network/config

(2)設置flanneld服務

命令:[root@master ~]# vim /etc/sysconfig/flanneld

FLANNEL_ETCD_ENDPOINTS="http://192.168.175.3:2379"
FLANNEL_ETCD_PREFIX="/k8s/network"
FLANNEL_OPTIONS="--iface=ens33"                           #設置自己的通信物理網卡

 

 

命令:[root@master ~]# systemctl restart flanneld         #重啟服務

 

(3)檢查所有配置

命令:[root@master ~]# cat /run/flannel/subnet.env
FLANNEL_NETWORK=10.255.0.0/16
FLANNEL_SUBNET=10.255.94.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false

 

命令:[root@master ~]# cat /run/flannel/docker

DOCKER_OPT_BIP="--bip=10.255.94.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=true"
DOCKER_OPT_MTU="--mtu=1472"
DOCKER_NETWORK_OPTIONS=" --bip=10.255.94.1/24 --ip-masq=true --mtu=1472"

 

5. 啟動master上4個服務
命令:[root@master ~]# systemctl restart kube-apiserver kube-controller-manager kube-scheduler flanneld

命令:[root@master ~]# systemctl status kube-apiserver kube-controller-manager kube-scheduler flanneld

命令:[root@master ~]# systemctl enable kube-apiserver kube-controller-manager kube-scheduler flanneld

 

6. 配置minion節點服務器
注意:minion各節點配置相同,這邊已node1為例

(1)配置flanneld服務

命令:[root@node1 ~]# vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.175.3:2379"
FLANNEL_ETCD_PREFIX="/k8s/network"
FLANNEL_OPTIONS="--iface=ens33"

 

(2)命令:[root@node1 ~]# vim  /etc/kubernetes/config

KUBE_MASTER="--master=http://192.168.175.3:8080"

 

(3)命令:[root@node1 ~]# vim /etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=node1"
KUBELET_API_SERVER="--api-servers=http://192.168.175.3:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

 

(4)啟動node1服務

命令:[root@node1 ~]# systemctl restart flanneld kube-proxy kubelet docker
命令:[root@node1 ~]# systemctl enable flanneld kube-proxy kubelet docker
命令:[root@node1 ~]# systemctl status flanneld kube-proxy kubelet docker

7.查看服務是否安裝成功(在master上查看)

命令:[root@master ~]# kubectl get nodes

NAME      STATUS    AGE
node1     Ready     2h
node2     Ready     25s

 

五:Kubernetes的web管理界面搭建

1. 創建dashboard-deployment.yaml配置文件
命令:[root@master ~]# vim /etc/kubernetes/dashboard-deployment.yaml

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

# Keep the name in sync with image version and

# gce/coreos/kube-manifests/addons/dashboard counterparts

  name: kubernetes-dashboard-latest

  namespace: kube-system

spec:

  replicas: 1

  template:

    metadata:

      labels:

        k8s-app: kubernetes-dashboard

        version: latest

        kubernetes.io/cluster-service: "true"

    spec:

      containers:

      - name: kubernetes-dashboard
                                                            
        image: docker.io/bestwu/kubernetes-dashboard-amd64:v1.6.3

        imagePullPolicy: IfNotPresent

        resources:

          # keep request = limit to keep this container in guaranteed class
          limits:

            cpu: 100m

            memory: 50Mi

          requests:

            cpu: 100m

            memory: 50Mi

        ports:

        - containerPort: 9090

        args:

        - --apiserver-host=http://172.26.0.10:8080

        livenessProbe:

          httpGet:

            path: /

            port: 9090

          initialDelaySeconds: 30

          timeoutSeconds: 30

 

2.創建編輯 dashboard-service.yaml 文件:

命令:[root@master ~]# vim /etc/kubernetes/dashboard-service.yaml

apiVersion: v1

kind: Service

metadata:

  name: kubernetes-dashboard

  namespace: kube-system

  labels:

    k8s-app: kubernetes-dashboard

    kubernetes.io/cluster-service: "true"

spec:

  selector:

    k8s-app: kubernetes-dashboard

  ports:

  - port: 80

    targetPort: 9090

 

3.node1和node2需要提前拉取兩個鏡像
命令:[root@node1 ~]# docker search kubernetes-dashboard-amd

命令:[root@node1 ~]# docker pull docker.io/siriuszg/kubernetes-dashboard-amd64

命令:[root@node1 ~]# docker search pod-infrastructure

命令:[root@node1 ~]# docker pull docker.io/xiaotech/pod-infrastructure

命令:[root@node1 ~]# docker images

REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
docker.io/siriuszg/kubernetes-dashboard-amd64   latest              a8e05b8cb40d        3 months ago        122 MB
docker.io/xiaotech/pod-infrastructure           latest              04ccf7b18fb5        16 months ago       209 MB

命令:[root@node2 ~]# docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
docker.io/siriuszg/kubernetes-dashboard-amd64   latest              a8e05b8cb40d        3 months ago        122 MB
docker.io/xiaotech/pod-infrastructure           latest              04ccf7b18fb5        16 months ago       209 MB

4. 啟勱 dashboard 的 deployment 和 service

命令:[root@master ~]# kubectl create -f /etc/kubernetes/dashboard-deployment.yaml

deployment "kubernetes-dashboard-latest" created

 

命令:[root@master ~]# kubectl create -f /etc/kubernetes/dashboard-service.yaml

 

 

5.查看運行結果

命令:[root@master ~]# kubectl get deployment --all-namespaces

 

命令:[root@master ~]# kubectl get svc --all-namespaces

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM