Centos7下部署k8s集群
Centos7下部署k8s集群1.环境准备角色/主机名ipk8s-master192.168.132.155k8s-node1192.168.132.1562.基础设置2.1 关闭防火墙(master/node操作)systemctl stop firewalld && systemctl disable firewalld2.2 关闭selinux(master/node操作)s
·
Centos7下部署k8s集群
1.环境准备
角色/主机名 | ip |
---|---|
k8s-master | 192.168.132.155 |
k8s-node1 | 192.168.132.156 |
2.基础设置
2.1 关闭防火墙(master/node操作
)
systemctl stop firewalld && systemctl disable firewalld
2.2 关闭selinux(master/node操作
)
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
2.3 关闭swap(必须)(master/node操作
)
swapoff -a && sed -i 's/.*swap.*/#&/' /etc/fstab
2.4 配置时间同步(这里我直接和master进行同步
)
2.5 配置内核参数(master/node操作
)
将桥接的IPV4流量传递到iptables
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
3.安装docker(master/node操作
)
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docker
4.添加阿里云yum软件源(master/node操作
)
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
5.安装kubeadm,kubelet和kubectl(master/node操作
)
5.1 各组件作用
kubelet # 运行在 Cluster 所有节点上,负责启动 Pod 和容器。
kubeadm # 用于初始化 Cluster。
kubectl # 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。
- 在部署kubernetes时,要求master node和worker node上的版本保持一致,否则会出现版本不匹配导致奇怪的问题出现。本文将介绍如何在CentOS系统上,使用yum安装指定版本的Kubernetes。
- 我们需要安装指定版本的kubernetes。那么如何做呢?在进行yum安装时,可以使用下列的格式来进行安装:
- yum install -y kubelet- kubectl- kubeadm-
5.2 安装(master/node操作
)
yum install -y kubelet-1.19.0 kubeadm-1.19.0 kubectl-1.19.0
systemctl enable kubelet #在这里只需enable,不用start
6.部署kubernetes Master(此步只在master上操作)
6.1 初始化kubeadm (master操作
)
[root@k8s-master ~]# kubeadm init \
--apiserver-advertise-address=192.168.132.155 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.19.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
解释:
- –apiserver-advertise-address=192.168.132.155 #集群通告地址,填写master物理网卡地址
- –image-repository #指定阿里云镜像仓库地址(#指定从什么位置拉取镜像,默认值是k8s.gcr.io,我们将其指定为国内镜像地址:registry.aliyuncs.com/google_containers)
- –kubernetes-version v1.19.0 #k8s版本,与上面安装版本一致
- –service-cidr=10.1.0.0/16 #集群内部虚拟网络,指定Cluster IP的网段
- –pod-network-cidr=10.244.0.0/16 #指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 –pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。
- –ignore-preflight-errors=all #忽略安装过程中的一些错误
备注:初始化出错的时候,想要重新做执行kubeadm reset
初始化执行的时候,出现错误:
报错1:
Aug 6 21:14:41 localhost kubelet: E0806 21:14:41.164994 72318 server.go:294] "Failed to run kubelet" err="failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\""
Aug 6 21:14:41 localhost systemd: kubelet.service: main process exited, code=exited, status=1/FAILURE
Aug 6 21:14:41 localhost systemd: Unit kubelet.service entered failed state.
Aug 6 21:14:41 localhost systemd: kubelet.service failed.
Aug 6 21:14:41 localhost systemd: Stopped kubelet: The Kubernetes Node Agent.
解决报错1方案:
原因:docker和k8s使用的cgroup不一致导致
说明:可以只修改docker,docker不再设置native.cgroupdriver=systemd,或将systemd改成cgroupfs,改成和k8s一样(k8s默认是cgroupfs,但是他竟然推荐用systemd,上文报错中可看出)。
1.echo y | kubeadm reset #重置
2. cat /etc/docker/daemon.json #更改docker cgroupdirver为systemd
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"data-root": "/data/docker"
}
3. cat > /var/lib/kubelet/config.yaml <<EOF #更改kubelet croupdriver为systemd
> apiVersion: kubelet.config.k8s.io/v1beta1
> kind: KubeletConfiguration
> cgroupDriver: systemd
> EOF
4.systemctl daemon-reload #重启服务
systemctl restart docker
systemctk restart kubelet
5.重新执行初始化
[root@k8s-master ~]# kubeadm init \
--apiserver-advertise-address=192.168.132.155 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.19.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
执行成功:
最后一段保存下来,后续添加节点会用到:kubeadm join 192.168.132.155:6443 --token b3dsrl.hqw7s4ew9n6setrl \ --discovery-token-ca-cert-hash sha256:aac25e1d77c5550fe2fb6491758597eb555a349dfb3f80ee37833ecb075c75d2
报错2:
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error
解决报错2方案:发现和报错1是同一个问题
6.2 使用kubectl工具 (master操作
)
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
下面就可以使用kubectl工具了
node节点为NotReady,因为coredns pod没有启动,缺少网络pod。
7.安装calico网络 (master操作
)
wget https://docs.projectcalico.org/manifests/calico.yaml
vi calico.yaml
修改里面定义Pod网络(CALICO_IPV4POOL_CIDR)那行,该值与Kubeadm init指定的
–pod-network-cidr需一致
过一会再查看信息,节点已经处于Ready状态了。
再次查看ndoe,状态已经为ready
8.将node节点加入集群(所有node节点操作
)
- 向集群添加新节点,执行在kubeadm init输出的kubeadm join命令
- 复制上面命令,在node节点上执行,记得更换对应的ip
- 这里的–token 来自前面kubeadm init输出提示,如果当时没有记录下来可以通过kubeadm token list 查看
kubeadm join 192.168.132.155:6443 --token l2og78.ut1s3rsawplgd3pp \
--discovery-token-ca-cert-hash sha256:3df6de298e664ba155b0748f9901c3966a2dc29e4b4cc28c2fdded1d136a22c1
查看节点状态
更多推荐
已为社区贡献3条内容
所有评论(0)