一、K8s的安裝和環境准備


在對K8S進行學習以前,需要准備好一些基本條件,首先docker的安裝就不多說了

實驗准備了三個節點,一個master,兩個node節點,並配置好主機名解析

1、etcd的安裝

etcd的功能及作用參見K8s官網:https://etcd.io/

etcd is a strongly consistent, distributed key-value store that provides a reliable way to store data that needs to be accessed by a distributed system or cluster of machines. It gracefully handles leader elections during network partitions and can tolerate machine failure, even in the leader node.

Applications of any complexity, from a simple web app to Kubernetes, can read data from and write data into etcd.

Your applications can read from and write data into etcd. A simple use case is storing database connection details or feature flags in etcd as key-value pairs. These values can be watched, allowing your app to reconfigure itself when they change. Advanced uses take advantage of etcd’s consistency guarantees to implement database leader elections or perform distributed locking across a cluster of workers.

etcd的安裝僅在master節點安裝,並修改配置文件

      6 ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"  #監聽地址
     21 ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.29:2379"  #申明客戶端地址

修改以后可以對etcd進行測試:

[root@k8s_master ~]# etcdctl set testdir/testkey0 123  #將testdir/testkey0存為123
123
[root@k8s_master ~]# etcdctl get testdir/testkey0
123

  etcdctl --endpoint=http://10.0.0.29:2379 cluster-health  #若是集群安裝,檢查集群狀態
  etcdctl --endpoint=http://127.0.0.1:2379 cluster-health
  etcdctl -C http://127.0.0.1:2379 cluster-health

2、在master節點安裝K8s服務

這里采用最簡單的yum安裝,這種方法最容易成功,GitHub上有人寫了借助ansible二進制安裝的辦法,可以去查看一下。

[root@k8s_master ~]# yum install -y kubernetes-master.x86_64 

  Installed:
  kubernetes-master.x86_64 0:1.5.2-0.7.git269f928.el7

  Dependency Installed:
  kubernetes-client.x86_64 0:1.5.2-0.7.git269f928.el7

  Complete!

修改配置文件:[

root@k8s_master ~]# vim /etc/kubernetes/apiserver   #這個類似於openstack中的keystone角色

[root@k8s_master kubernetes]# diff apiserver apiserver.bak 
8c8
< KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"      #監聽地址
---
> KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1"
11c11
< KUBE_API_PORT="--port=8080"        #api端口
---
> # KUBE_API_PORT="--port=8080"
14c14
< KUBELET_PORT="--kubelet-port=10250"  #K8S_node端口
---
> # KUBELET_PORT="--kubelet-port=10250"
17c17
< KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.29:2379" #etcd服務端口
---
> KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379" 
[root@k8s_master kubernetes]# 

[root@k8s_master kubernetes]# vi config

[root@k8s_master kubernetes]# diff config config.bak 
22c22
< KUBE_MASTER="--master=http://10.0.0.29:8080"  #K8s_master地址
---
> KUBE_MASTER="--master=http://127.0.0.1:8080"

systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl enable kube-apiserver
systemctl enable kube-controller-manager
systemctl enable kube-scheduler

[root@k8s_master kubernetes]# systemctl |  grep kube 
  kube-apiserver.service                      loaded active running   Kubernetes API Server  #接受並相應用戶的請求
  kube-controller-manager.service             loaded active running   Kubernetes Controller Manager  #控制器的概念,保障容器的存活
  kube-scheduler.service                      loaded active running   Kubernetes Scheduler Plugin #調度器,選擇容器啟動的node節點

3、在node節點安裝K8s服務:yum install -y kubernetes-node.x86_64,修改配置文件

[root@k8s_node_2 kubernetes]# diff kubelet kubelet.bak 
5c5
< KUBELET_ADDRESS="--address=0.0.0.0"  #開放地址
---
> KUBELET_ADDRESS="--address=127.0.0.1"
8c8
< KUBELET_PORT="--port=10250"    #node端口
---
> # KUBELET_PORT="--port=10250"
11c11
< KUBELET_HOSTNAME="--hostname-override=k8s_node_2"  #local-hostname
---
> KUBELET_HOSTNAME="--hostname-override=127.0.0.1"
14c14
< KUBELET_API_SERVER="--api-servers=http://10.0.0.29:8080" #k8s api端口
---
> KUBELET_API_SERVER="--api-servers=http://127.0.0.1:8080"
[root@k8s_node_2 kubernetes]# diff config config.bak   #修改config文件
22c22
< KUBE_MASTER="--master=http://10.0.0.29:8080"  #master地址
---
> KUBE_MASTER="--master=http://127.0.0.1:8080"
[root@k8s_node_1 kubernetes]# systemctl |  grep kube
  kube-proxy.service               loaded active running   Kubernetes Kube-Proxy Server    #提供容器網絡訪問
  kubelet.service                  loaded active running   Kubernetes Kubelet Server    #調用docker,來管理容器的生命周期

檢查狀態,在master節點查看節點狀態

[root@k8s_master kubernetes]# kubectl get nodes 
NAME        STATUS    AGE
10.0.0.30   Ready     36s
10.0.0.31   Ready     45s

 

K8S核心組件:
etcd:保存整個集群的狀態
apiserver:提供了資源操作的統一入口,並提供認證、授權、訪問控制、API注冊和發現等機制;
controller manager:負責維護集群的狀態,比如故障檢查、自動擴展、滾動更新。故障檢查是指發現某個容器異常時,會自動嘗試拉起,如果出現宕機,會自動重建一個新的容器,從而保證業務正常可用
scheduler:負責資源的調度,按照預定的調度策略將pod調度到相應的節點上。

kubelet:負責維護容器的生命周期,會直接調用docker進行生命周期管理,同時也負責volume(CVI),同時也負責網絡(vni)的管理
container runtime:負責鏡像管理以及pod和容器的真正運行(CRI);
kube-proxy:負責為service提供cluster內部的服務發現和負載均衡;換言之,保證外部能訪問容器服務;


免責聲明!

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



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