k8s(一) kubeadm簡單集群初始化


寫給想入門kubernetes的同學們

# 系統版本

[root@master ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

#主機環境

網絡規划
172.20.0.0/16   node通信網絡
master  172.20.0.2
node1    172.20.0.3
node2     172.20.0.4

10.244.0.0/16   Pod 網絡

10.96.0.0/12    Service 網絡
#內核參數

[root@master ~]# cat <<EOF >  /etc/sysctl.d/k8s.conf

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

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

net.ipv4.ip_forward = 1

EOF

使配置生效

[root@linux-node1 ~]# sysctl --system

  

# 初始化操作

安裝 docker 和 kubeadm 在各個節點上(建議使用阿里雲資源進行安裝,不然會很卡)https://opsx.alibaba.com/mirror 

# step 1: 安裝必要的一些系統工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加軟件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新並安裝 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 開啟Docker服務
sudo service docker start


# kubeadm
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet

# 鏡像拉去

執行kubeadm init  進程會幫我們自動拉去這些進程並初始化master 集群。但是貌似這些鏡像不太好拉去。

我選擇的方式是購買共有雲的香港節點,安裝docker 手動進行資源拉去 然后在打包 docker文件夾(/var/lib/docker),然后覆蓋三台主機的docker主程序目錄。

[root@master ~]# docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-apiserver            v1.13.3             fe242e556a99        3 weeks ago         181MB        
k8s.gcr.io/kube-controller-manager   v1.13.3             0482f6400933        3 weeks ago         146MB
k8s.gcr.io/kube-proxy                v1.13.3             98db19758ad4        3 weeks ago         80.3MB
k8s.gcr.io/kube-scheduler            v1.13.3             3a6f709e97a0        3 weeks ago         79.6MB
k8s.gcr.io/coredns                   1.2.6               f59dcacceff4        3 months ago        40MB
k8s.gcr.io/etcd                      3.2.24              3cab8e1b9802        5 months ago        220MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        14 months ago       742kB

# 執行 kubeadm init

 

   mkdir .kube 

   cp  /etc/kubernetes/admin.conf  .kube/config

將node節點加入我們的master節點需要做兩方面操作
1 配置好hosts文件解析
2 使用命令行加入k8s集群
kubeadm join 172.20.0.91:6443 --token zibyeb.pmujgusravogr0k9 --discovery-token-ca-cert-hash sha256:f5f12fe4f58fbf698f33eb078c8b98b8491e2e2e996230926f

一個是token 默認24小時失效 可通過 kubeadm token命令進行create
一個是 根證書的 sha256 值
通過以下命令獲取
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

node節點會安裝flannle  然后變成可用
For Kubernetes v1.7+ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#  最后狀態

[root@master ~]# kubectl get nodes  -o wide
NAME        STATUS   ROLES    AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
k8s-node1   Ready    <none>   5d6h   v1.13.3   172.20.0.3   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.9.2
k8s-node2   Ready    <none>   5d6h   v1.13.3   172.20.0.4   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.9.2
master      Ready    master   5d9h   v1.13.3   172.20.0.2   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.9.2

#   kubectl  命令行自動補全

source < $(kubectl completion bash )
kubectl completion bash > ~/.kube/completion.bash.inc

#  搞定了 開始你的  k8s 之路吧。

 

kubeadm 幫你做了什么

[init]:指定版本進行初始化操作

[preflight] :初始化前的檢查和下載所需要的Docker鏡像文件

[kubelet-start] :生成kubelet的配置文件”/var/lib/kubelet/config.yaml”,沒有這個文件kubelet無法啟動,所以初始化之前的kubelet實際上啟動失敗。

[certificates]:生成Kubernetes使用的證書,存放在/etc/kubernetes/pki目錄中。

[kubeconfig] :生成 KubeConfig 文件,存放在/etc/kubernetes目錄中,組件之間通信需要使用對應文件。

[control-plane]:使用/etc/kubernetes/manifest目錄下的YAML文件,安裝 Master 組件。

[etcd]:使用/etc/kubernetes/manifest/etcd.yaml安裝Etcd服務。

[wait-control-plane]:等待control-plan部署的Master組件啟動。

[apiclient]:檢查Master組件服務狀態。

[uploadconfig]:更新配置

[kubelet]:使用configMap配置kubelet。

[patchnode]:更新CNI信息到Node上,通過注釋的方式記錄。

[mark-control-plane]:為當前節點打標簽,打了角色Master,和不可調度標簽,這樣默認就不會使用Master節點來運行Pod。

[bootstrap-token]:生成token記錄下來,后邊使用kubeadm join往集群中添加節點時會用到

[addons]:安裝附加組件CoreDNS和kube-proxy

  


免責聲明!

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



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