k8s002之安装部署

51 篇文章 4 订阅
28 篇文章 10 订阅

一、K8S架构

在这里插入图片描述

1、API Server :用于暴露Kubernetes API,任何资源的请求的调用操作都是通过kube-apiserver提供的接口进行的。

2、Etcd:是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。

3、Controller-Manager:作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。

4、Scheduler:监视新创建没有分配到Node的Pod,为Pod选择一个Node。

5、Kubelet:负责维护容器的生命周期,同时负责Volume和网络的管理。

6、Kube proxy:是Kubernetes的核心组件,部署在每个Node节点上,它是实现Kubernetes Service的通信与负载均衡机制的重要组件。

安装环境说明
k8s集群:192.168.168.128-130;
k8s集群:192.168.168.100-102;
我安装了两次,所以Ip有两套。

主机名称IP地址需要安装的软件
k8s-master192.168.168.128/100kube-apiserver、kube-controller-manager、kube-scheduler、docker、etcd、calico,NFS
k8s-node1192.168.168.129/101kubelet、kubeproxy、Docker18.06.1-ce
k8s-node2192.168.168.130/102kubelet、kubeproxy、Docker18.06.1-ce

安装K8S前提

先安装好Docker:
https://blog.csdn.net/qq_41822345/article/details/107123094

二、三台机器的通用安装

注:本安装为 非高可用版 k8s安装,简易版安装步骤,用于k8s的入门学习

1.环境准备

1.修改三台机器的hostname

hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2

2.修改hosts

cat >>/etc/hosts<<EOF 
192.168.168.128 k8s-master 
192.168.168.129 k8s-node1
192.168.168.130 k8s-node2 
EOF

3.关闭防火墙和关闭SELinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0 # 临时关闭
vi /etc/sysconfig/selinux #永久关闭
# 改为SELINUX=disabled

4.设置允许路由转发,不对bridge的数据进行处理,先创建文件

vi /etc/sysctl.d/k8s.conf
内容如下:
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1 
vm.swappiness = 0

执行文件

sysctl -p /etc/sysctl.d/k8s.conf

5.kube-proxy 开启ipvs的前置条件

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

添加文件权限

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash
/etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

6.所有节点关闭swap

swapoff -a  #临时关闭
vi /etc/fstab #永久关闭
#注释掉以下字段
/dev/mapper/cl-swap swap swap defaults 0 0

2.安装kubelet、kubeadm、kubectl

  • kubeadm: 用来初始化集群的指令。
  • kubelet: 在集群中的每个节点上用来启动 pod 和 container 等。
  • kubectl: 用来与集群通信的命令行工具。

1.清空yum缓存

yum clean all

2.设置 yum安装源

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=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 kubeadm kubectl

kubelet 设置开机启动(注意:先不启动,现在启动的话会报错)

systemctl enable kubelet
(关闭systemctl disable kubelet)

查看版本

kubelet --version

安装的是最新版本: Kubernetes v1.19.1(可能会变化)

三、Master节点安装

1.运行初始化命令

kubeadm init --kubernetes-version=1.19.1 \
--apiserver-advertise-address=192.168.168.128 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

注意:
kubernetes-version的值 即为 kubelet --version获得的值
apiserver-advertise-address这个地址必须是master机器的IP

常用错误:

  • 错误一:[WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver作为Docker cgroup驱动程序。,Kubernetes推荐的Docker驱动程序是“systemd”
    解决方案:修改Docker的配置,如下:
vi /etc/docker/daemon.json
# 加入:
{
  "exec-opts":["native.cgroupdriver=systemd"]
}
  • 错误二:下载k8s的某些容器镜像组件失败。
    解决方案:docker.io仓库对这些容器做了镜像,可以通过下列命令下拉取相关镜像:
docker pull coredns/coredns:1.8.0
docker tag docker.io/coredns/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR ImagePull]: failed to pull image registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0: output: Error response from daemon: manifest for registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0 not found
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
[root@k8s-node1 ~]# docker pull coredns/coredns:1.8.0        #
1.8.0: Pulling from coredns/coredns
c6568d217a00: Already exists 
5984b6d55edf: Pull complete 
Digest: sha256:cc8fb77bc2a0541949d1d9320a641b82fd392b0d3d8145469ca4709ae769980e
Status: Downloaded newer image for coredns/coredns:1.8.0
docker.io/coredns/coredns:1.8.0
[root@k8s-node1 ~]# docker tag docker.io/coredns/coredns:1.8.0  registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0
  • 错误三:[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
    解决方案:修改虚拟机的CPU的个数,至少为2个。重新装linux。

成功安装过程日志:

在这里插入图片描述

最后,会提示节点安装的命令,必须记下来:

kubeadm join 192.168.168.128:6443 --token r6f77w.hyzai8ko7tlmqmzp \
    --discovery-token-ca-cert-hash sha256:def116c287e8881b57bd6ec496d2147a57e661e600abb99169f53158639dbcc1

2.启动kubelet

systemctl restart kubelet
systemctl status kubelet

在这里插入图片描述

3.配置kubectl工具

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

4.安装Calico

mkdir k8s

cd k8s

wget https://docs.projectcalico.org/v3.10/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

sed -i 's/192.168.0.0/10.244.0.0/g' calico.yaml

kubectl apply -f calico.yaml

5.等待几分钟,查看所有Pod的状态,确保所有Pod都是Running状态

kubectl get pod --all-namespaces -o wide

在这里插入图片描述

四、slave节点安装

前提:

master节点:要保证master节点是启动的 → systemctl status kubelet

slave节点:要先安装好docker(docker安装https://blog.csdn.net/qq_41822345/article/details/107123094

1.让所有节点加入集群环境(使用之前Master节点产生的命令加入集群)

kubeadm join 192.168.168.128:6443 --token r6f77w.hyzai8ko7tlmqmzp \
    --discovery-token-ca-cert-hash sha256:def116c287e8881b57bd6ec496d2147a57e661e600abb99169f53158639dbcc1

这里加入节点的命令因为时效性有可能会失效,重新生成即可方法如下:

#重新生成
[root@k8s-master ~]# kubeadm token create 
ntqpnh.f5tbwenab50233at
#查看其TTL
[root@k8s-master ~]# kubeadm token list
TOKEN                     TTL         EXPIRES                     USAGES                  ntqpnh.f5tbwenab50233at   23h        2020-01-08T19:27:01+08:00    a<none>                 #生成sha256                   
[root@k8s-master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
#node节点重新加入
[root@k8s-node-1 ~]# kubeadm join 192.168.168.128:6443 --token ntqpnh.f5tbwenab50233at --discovery-token-ca-cert-hash sha256:ccda864cd48283781798aba6aefbd929b6c52124bd3f71c62e38914d02dce0e8

2.启动kubelet

systemctl start kubelet

在这里插入图片描述

3.回到Master节点查看,如果Status全部为Ready,代表集群环境搭建成功!!!

kubectl get nodes

在这里插入图片描述

安装完成!!!!!!

五、nodes从节点运行kubectl

1、拷贝master节点/usr/bin/kubectl到node节点;

scp /usr/bin/kubectl root@192.168.168.101:/usr/bin/

2、拷贝master节点/apps/conf/kubernetes/admin.conf 到node节点;

scp /etc/kubernetes/admin.conf root@192.168.168.101:/etc/kubernetes/

3、在node节点设置环境变量:

vim /etc/profile

在文件最后添加如下配置:

# k8s kubectl 配置
export KUBECONFIG=/etc/kubernetes/admin.conf

保存退出,执行 source /etc/profile,配置立即生效。

4、检验配置是否成功。

[root@k8s-node1 ~]# kubectl get node
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   30m   v1.21.0
k8s-node1    Ready    <none>                 26m   v1.21.0
k8s-node2    Ready    <none>                 22m   v1.21.0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的程序猿~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值