K8S 集群環境的搭建過程,一把辛酸淚,與誰知?


K8S 集群環境的搭建過程,一把辛酸淚,與誰知?

環境準備

Kubernetes 是用於自動部署,擴展和管理容器化應用程序的開源系統。

準備好三臺機器:

<code>192.168.1.101 k8s.master
192.168.1.102 k8s.node.1
192.168.1.103 k8s.node.2/<code>

關閉防火牆

<code>    systemctl stop firewalld
    systemctl stop iptables/<code>

關閉 SELinux

<code>setenforce 0/<code>

禁用交換Swap

<code>vim /etc/fstab 
# /dev/mapper/cl-swap     swap                    swap    defaults        0 0/<code>

在重啟。

START

添加源

這裡,添加 virt7-testing 的源:

<code>       vim /etc/yum.repo.d/k8.repo

       [virt7-testing]
       name=virt7-testing
       baseurl=https://cbs.centos.org/repos/virt7-kubernetes-110-testing/x86_64/os/
       gpgcheck=0/<code>

開始安裝 Kubernets

這裡,我們在三臺機器上都要進行安裝,這裡的安裝使用的是 yum 的安裝方式:

<code>yum -y install --enablerepo=virt7-testing kubernetes/<code>

很榮幸的告訴你上面的方法無效,因為地址錯了,那我們現在來嘗試一下官網提供的方式來進行安裝。

官網提供的方式

檢查你的系統是否支持虛擬化

一般出現的都不會是非空的內容。

<code>grep -E ‘vmx|svm' /proc/cpuinfo/<code>

如果您這邊出現的是空的內容,說明您的虛擬化並沒有開啟。現在您需要確認您是在虛擬機操作還是在實體機操作。如果是在虛擬機操作,請在虛擬機中打開虛擬化,如果部署虛擬機操作,建議手動安裝 KVM | SVM 。這兩個是根據您的 CPU 來的. 筆者的是 Intel 的處理器,所以安裝的是 KVM 。

<code>yum -y install qemu-kvm libvirt virt-install bridge-utils/<code>

驗證一下:

<code>lsmod | grep kvm/<code>

正常是出現這個:

<code>kvm_intel             188644  0 
kvm                   621480  1 kvm_intel
irqbypass              13503  1 kvm/<code>

開始安裝

現在,我們開始安裝了。

<code>cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF/<code>
<code>yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

systemctl enable kubelet && systemctl start kubelet/<code>
<code>cat <  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system/<code>

這裡需要修改的有:

  • advertiseAddress 換成自己的本機地址
  • imageRepository 改為:registry.cn-hangzhou.aliyuncs.com/google_containers 開始拉取鏡像kubeadm config images pull --config kubeadm-init.yaml 開始初始化:kubeadm init --config kubeadm-init.yaml 最後看到這個: 記錄下來 master ```shell Your Kubernetes control-plane has initialized successfully!
<code>To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.1.101:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:9b73ea329c71b1d9baa96a955ed9a422cbd45dd4fe3ce0f3efd135c5065316ec/<code>
<code>其中 `kubeadm join` 是 worker 節點加入所需要執行的命令。

現在來配置 `kubectl` 命令:
```shell
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config/<code>
<code>kubectl get node/<code>

這裡出現的 NotReady 是因為網絡還沒配置。

配置網絡

<code>wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml
/<code>

這裡,我們需要知道 kubeadm-init.yaml 中的 serviceSubnet 的值,並將 calico.yaml 中的 將192.168.0.0/16修改為 serviceSubnet 的值。

<code>- name: CALICO_IPV4POOL_CIDR
value: "10.96.0.0/12"/<code>

此時我們需要執行一下:

<code>kubectl apply -f calico.yaml/<code>
<code>kubectl get pod --all-namespaces
# 這個要等一會才有變化
kubectl get node/<code>

安裝 Dashboard

<code>wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
kubectl apply -f recommended.yaml/<code>

我們現在再來看一下這個 Pods 的狀態:

<code>kubectl get pods --all-namespaces/<code>

創建一個用戶

dashboard-admin.yml 文件內容如下:

<code>apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin
  namespace: kube-system/<code>
<code>kubectl apply -f dashboard-admin.yml/<code>

證書生成

<code>grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key
openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"/<code>

會生成三個文件:

<code>-rw-r--r--  1 root root  1082 Apr 13 06:28 kubecfg.crt
-rw-r--r--  1 root root  1675 Apr 13 06:28 kubecfg.key
-rw-r--r--  1 root root  2464 Apr 13 06:29 kubecfg.p12/<code>

kubecfg.p12 即需要導入客戶端機器的證書. 將證書拷貝到客戶端機器上, 導入即可.

登陸 Dashboard

<code>wget  https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml/<code>

修改如下:

<code>kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30000
  selector:
    k8s-app: kubernetes-dashboard/<code>

然後我們在創建:

<code>kubectl create -f recommended.yaml/<code>

在查看一下:

<code>kubectl get svc -n kubernetes-dashboard/<code>

現在可以登錄了: https://192.168.1.101:30000/#/login

我們使用 Token 的方式進行登錄:

<code>kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')/<code>

我們拿一個 Token:

<code>eyJhbGciOiJSUzI1NiIsImtpZCI6IkdHTm1jdTFyTnVwYXljei03d0kyUE5KN3Q3aTE5aFVPRUVvWWhtaFVsdzAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJ0dGwtY29udHJvbGxlci10b2tlbi03dHdtZyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJ0dGwtY29udHJvbGxlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjhkNTk5NjU3LTg1NzQtNDRmYS05NGMxLWUxZmM0MGJmZWRkNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTp0dGwtY29udHJvbGxlciJ9.NxZnKSHjOI9VXVFjrVJeWhGX5U8aKjV5Kk_iBbU5KyVTBgZO0NUjcWlpHLDJGuZIydyHLkqO_xWctAWKsuiPLVThuxbSZ3pdJxIEu0qavt2e4SC8xHMBK9S4l6UvQ2si6ZGSB5TkVirdxJ7-9kyjKnPNEAnwso_28vh19p9c6lcj7pUBZlHu3f_eiEMX3y8xtXYAysVGrRUI02g7PakIBwCb4NmZXcuCmL7RUDJEDBHfFl1I-hmaTDeMGQoUCwuNqSADGjpkkEs7Av1CrL4VjfE24M-XjrQl7KYHXH_V9doGEImGxRqOxFwqzD9Q-Fv-XYWFgLGSF0kKYg8Ko4hfJA/<code>

這樣 我們的 Mater 就好了。

重複執行 前期準備-修改hostname ~ 安裝Kubernetes-修改網絡配置的全部操作, 初始化一個Worker機器.


分享到:


相關文章: