Kubernetes

一、什么是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:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值