1.1搭建K8s集群
Kubernetes部署的三种方式
- Minikube 是一个工具,可以在本地快速运行一个单点的Kubernetes,仅用于日常尝试或者开发
- Kubeadm 也是一个工具,提供Kubeadm init和kubeadm join,用于快速部署Kubernetes。
- 二级制 从官方下载发行的包,手动部署每个组件,组成Kubernetes组件
初学者建议使用Kubeadm ,有经验了使用二进制部署更好排查问题,本文采用Kubeadm 进行部署。
使用kubeadm搭建一个3台机器组成的k8s集群,1台master节点,2台worker节点
如果大家机器配置不够,也可以使用在线的,或者minikube的方式或者1个master和1个worker
配置要求(每台虚拟机的基本配置,官网要求的):
系统:CentOS 7 CPU: 至少两核 内存:最少2G
1.2 准备3台centos
大家根据自己的情况来准备centos7的虚拟机。
要保证彼此之间能够ping通,也就是处于同一个网络中,虚拟机的配置要求上面也描述咯。
1.3 安装Docker
参考官网地址:https://docs.docker.com/engine/install/centos/
01 移除之前的docker相关sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
02 安装yum-util安装包,
sudo yum install -y yum-utils
03 设置docker仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
【这里需要先设置阿里云镜像加速器,免费的】
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://miulxnq3.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
04安装docker
安装指定版本的语句为(推荐): yum install -y docker-ce-20.10.1 docker-ce-cli-20.10.1 containerd.io 安装最新版本的语句为: sudo yum install docker-ce docker-ce-cli containerd.io
05 启动docker
sudo systemctl start docker && sudo systemctl enable docker
1.5 修改hosts文件
(1)master
设置master的hostname,并且修改hosts文件sudo hostnamectl set-hostname m vi /etc/hosts 192.168.1.128 m 192.168.1.129 w1 192.168.1.130 w2
注:192.168.1.128 , 192.168.1.129, 192.168.1.130 是我自己虚拟机的IP,请自行对应自己的虚拟机ip
(2)两个worker
设置worker01/02的hostname,并且修改hosts文件sudo hostnamectl set-hostname w1 sudo hostnamectl set-hostname w2 vi /etc/hosts 192.168.1.128 m 192.168.1.129 w1 192.168.1.130 w2
(3)使用ping测试一下
1.6 系统基础前提配置
(1)关闭防火墙systemctl stop firewalld && systemctl disable firewalld
(2)关闭selinux
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
(3)关闭swap
swapoff -a sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
(4)配置iptables的ACCEPT规则
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
(5)设置系统参数
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system
1.7 Installing kubeadm, kubelet and kubectl
(1)配置yum源 (使用阿里云镜像下载:https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.3e221b110MmjAj)
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
(2)安装kubeadm&kubelet&kubectl
安装指定版本(推荐使用,可根据情况自行替换版本): yum install -y kubeadm-1.20.4-0 kubelet-1.20.4-0 kubectl-1.20.4-0 安装最新版本: yum install -y kubelet kubeadm kubectl
(3)docker和k8s设置同一个cgroup
vi /etc/docker/daemon.json 添加下面内容: "exec-opts": ["native.cgroupdriver=systemd"],
如下图所示:
重启dockersystemctl restart docker
使用 kubelet命令,这边如果发现输出directory not exist,也说明是没问题的,大家继续往下进行即可
sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
设置 kubelet开机自启和启动
systemctl enable kubelet && systemctl start kubelet
1.8 拉取proxy/pause/scheduler等国内镜像
(1)查看kubeadm使用的镜像
kubeadm config images list
如下图所示:(可以发现这里都是国外的镜像)
(2)解决国外镜像不能访问的问题
#创建kubeadm.sh脚本,用于拉取镜像/打tag/删除原有镜像
#!/bin/bash set -e KUBE_VERSION=v1.20.4 KUBE_PAUSE_VERSION=3.2 ETCD_VERSION=3.4.13-0 CORE_DNS_VERSION=1.7.0 GCR_URL=k8s.gcr.io ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers images=(kube-proxy:${KUBE_VERSION} kube-scheduler:${KUBE_VERSION} kube-controller-manager:${KUBE_VERSION} kube-apiserver:${KUBE_VERSION} pause:${KUBE_PAUSE_VERSION} etcd:${ETCD_VERSION} coredns:${CORE_DNS_VERSION}) for imageName in ${images[@]} ; do docker pull $ALIYUN_URL/$imageName docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName docker rmi $ALIYUN_URL/$imageName done
# 运行脚本
sh ./kubeadm.sh
# 查看镜像
docker images
1.9 kube init初始化master
(1)初始化master节点
注:**此操作是在主节点上进行**,如果已设置过集群,需要重新初始化集群状态:kubeadm reset,然后再进行上述操作
注:kubernetes-version 为上面下载的 kubectl的版本,apiserver-advertise-address:需要设置的主节点的ip
pod-network-cidr:为k8s集群的内部网段
注:记得保存好最后kubeadm join的信息,初始化命令执行之后,日志里面会有kubeadm join的信息
kubeadm init --kubernetes-version=1.20.4 --apiserver-advertise-address=192.168.1.128 --pod-network-cidr=10.244.0.0/16
(2)根据日志提示
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
使用kubectl cluster-info查看一下是否初始化成功
(4)查看pod验证一下
等待一会儿,同时可以发现像etc,controller,scheduler等组件都以pod的方式安装成功了
注:coredns没有启动,需要安装网络插件kubectl get pods -n kube-system
(5)健康检查
curl -k https://localhost:6443/healthz
1.10 部署calico网络插件
选择网络插件:https://kubernetes.io/docs/concepts/cluster-administration/addons/
k8s提供了多种网络插件,可进入官网网址自行选择,并按照操作指南进行操作,本文使用calico。
在k8s中安装calicokubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml
确认一下calico是否安装成功
kubectl get pods --all-namespaces -w
1.11 kube join
记得保存初始化master节点的最后打印信息【注意这边大家要自己的,下面我的只是一个参考】**
kubeadm join 192.168.1.128:6443 --token qqjoan.k4i3b39ka7dqbgvb \
--discovery-token-ca-cert-hash sha256:1b7337489a14024f842ad1051c25d6fec2998d80927e6218ebd3f4aa45a5e175(1)在woker01和worker02上执行上述命令
(2)在master节点上检查集群信息
执行如下命令,查看集群信息:
kubectl get nodes
如下图所示: 等待status状态全部变为Ready代表集群部署成功。
注:版本统一(版本不统一会存在,无法支持的问题)
Docker 20.10.1
---
kubeadm-1.20.4-0
kubelet-1.20.4-0
kubectl-1.20.4-0
---
k8s.gcr.io/kube-apiserver:v1.20.4
k8s.gcr.io/kube-controller-manager:v1.20.4
k8s.gcr.io/kube-scheduler:v1.20.4
k8s.gcr.io/kube-proxy:v1.20.4
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0
---
calico:v3.9
```