使用 kubeadm安裝kubernetes v1.15.3

環境準備

主機說明

主機名 IP地址 角色
master 192.168.50.184 k8s_master
node 192.168.50.56 k8s_node

所有節點均需做以下操作

關閉防火牆與selinux

  • 關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
  • 關閉selinux
setenforce 0
sed -i.ori "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config

關閉swap分區

swapoff -a && sysctl -w vm.swappiness=0
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab

爲什麼要關閉swap分區?

當前的Qos策略都是假定主機不啓用內存Swap。如果主機啓用了Swap,那麼Qos策略可能會失效。例如:兩個Pod都剛好達到了內存Limits,由於內存Swap機制,它們還可以繼續申請使用更多的內存。如果Swap空間不足,那麼最終這兩個Pod中的進程可能會被“殺掉”。
目前Kubernetes和Docker尚不支持內存Swap空間的隔離機制。它的想法是將實例緊密包裝到儘可能接近100%。 所有的部署應該與CPU /內存限制固定在一起。 所以如果調度程序發送一個pod到一臺機器,它不應該使用交換。 另一方面是出於對性能的考慮。

設置內核參數

cat > /etc/sysctl.d/99-sysctl.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
EOF
  • 使內核參數配置生效
sysctl -p /etc/sysctl.d/99-sysctl.conf
mount -t cgroup -o cpu,cpuacct none /sys/fs/cgroup/cpu,cpuacct
  • 加載內核模塊
modprobe br_netfilter
modprobe ip_vs

安裝並啓動docker

卸載舊版本docker

yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

設置 yum repository

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安裝docker

yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io

修改docker鏡像源爲國內鏡像源

vi /lib/systemd/system/docker.service

在這裏插入圖片描述

啓動docker

systemctl enable docker
systemctl start docker

安裝nfs-utils

yum install -y nfs-utils

安裝kubernetes

配置kubernetes的yum源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

卸載舊版本kubernetes

yum remove -y kubelet kubeadm kubectl

安裝

yum install -y kubelet-1.15.3 kubeadm-1.15.3 kubectl-1.15.3

修改docker Cgroup Driver爲systemd

將/usr/lib/systemd/system/docker.service文件中的這一行 ExecStart=/use/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
修改爲 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd
vi /var/systemd/system/docker.service

在這裏插入圖片描述

重啓docker

systemctl daemon-reload
systemctl restart docker

啓動kubelet

systemctl enable kubelet && systemctl start kubelet
docker version

-------------------------以上操作需要在所有節點執行,切記--------------------------------

初始化 worker節點

只在master節點操作

export MASTER_IP=x.x.x.x

替換x.x.x.x爲master節點的實際IP(內網IP)

export APISERVER_NAME=apiserver.demo

替換apiserver.demo爲你想要的的dnsname,建議不要使用master的hostname作爲dnsname

export POD_SUBNET=10.100.0.1/20

Kubernetes 容器組所在的網段,該網段安裝完成後,由 kubernetes 創建,事先並不存在於物理網絡中

echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts
cat <<EOF > ./kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.15.3
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
controlPlaneEndpoint: "${APISERVER_NAME}:6443"
networking:
  serviceSubnet: "10.96.0.0/12"
  podSubnet: "${POD_SUBNET}"
  dnsDomain: "cluster.local"
EOF

kubeadm init

kubeadm init --config=kubeadm-config.yaml --upload-certs

配置 kubectl

mkdir /root/.kube/
cp -i /etc/kubernetes/admin.conf /root/.kube/config

安裝kubectl

mkdir /root/.kube/
cp -i /etc/kubernetes/admin.conf /root/.kube/config

安裝 calico 網絡插件

wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml
sed -i "s#192\.168\.0\.0/16#${POD_SUBNET}#" calico.yaml
kubectl apply -f calico.yaml

檢查master初始化結果

執行如下命令,等待 3-10 分鐘,直到所有的容器組處於 Running 狀態

watch kubectl get pod -n kube-system -o wide

查看 master 節點初始化結果

kubectl get nodes

初始化 worker節點

獲得 join命令參數

  • 在master節點上執行
kubeadm token create --print-join-command

可獲取kubeadm join 命令及參數,如下所示

kubeadm join apiserver.demo:6443 --token mpfjma.2dvfg8flqihor4vt     --discovery-token-ca-cert-hash sha256:6f7a8e40a815684372de5jje6f4d19aa2dbdb38411845a1cg7dd63485c43d303

初始化worker

在所有節點執行

echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts

將MASTER_IP和APISERVER_NAME替換爲master的IP和之前設置的APISERVER_NAME

執行kubeadm join

kubeadm join apiserver.demo:6443 --token mpfjma.2dvfg8flqihor4vt     --discovery-token-ca-cert-hash sha256:6f7a8e40a815684372de5jje6f4d19aa2dbdb38411845a1cg7dd63485c43d303

替換爲 master 節點上 kubeadm token create 命令的輸出

檢查初始化結果

  • 在master上執行
kubectl get nodes
  • 輸出結果如下所示
[root@demo-master-a-1 ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE     VERSION
demo-master-a-1   Ready    master   5m3s    v1.15.3
demo-worker-a-1   Ready    <none>   2m26s   v1.15.3

移除work節點

只在準備移除的work節點執行

kubeadm reset
  • 在master節點上執行
kubectl delete node demo-worker-x-x

將x-x替換爲要移除節點的名字,可以通過kubectl get nodes查看

安裝 Ingress Controller

  • 只在master節點上執行
kubectl apply -f https://kuboard.cn/install-script/v1.15.3/nginx-ingress.yaml
  • 卸載Ingress Controller
kubectl delete -f https://kuboard.cn/install-script/v1.15.3/nginx-ingress.yaml
  • 配置域名解析

將a.demo.yourdomain.com解析到任意work節點,訪問a.demo.yourdomain.com將得到一個404頁面

安裝kuboard

kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
  • 獲取token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}')

獲取的token

Name:         kuboard-user-token-rxgcl
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: kuboard-user
              kubernetes.io/service-account.uid: 8d19a6a2-78e7-4948-9af6-5b7b1d233c28

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXVzZXItdG9rZW4tcnhnY2wiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoia3Vib2FyZC11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiOGQxOWE2YTItNzhlNy00OTQ4LTlhZjYtNWI3YjFkMjMzYzI4Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmt1Ym9hcmQtdXNlciJ9.Lu0KggmFJD99nsO_hi7BD5RNr-nIIjfpYoyEytgmX6quygZ9f8iYYXrAwUFycqb1CCxJcG_j-Xa3qh9YPder1B_xBgangq_s6NiF4m3tVNoEWfrtK8keXvgORzh17FRaDClGueiUmbg6ufaoD3pIc5pmWCBrvK0KWyBCSlwoMlJYsCUk25DIzjkcqbUCiXevGEOJmK7Fc1g77rmf9w4Lhov4NcyQu9NlQZwlIL4M8iAKKVVwdedqkzStU41y2BUc_HfNGKRchqrc5U9jvZ4lJvrMp6GK7oUjaxDWgb8D-ESZdXEyrKwW1HdoQxVfAaCzOaOcoA9HVxh1pASaEzS2Cw
  • 訪問kuboard
http://任意worker節點ip+32567/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章