前语
k8s宣告弃用Docker?究竟弃用了什么
时刻 | 事情 |
---|---|
2020 | k8s在v1.20版别发布时宣告将在未来弃用对Dockershim的支撑 |
2022 | k8s发布v1.24版别,正式剔除Dockershim |
首要,并不是弃用Docker容器,想要布置k8s和Docker容器环境的小伙伴彻底不用担心!Docker镜像容器依然能够正常被调用,仅有的差异便是最新版k8s会绕过Docker直接调用其内部的containerd
本文运用的布置环境
至少一个master,2个slave。你能够用虚拟机搞,也能够花钱买服务器,反正至少启三个来用。
环境参数 | 值 | 描述 |
---|---|---|
布置方法 | 多虚拟机 | 穷,我是学生,服务器什么的,不或许 |
操作体系 | CentOS 7 | 外置Win10,内置CentOS 7 |
CPU | 2个1核 | 每个虚拟机节点必须2个逻辑CPU起步,不然k8s布置不了 |
内存 | 4G | 真的4G起步,每台虚拟机2G只能保证将就运转 k8s+Docker,跑不了其他服务 |
存储 | 20G | 大点也行,其实假设还要布置Python等环境的话主张40G |
环境装备的小tips
假设你也想只用虚拟机玩玩,那么咱们能够去官网或一些学校镜像站下载iso文件来装置
指路!
- wiki.centos.org/Download 官网的历史版别网页,供给iso下载
- mirrors.bupt.edu.cn/centos/7/is… 打个广告,北京邮电大学镜像站的centos 7
本文运用的版别号
软件 | 版别号 |
---|---|
Kubernetes(k8s) | 1.23.0 |
Docker | 20.10.0.3 |
Docker装置及装备
以下装备需求在主节点和一切从节点履行!\color{red}\textbf {以下装备需求在主节点和一切从节点履行!}
装备库房
这一步是为了拉取docker时速度快点,用的是阿里云的centOS 7源。
需求留意的是,Docker版别务必和k8s支撑的版别对应一下。本文用的是k8s 1.23.0,装置的时分假设Docker不是20以下的会报正告(尽管或许没什么事不用管,但还是选好版别再说吧)
咱们输入如下指令,来装备阿里云yum库房,并使其生效:
cd /etc/yum.repos.d
mvCentOS-Base.repoCentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
为linux装置指定版别docker
咱们能够运用如下指令查看咱们的yum库房有什么docker可装。我挑选的是20.10.0.3
这个版别。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum install -y docker-ce-20.10.0-3.el7
docker装备
咱们首要发动Docker:
systemctl start docker
这时/etc/docker
会自动生成。咱们需求进行一些自定义装备,设置阿里云源而且修正docker办理体系cgroup的方法为systemd(和k8s共同才能正常装置发动k8s)
vi /etc/docker/daemon.json
########## 以下是文件内的具体内容 ###########
{
"registry-mirrors": ["<这儿,各位能够自行注册登录阿里云容器镜像服务,获得加速源镜像url>"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
########## 随后咱们重启docker ###########
systemctl restart docker
这儿附上阿里云镜像服务网址:cr.console.aliyun.com/cn-hangzhou…
k8s装备及装置
装置前装备
以下装备需求在主节点和一切从节点履行!\color{red}\textbf {以下装备需求在主节点和一切从节点履行!}
装置前的装备首要需求完成如下几件事:
- 封闭防火墙,设置网络允许接纳任意来源的恳求
- 封闭selinux,封闭swap,并设置开机自动封闭
- 在hosts文件装备主从节点ip
- 装备k8s的路由设置、镜像源
咱们顺次输入如下代码(具体多少个从节点视各位具体情况而定):
点击 打开/收起 代码块
iptables -P FORWARD ACCEPT
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
setenforce 0
systemctl disable firewalld && systemctl stop firewalld
cat >>/etc/hosts << EOF
<你的主节点ip> k8s-master
<你的从节点ip1> k8s-slave1
<你的从节点ip2> k8s-slave2
<你的从节点ip3> k8s-slave3
<你的从节点ip4> k8s-slave4
EOF
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
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=1
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
装置k8s
版别视情况而定。我挑选k8s v1.23.0:
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
主节点装备
以下操作只在主节点进行!\color{red}\textbf {以下操作只在主节点进行!}
利用kubeadm生成默许装备的yaml文件,而且需求改一下。咱们首要把默许装备生成出来:
kubeadm config print init-defaults > kubeadm.yaml
随后,分别进行如下改动
######### :11,修正 #########
localAPIEndpoint:
advertiseAddress: <这儿换成master的地址>
######### :30,修正 #########
imageRepository: registry.aliyuncs.com/google_containers
######### :33,新增podSubnet这一行 #########
networking:
podSubnet: 10.244.0.0/16
主节点发动
kubeadm config images pull --config kubeadm.yaml
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
kubeadm init --config kubeadm.yaml
假设发动过程中报错
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
那就再多履行一句:
echo 1 > /proc/sys/net/ipv4/ip_forward
我记录了其时发动完后的成果,为了运用kubectl,此时咱们需求遵从官方给的几行代码履行以下,此外,这儿最后两行奉告了怎么让从节点参加集群,咱们只需求将这个输入到从节点那就行:
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
kubectl get nodes
网络插件装置
这一步很重要,不装置网络插件的话k8s默许是无法随从节点通讯的。我挑选的产品是calico。
首要进入calico官方文档查看calico支撑的k8s版别。我查看的是calico 3.23,对应的软件要求能够在calico v3.23 System Reauirements里查看到。
输入如下指令布置calico,假设被墙了能够去gitee上搜一个calico,进入manifest目录下载calico.yaml。需求留意的是,咱们在上面装备过docker镜像的目的便是运用国内镜像,可是下载下来的calico.yaml的镜像挑选依然是被墙了的docker.io
,需求改过来,我运用的是sed
指令,将docker.io
删掉。
wget https://docs.projectcalico.org/v3.23/manifests/calico.yaml --no-check-certificate
cat calico.yaml | grep -n image
##4316: image: docker.io/calico/cni:v3.23.5
##4343: image: docker.io/calico/cni:v3.23.5
##4385: image: docker.io/calico/node:v3.23.5
##4410: image: docker.io/calico/node:v3.23.5
##4632: image: docker.io/calico/kube-controllers:v3.23.5
sed -i 's#docker.io/##g' calico.yaml
查看一下布置情况,一般运转calico后要过一瞬间,会发现一切节点都将处于Ready状况,现在能够正常进行集群的通讯了!
在这个的等待的过程中,往往会呈现ImagePullBackOff的情况,即镜像拉取失利。先耐心等一下,假设接连数十分钟还这个姿态,或许就得考虑直接去各个节点直接docker pull
,或许给docker换换镜像了
kubectl apply -f calico.yaml
kubectl get pod -n kube-system | grep calico
kubectl get nodes
新的从节点怎么参加集群
假设咱们未来创建了新的虚拟机,怎么参加现已发动了的集群呢?
在master节点输入如下指令,将得到的成果输入新的从节点即可:
kubeadm token create --print-join-command
怎么封闭并驱逐从节点
这个其实严格履行的话挺麻烦的,以slave1为例,咱们需求顺次输入如下指令:
# 把slave1的资源驱赶到其他节点
kubectl drain k8s-slave1 --ignore-daemonsets
# 标记slave1为不可调度
kubectl uncordon k8s-slave1
# 从集群删去slave1
kubectl delete node k8s-slave1
主节点怎么停止
kubectl drain node --ignore-daemonsets --delete-local-data --force
主节点怎么删去服务?
比方咱们布置了一个test-nginx服务,可是想把它删了,释放其容器资源
kubectl get pods | grep test-nginx | awk '{print $1}' | xargs kubectl delete pod