準備:
系統信息:
hostnamectl set-hostname k8s-master1
更換yum源:參考地址:https://developer.aliyun.com/mirror/
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
yum makecache
關閉selinux和firewalld:
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
關閉swap分區:
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sysctl -p
設置內核參數: 配置內核參數,將橋接的IPv4流量傳遞到iptables的鏈
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
安裝一些依賴包:
yum install -y epel-release conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
yum install -y yum-utils device-mapper-persistent-data lvm2
安裝最新的docker之前安裝需要安裝最新的 containerd.io ,不然可能報錯
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
yum install containerd.io-1.2.6-3.3.el7.x86_64.rpm
------------
修改docker repo 安裝docker 參考鏈接:https://developer.aliyun.com/mirror/
wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl start docker
systemctl enable docker
修改docker鏡像源爲阿里雲:
登陸:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors安裝提供的方法修改
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://qdsf52uj.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
---------------------------
安裝kubernetes 參考鏈接:https://developer.aliyun.com/mirror/
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
yum -y install kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
systemctl enable kubelet && systemctl start kubelet
-----------------------------
獲取鏡像列表
kubeadm config images list
W0629 10:12:30.134641 50835 version.go:102] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.txt": Get https://dl.k8s.io/release/stable-1.txt: dial tcp: lookup dl.k8s.io on 192.168.1.1:53: no such host
W0629 10:12:30.137476 50835 version.go:103] falling back to the local client version: v1.18.5
W0629 10:12:30.150395 50835 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
k8s.gcr.io/kube-apiserver:v1.18.3
k8s.gcr.io/kube-controller-manager:v1.18.3
k8s.gcr.io/kube-scheduler:v1.18.3
k8s.gcr.io/kube-proxy:v1.18.3
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7
拉取鏡像:
方法一:
生成默認kubeadm.conf文件
kubeadm config print init-defaults > kubeadm.conf
默認爲google的鏡像倉庫地址k8s.gcr.io,國內無法訪問,需要把地址修改爲國內的地址,這裏使用阿里雲的鏡像倉庫地址。
編輯kubeadm.conf,將imageRepository修改爲registry.aliyuncs.com/google_containers 。並確認Kubernetes版本是v1.18.5,和上面的鏡像列表的版本保持一致
將imageRepository: k8s.gcr.io 修改爲
imageRepository: registry.aliyuncs.com/google_containers
下載鏡像:
kubeadm config images pull --config kubeadm.conf
或者docker pull指定版本直接拉取:
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7
修改tag:
docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.18.3 k8s.gcr.io/kube-apiserver:v1.18.3
docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.18.3 k8s.gcr.io/kube-controller-manager:v1.18.3
docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.3 k8s.gcr.io/kube-scheduler:v1.18.3
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.18.3 k8s.gcr.io/kube-proxy:v1.18.3
docker tag registry.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker tag registry.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag registry.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7
方法二: 腳本解決 上面一大堆操作 只需要寫一個簡單的腳本就可以一鍵操作了:
#! /bin/sh
for name in kube-controller-manager:v1.18.3 kube-scheduler:v1.18.3 kube-proxy:v1.18.3 pause:3.2 etcd:3.4.3-0 coredns:1.6.7 kube-apiserver:v1.18.3
do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$name
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$name k8s.gcr.io/$name
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$name
done
忽略swap錯誤:
kubernetes集羣不允許開啓swap,所以我們需要忽略這個錯誤
編輯文件 /etc/sysconfig/kubelet,將文件裏的“KUBELET_EXTRA_ARGS=”改成這樣:KUBELET_EXTRA_ARGS="–fail-swap-on=false"
cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
好了 上面的準備工作都做好了 我們就可以初始化節點了:
這裏定義先POD的網段爲: 10.244.0.0/16,API Server地址爲節點所在機器的IP地址 用 ip addr查看
kubeadm init --kubernetes-version=v1.18.3 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.1.151
該命令也可以加入參數:
--image-repository registry.aliyuncs.com/google_containers
指定初始化的時候使用阿里源,因爲上面2中方法手動拉取了鏡像,所以我這裏沒有加這個參數。
kubeadm init --kubernetes-version=v1.18.3 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.1.151
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看:
kubectl get componentstatus
kubectl get pods --all-namespaces
kubectl get cs
安裝calico網絡:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
也可以安裝flannel: 參考地址:https://github.com/coreos/flannel
$ kubectl apply -f https://github.com/coreos/flannel/blob/v0.7.1/Documentation/kube-flannel-rbac.yml
$ kubectl apply -f https://github.com/coreos/flannel/blob/v0.7.1/Documentation/kube-flannel.yml
拉取dashboard鏡像: 根據自己的需求修改版本
docker pull kubernetesui/dashboard:v2.0.0
docker pull kubernetesui/metrics-scraper:v1.0.4
去下載dashboard.yaml文件:自行百度
我這裏提供一個是從google網站下載的原版文件,不過我修改了,修改的部分已經標出來,自己根據需要修改即可
開始安裝k8s的dashboard:
參考:https://zhuanlan.zhihu.com/p/114010229
kubectl apply -f dashboard.yaml
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}')
安裝 metrics-server 插件(cpu/memory信息)
git clone https://github.com/kubernetes-sigs/metrics-server
然後切換到指定的分支
git checkout -b 本地分支名 origin/遠程分支名
或者 git clone -b 遠程分支名 GitHub-URL
例如我:
git checkout -b 本地分支名 origin/遠程分支名
cd /root/k8s3/metrics-server/deploy/1.8+
先修改:metrics-server-deployment.yaml 文件 下面部分內容
image: registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
imagePullPolicy: IfNotPresent
args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
修改完成之後執行: kubectl create -f .
如果出現錯誤你可能需要下面的命令來解決:k8s3 是我的機器hostname 修改成你的
kubectl taint node k8s3 node-role.kubernetes.io/master:NoSchedule-
kubectl taint nodes --all node-role.kubernetes.io/master-
kubectl taint nodes k8s3 node-role.kubernetes.io/master=true:NoSchedule