環境準備
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機器.