一、什么是Kubernetes?
简称:k8s
Kubemnetes 是用于自动部署、扩缩和管理容器化应用程序的开源系统。
而Docker:作为开源的应用容器引擎,可以把应用程序和其相关依赖打包生成一个 Image 镜像文件,是一个标准的运行环境,提供可持续交付的能力。
k8s的特性:
自动化上线和回滚、服务注册与发现、自我修复、存储编排、Secret和配置管理、自动装箱、批量执行、IPv4/IPv6双协议、水平扩展、为扩展性设计
解释:
服务发现与负载均衡:无需修改你的应用程序即可使用陌生的服务发现机制。
存储编排:自动挂载所选存储系统,包括本地存储。
Secret和配置管理:部署更新Secrets和应用程序的配置时不必重新构建容器镜像,且不必将软件堆栈配置中的秘密信息暴露出来。
批量执行:除了服务之外,Kubernetes还可以管理你的批处理和CI工作负载,在期望时替换掉失效的容器。
水平扩缩:使用一个简单的命令、一个U或基于CPU使用情况自动对应用程序进行扩缩。
自动化上线和回滚:Kubeetes会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。
自动装箱:根据资源需求和其他约束自动放置容器,同时避免影响可用性。
自我修复:重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器。
二、操作
1、准备
准备三台2核4G的虚拟机(内存至少2G以上)操作系统选择ContOS7及以上版本
可以参考VMware 安装与centOs7_vmwarext-CSDN博客
2、然后分别安装docker
sudo yum remove docker*
sudo yum install -y yum-utils
#配置docker yum地址
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装指定版本
sudo yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6
#启动&开机启动docker
systemctl enable docker --now
# docker镜像加速器配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://jlq98gb5.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver":"json-file",
"log-opts":{
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# sudo systemctl restart dockerLoaded plugins: faste stmirror,langpacks
3、然后安装kbernetes
1.关闭防火墙并且设置开机不启动
systemctl stop firewalld
systemctl disable firewalld
检查关闭情况
systemctl status firewalld
2.关闭selinux
# 将SElinux设置为permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
3.关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
如果上面命令执行失败就执行下面这个命令重启
systemctl reboot # 重启生效
查看
free -m # 查看下swap交换区是否都为0,如果都为0则swap关闭成功
4.给三台机器分别设置主机名
hostnamectl set-hostname xxx
第一台: k8s-master
第二台:k8s-node1
第三台:k8s-node2
查看
hostname
断开重连后
5.添加hosts,执行如下命令,ip需要修改你自己机器的ip
cat >> /etc/hosts << EOF
192.168.42.133 k8s-master
192.168.42.134 k8s-node1
192.168.42.135 k8s-node2
EOF
6.允许iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
EOF
sudo sysctl --system
7.设置时间同步
yum install ntpdate -y
ntpdate time.windows.com
4.安装kubelet、kubeadm、kubectl
# 8、配置k8s的yum源地址
cat <<EOF | sudo tee /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
如果之前安装过ks,先卸载旧版本
yum remove -y kubelet kubeadm kubectl
查看可以安装的版本
yum list kubelet --showduplicates | sort -r
安装 kubelet,kubeadm,kubectl指定版本,我们使用kubeadm方式安装k8s
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9
开机启动kubelet
sudo systemctl enable --now kubelet
查看安装状态
systemctl status kubelet
实时查看和跟踪 kubelet
服务的日志
journalctl -xefu kubelet
以下是这个命令各部分的含义:
journalctl
:用于查看系统日志的命令。-x
:为日志消息提供详细的说明。-e
:跳转到日志文件的末尾,实时跟踪新日志条目。-f
:跟踪实时日志输出,即新的日志条目会实时显示出来。-u kubelet
:过滤并只显示与kubelet
服务相关的日志条目。
5.初始化master节点
5.1下载各个机器所需要的镜像(目前只操作master节点)
sudo tee ./images.sh <<-'EOF'
# !/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]}; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF
chmod +x ./images.sh && ./images.sh
5.2初始化主节点
# 在k8s-master机器上执行初始化操作(里面的第一个ip地址就是k8s-master机器的IP,改成你自己机器的,后面两个ip网段不用动)
# 所有网络范围不重叠
kubeadm init \
--apiserver-advertise-address=192.168.42.133 \
--control-plane-endpoint=k8s-master \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16
如果有问题可以查看日志
journalctl -xefu kubelet
5.3配置环境变量
查看环境变量
echo $KUBECONFIG
没有
就配置.kube/config
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
echo $KUBECONFIG
网络插件的地址
https://kubernetes.io/docs/concepts/cluster-administration/addons/
如果初始化失败就重置kubeadm
kubeadm reset
rm -rf /etc/cni/net.d $HOME/ .kube/config
清理iptables规则
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
5.4安装网络插件Calico
curl https://docs.projectcalico.org/archive/v3.20/manifests/calico.yaml -O
部署网络时间
kubectl apply -f calico.yaml
查看所有
kubectl get pod -A
如果安装失败 手动安装
通过
kubectl describe pod calico-node-wrjkf -n kube-system
查看报错
安装
docker pull quay.m.daocloud.io/calico/cni:v3.20.6
在看
kubectl describe pod calico-node-wrjkf -n kube-system
安装
docker pull docker.m.daocloud.io/calico/pod2daemon-flexvol:v3.20.6
重启pod
kubectl delete pod calico-node-wrjkf -n kube-system
kubectl get pod -A
继续查看
kubectl describe pod calico-kube-controllers-577f77cb5c-tvsk8 -n kube-system
继续拉取
docker pull quay.m.daocloud.io/calico/kube-controllers:v3.20.6
完美
6、加如node节点
使用初始化主节点的令牌
# 将node节点加入进master节点的集群里
kubeadm join k8s-master: