k8s部署

部署过程

  Kubernetes 计划弃用 kubelet 中 Docker Engine 支持,对于 dockershim 的支持也将在1.21版本中放弃。

  不过不必担心,在目前 Kubernetes v1.20 中,Kubernetes 管理员可以继续使用 Docker 命令与 kubectl 命令管理 Kubernetes 集群,而且镜像使用不会受到任何影响。在未来发布的 Kubernetes 版本中,包括接下来陆续推出的次要版本,对于 dockershim 的支持将最终被移除(最早会在 v1.23 把 Dockershim 从 Kubelet 中移除),届时将无法使用 Docker 命令检查集群。

 

1、配置基础环境

关闭防火墙:

systemctl disable firewalld
systemctl stop firewalld

关闭selinux:

setenforce 0
sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config

关闭swap:

-a: 关闭配置文件“/etc/fstab” 中所有的交换空间。
注释swap行
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

 

 一、安装Docker引擎:

你可以以不同的方式安装 Docker engine,这取决于你的需求:
    1、大多数用户从Docker的仓库安装,为了便于安装和升级的任务。 这是的推荐的方法。
    2、下载的rpm包、手动安装和管理,升级完全是手工操作。 安装docker的系统没有接入互联网的情况下非常有用。
    3、在测试的环境中,某些用户选择使用自动化便利脚本以安装Docker.

1、安装docker储存库

第一次在一个新的主机安装Docker引擎之前,你需要设立Docker库。 之后,你可以从储存库中安装和更新Docker 。

sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

2、安装Docker引擎

sudo yum install docker-ce docker-ce-cli containerd.io

a. 列出所有可用的版本

yum list docker-ce --showduplicates | sort -r

b. 安装一个具体版本通过其完全合格的包名称,这是 包名( docker-ce)加version string(第2栏) 在开始的第一号( :),第一连字符的,由分 连字号( -). 例如, docker-ce-18.09.1.

 

yum install docker-ce-17.12.1.ce

 

 

sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

c. 开启docker

systemctl enable docker && systemctl start docker

d. 验证Docker引擎是正确安装运行 hello-world 镜像。

sudo docker run hello-world

 

3、修改cgroup driver

不改就会报下列错误:

ID:H7RI:P37O:UH5W:VRQ:TDKT:D3MZ:YGJ4:3ZOU:7DDY:YYPQ:DPWM:ERFV Containers:0 ContainersRunning:0 ContainersPaused:0 Contain
to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\"

根据报错信息知道,是因为 k8s 和docker 的 cgroup driver 不一致导致的。k8s 的是 systemd ,而 docker 是cgroupfs。

修改docker的cgroup driver,顺便修改一下镜像源:

cat << EOF > /etc/docker/daemon.json
{
  "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

 

可以通过docker info 查看docker的Cgroup Driver:

[root@k8s-master ~]# docker info | grep Cgroup
Client:
...
Server:
...
Cgroup Driver: cgroupfs


然后重启docker

systemctl restart docker

再看

[root@k8s-master ~]# docker info | grep Cgroup
Cgroup Driver: systemd

 

二、安装Kubernetes

1、安装kubelet和kubeadm及kubectl

kubernetes源配置文件:

cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes repository
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enable=1
gpgcheck=0
EOF

 

安装并启动kube*

yum install -y kubelet-1.18.0  kubeadm-1.18.0  kubectl-1.18.0 --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet

 

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet

 

3、kubeadm初始化k8s

 默认情况下kubeadm要下载k8s.gcr.io的docker镜像,但是国内连不上https://k8s.gcr.io/v2/。

3.1 修改镜像仓库地址:

kubeadm config print init-defaults > init.default.yaml

将 imageRepository: k8s.gcr.io 改成 imageRepository:registry.aliyuncs.com/google_containers

cat  init.default.yaml

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 1.2.3.4
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  imagePullPolicy: IfNotPresent
  name: node
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.23.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
scheduler: {}

 

 下载Kubernetes的相关镜像:

kubeadm config images pull --config=init.default.yaml

 

 运行kubeadm init命令安装master:

kubeadm init --config=init.default.yaml

故障二:

[root@localhost ~]# kubeadm init
[init] Using Kubernetes version: v1.23.5
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR Port-10259]: Port 10259 is in use
        [ERROR Port-10257]: Port 10257 is in use
        [ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
        [ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
        [ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
        [ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists

 

解决方案:

 提示端口或者文件已经存在,想通过关闭服务和删除文件是无法解决问题的。可以通过kubeadm reset清空kubeadm init 或 kubeadm join 所做的更改。

kubeadm reset

 

如果使用的是外部的etcd,kubeamd不会删除任何etcd数据。这个命令主要用于我们在做实验的过程中,擦除实验环境,切不可用到生产环境中。

执行完上述命令后需注意一下4点:

重置过程不会清除CNI配置。为此,必须删除/etc/cni/net.d
重置过程不会重置或清理iptables规则或IPVS表。如果希望重置iptables,必须使用“iptables”命令手动重置。
如果您的集群被设置为使用IPV,请运行ipvsadm --clear(或类似)来重置系统的IPV表。
重置过程不会清理kubeconfig文件,您必须手动删除它们。请检查$HOME/的内容。kube/config文件。

 删除net.d 和 config

rm -rf /etc/cni/net.d
rm -rf $HOME/.kube/config

 

 

使用下面的命令获取需要的docker镜像名称:

[root@k8s-master ~]# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.23.5
k8s.gcr.io/kube-controller-manager:v1.23.5
k8s.gcr.io/kube-scheduler:v1.23.5
k8s.gcr.io/kube-proxy:v1.23.5
k8s.gcr.io/pause:3.6
k8s.gcr.io/etcd:3.5.1-0
k8s.gcr.io/coredns/coredns:v1.8.6

 

具体解决方式:

https://www.freesion.com/article/20831079183/

通过指定的仓库下载需要的镜像:

kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers

 

#!/bin/bash
DIZHI="registry.aliyuncs.com/google_containers"
VERSION="v1.23.5"
docker tag $DIZHI/kube-apiserver:$VERSION k8s.gcr.io/kube-apiserver:$VERSION
docker tag $DIZHI/kube-controller-manager:$VERSION k8s.gcr.io/kube-controller-manager:$VERSION
docker tag $DIZHI/kube-scheduler:$VERSION k8s.gcr.io/kube-scheduler:$VERSION
docker tag $DIZHI/kube-proxy:$VERSION k8s.gcr.io/kube-proxy:$VERSION
docker tag $DIZHI/pause:3.6 k8s.gcr.io/pause:3.6
docker tag $DIZHI/etcd:3.5.1-0 k8s.gcr.io/etcd:3.5.1-0
docker tag $DIZHI/coredns:v1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6
docker rmi $DIZHI/kube-apiserver:$VERSION
docker rmi $DIZHI/kube-controller-manager:$VERSION
docker rmi $DIZHI/kube-scheduler:$VERSION
docker rmi $DIZHI/kube-proxy:$VERSION
docker rmi $DIZHI/pause:3.6
docker rmi $DIZHI/etcd:3.5.1-0
docker rmi $DIZHI/coredns:v1.8.6

 

 

kubeadm init

之后会生成:

    [root@localhost rpm]# cd  /var/lib/kubelet/
    [root@localhost kubelet]# ls -l
    total 12
    -rw-r--r--. 1 root root 1609 Jun 24 23:40 config.yaml
    -rw-r--r--. 1 root root   40 Jun 24 23:40 cpu_manager_state
    drwxr-xr-x. 2 root root   61 Jun 24 23:41 device-plugins
    -rw-r--r--. 1 root root  124 Jun 24 23:40 kubeadm-flags.env
    drwxr-xr-x. 2 root root  170 Jun 24 23:41 pki
    drwx------. 2 root root    6 Jun 24 23:40 plugin-containers
    drwxr-x---. 2 root root    6 Jun 24 23:40 plugins
    drwxr-x---. 7 root root  210 Jun 24 23:41 pods

https://blog.51cto.com/8999a/5005591

0501部署问题汇总:

1\在初始化k8s的时候警告17.12不在已验证版本列表中,最新验证版本19.3。

this Docker version is not on the list of validated versions: 17.12.1-ce. Latest validated version: 19.03

要做的工作:

验证docker19.03版本

 

 

 k8s重启后node节点notready_Centos8下K8S master节点更换IP https://blog.csdn.net/weixin_42447265/article/details/113628771

windows docker toolbox 启动容器遇到问题: cgroups: cannot find cgroup mount destination: unknown.   https://blog.csdn.net/weixin_43343144/article/details/107485509

 https://www.freeaihub.com/post/104828.html

http://blog.itpub.net/28833846/viewspace-2841519/

https://blog.csdn.net/songcf_faith/article/details/82749011

https://blog.csdn.net/weixin_42663840/article/details/102633206

 
posted @ 2022-03-23 13:40  linuxws  阅读(75)  评论(0编辑  收藏  举报