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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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点:
1 2 3 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镜像名称:
1 2 3 4 5 6 7 8 | [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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫