前提条件:准备一台云服务器(为了节约成本,这里是单节点部署,多节点不过是在多台服务器重新走一遍安装流程)
第一步,安装docker:
k8s不一定需要docker容器,也可以使用其他容器,这里使用的是docker。
1,先更新一下yum源,执行:sudo yum clean all --> sudo yum makecache --> sudo yum install -y yum-utils device-mapper-persistent-data lvm2 --> sudo yum install container-selinux libseccomp systemd libcgroup fuse-overlayfs slirp4netns(docker需要的yum) --> sudo yum makecache fast --> yum repolist(查看所有yum源,确保都有以上) --> sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(设置docker-ce.repo)2,开始安装,依次执行:wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo(下载)--> yum list docker-ce.x86_64 --showduplicates | sort -r (列出所有docker版本) --> 选择自己想要更新的版本:sudo yum -y install docker-ce-18.06.1.ce-3.el7(这里我选的docker-ce-18.06.1.ce-3.el7)--> sudo mkdir -p /etc/docker (创建文件夹,为了放daemon.json) --> 创建daemon.json文件:(cat > /etc/docker/daemon.json << EOF "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] EOF),其中registry-mirrors镜像加速地址去自己的阿里云账号复制即可3,启动docker,依次执行:sudo systemctl daemon-reload(加载配置) --> sudo systemctl restart docker(启动docker),到这里就全部成功了。4,验证docker:docker verion --> docker pull redis:6.0.8(测试镜像地址是否正确) --> docker images -a(能看到redis镜像即可)第二步:安装k8s工具及相关镜像
主要云服务器的一些配置(建议全部执行)
1:设置允许 iptables 检查桥接流量与相关插件安装
cat > /etc/modules-load.d/k8s.conf << EOF
br_netfilter
EOF
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
cat > /etc/systemd/system.conf.d/kubernetes-accounting.conf << EOF
[Manager]
DefaultCPUAccounting=yes
DefaultMemoryAccounting=yes
EOF
sudo sysctl --system
yum -y install socat conntrack-tools
2:安装 kubeadm与kubectl
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet-1.20.2 kubeadm-1.20.2 kubectl-1.20.2 --disableexcludes=kubernetes
systemctl enable --now kubelet
curl -Lo kubectl "https://storage.googleapis.com/kubernetes-release/release/v1.20.2/bin/linux/amd64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/
3:拉取镜像
可以使用下面阿里云命令(版本自行选择,下面是v1.21.1)
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker pull coredns/coredns:1.7.0
镜像更改名称(因为 k8s 安装时会默认在镜像中获取 k8s.gcr.io 前缀的镜像):
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.1 k8s.gcr.io/kube-apiserver:v1.21.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.1 k8s.gcr.io/kube-proxy:v1.21.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.1 k8s.gcr.io/kube-controller-manager:v1.21.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.1 k8s.gcr.io/kube-scheduler:v1.21.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker tag coredns/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0
第三步:初始化以及添加后续相关配置
主要是使用kubeadm init
初始化集群
1:修改主机映射(可不改,只是一个名称罢了),命令:vim /etc/hosts
2:先重启kubelet,命令:systemctl restart kubelet ,再重置集群:kubeadm reset(首次不用)
3:初始化命令:kubeadm init --apiserver-advertise-address=172.27.222.87 --kubernetes-version v1.21.1 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
解释:其中apiserver-advertise-address为云服务器的内网地址,注意不是公网,kubernetes-version便是安装的k8s版本,其他自行百度即可,也可以直接使用上面配置
4:如果上面命令3执行报错:可以执行2步骤,尝试再次初始化。
执行:systemctl status kubelet.service,看是否成功:
若是报错:journalctl -xu kubelet --reverse(倒序) 或者journalctl -u kubelet | tail -n 100查询日志,自行排查。
5:设置k8s的一些权限配置
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
6:前面全部执行完成之后,再次执行上面2,3,5步骤命令,主要是重启加载配置。执行完之后,查看节点状态:kubectl get nodes(返回结果显示为NoReady)。
就涉及到网络插件内容。
第四步:安装网络插件calico
网络插件可选f
lannel等,这里选择的是calico
1:镜像下载
docker pull calico/cni:v3.14.2
docker pull calico/pod2daemon-flexvol:v3.14.2
docker pull calico/node:v3.14.2
docker pull calico/kube-controllers:v3.14.2
docker images -a
2:创建文件夹,在opt下面创建k8s,主要是放置calico.yaml文件,calico.yaml文件可自行网上搜索复制下来,然后自行修改版本号等配置即可,下面是calico.yaml文件截图。
操作完后,在该文件目录下执行:kubectl apply -f calico.yaml
3:这里配置完成之后,再次第三步骤中的2,3小点,或者全部执行第三步。执行完之后,查看节点状态:kubectl get nodes(返回结果显示为Ready才正常)
到此,基本上k8s已经安装部署完成了。
安装nginx测试:
安装:kubectl create deployment nginx --image=nginx:1.14-alpine
启动:kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort
验证:kubectl get pod -A(状态正常才正确)
执行:kubectl get svc查询tcp端口,然后执行curl http://127.0.0.1:端口,返回nginx页面即可。