K8s安装、卸载

这篇具有很好参考价值的文章主要介绍了K8s安装、卸载。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

资料:
链接:https://pan.baidu.com/s/10Kn1lIMPaVNRP9o9UdORmA
提取码:yyds

理解!

kube-proxy–>网络代理
kubelet–>厂长,由他创建集群
api-server–>统一入口
controller-manage–>控制管理
etcd–>文件库
schedluer–>节点调度器
coredns–>核心dns
pause–>Pod的根容器
flannel -->网络插件

1. 安装要求(一定要满足!!),所有节点

在开始之前,部署Kubernetes集群机器需要满足以下几个条件:

  • 一台或多台机器,操作系统 CentOS7.x-86_x64
  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
  • 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
  • 禁止swap分区

2. 准备环境,所有节点

角色 IP
master 192.168.111.101
node 192.168.111.102
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时

# 关闭swap
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

# 根据规划设置主机名
hostnamectl set-hostname <hostname> 

hostname 命令查看主机名
# 添加hosts!!!
cat >> /etc/hosts << EOF
192.168.111.101 master
192.168.111.102 node
EOF

# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system  # 生效

# 时间同步
yum install ntpdate -y
ntpdate time.windows.com

3. 所有节点安装Docker/kubeadm/kubelet

Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker

3.1 安装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://441nlr92.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

docker --version
# Docker version 20.10.7, build f0df350

3.2 安装kubeadm,kubelet和kubectl

由于版本更新频繁,这里指定版本号部署:


#配置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

sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9
#启动kubelet
sudo systemctl enable kubelet --now 

systemctl status kubelet 
# 查看状态, 主节点kubeadm init初始化之后kubelet 成功启动!
# 从节点  ,kubeadm join加入集群之后kubelet 成功启动!


4.清除之前部署的网络,所有节点

ifconfig

K8s安装、卸载

删除重生的方法,首先停用网络,然后删除配置

ifconfig cni0 down    
ip link delete cni0

K8s安装、卸载

#这是pod的ip地址
ifconfig flannel.1 down
ip link delete flannel.1

5. 部署Kubernetes Master

在 192.168.111.101(Master)执行


 kubeadm init \
--apiserver-advertise-address=192.168.111.101 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.20.15 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16  

#  要保证各个网段 不一样
#	使用 kubeadm init时,请指定pod-network-cidr。确保 主机/主网络的ip 不在你引用的子网中!!!
#	即如果你的网络运行在192.168..使用10.0.0.0/16
#	如果你的网络是10.0..使用192.168.0.0/16

K8s安装、卸载

使用kubectl(master)工具:

rm -rf $HOME/.kube
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes #查看节点

docker images查看镜像

八个镜像一个都不能少,下面还需要网络插件!
K8s安装、卸载

registry.aliyuncs.com/google_containers/kube-proxy                v1.20.15   46e2cd1b2594   8 months ago    99.7MB
registry.aliyuncs.com/google_containers/kube-apiserver            v1.20.15   323f6347f5e2   8 months ago    122MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.20.15   d6296d0e06d2   8 months ago    116MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.20.15   9155e4deabb3   8 months ago    47.3MB
quay.io/coreos/flannel                                            v0.15.1    e6ea68648f0c   10 months ago   69.5MB
registry.aliyuncs.com/google_containers/etcd                      3.4.13-0   0369cf4303ff   2 years ago     253MB
registry.aliyuncs.com/google_containers/coredns                   1.7.0      bfe3a36ebd25   2 years ago     45.2MB
registry.aliyuncs.com/google_containers/pause                     3.2        80d28bedfe5d   2 years ago     683kB

不行的话,就手动拉取 docker pull ,kubeadm reset重置后再kubeadm init

链接:https://pan.baidu.com/s/1uu06EGckeXX0REvX_xqBvA
提取码:yyds

网络插件镜像:quay.io/coreos/flannel:v0.15.1镜像

quay.io/coreos/flannel版本需要和kube-flannel.yml中的一致!
K8s安装、卸载

docker load -i flannel.tar #即可获取镜像

6. 加入Kubernetes Node

在192.168.111.102/13(Node)执行

K8s安装、卸载

向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:

kubeadm join 192.168.111.101:6443 --token 3xtclw.c29as49tg9mp7259 \
    --discovery-token-ca-cert-hash sha256:e026d26b0d3d0f1d0c90ea63eb9c5fa01fdd189b07377463ca981a99644c13bc

K8s安装、卸载

加入成功!有报错的话看Error信息,对应处理即可!

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:

kubeadm token create --print-join-command

子节点必须有这三个镜像

K8s安装、卸载

查看节点 kubectl get nodes
K8s安装、卸载
必须都是Ready状态!

7. 部署CNI网络插件,Master节点

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#不行换下面的方式
---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: psp.flannel.unprivileged
  annotations:
    seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
    seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
    apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
    apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
spec:
  privileged: false
  volumes:
  - configMap
  - secret
  - emptyDir
  - hostPath
  allowedHostPaths:
  - pathPrefix: "/etc/cni/net.d"
  - pathPrefix: "/etc/kube-flannel"
  - pathPrefix: "/run/flannel"
  readOnlyRootFilesystem: false
  # Users and groups
  runAsUser:
    rule: RunAsAny
  supplementalGroups:
    rule: RunAsAny
  fsGroup:
    rule: RunAsAny
  # Privilege Escalation
  allowPrivilegeEscalation: false
  defaultAllowPrivilegeEscalation: false
  # Capabilities
  allowedCapabilities: ['NET_ADMIN', 'NET_RAW']
  defaultAddCapabilities: []
  requiredDropCapabilities: []
  # Host namespaces
  hostPID: false
  hostIPC: false
  hostNetwork: true
  hostPorts:
  - min: 0
    max: 65535
  # SELinux
  seLinux:
    # SELinux is unused in CaaSP
    rule: 'RunAsAny'
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: flannel
rules:
- apiGroups: ['extensions']
  resources: ['podsecuritypolicies']
  verbs: ['use']
  resourceNames: ['psp.flannel.unprivileged']
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - nodes/status
  verbs:
  - patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: flannel
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: flannel
subjects:
- kind: ServiceAccount
  name: flannel
  namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: flannel
  namespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-system
  labels:
    tier: node
    app: flannel
data:
  cni-conf.json: |
    {
      "name": "cbr0",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "flannel",
          "delegate": {
            "hairpinMode": true,
            "isDefaultGateway": true
          }
        },
        {
          "type": "portmap",
          "capabilities": {
            "portMappings": true
          }
        }
      ]
    }
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: kube-flannel-ds
  namespace: kube-system
  labels:
    tier: node
    app: flannel
spec:
  selector:
    matchLabels:
      app: flannel
  template:
    metadata:
      labels:
        tier: node
        app: flannel
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/os
                operator: In
                values:
                - linux
      hostNetwork: true
      priorityClassName: system-node-critical
      tolerations:
      - operator: Exists
        effect: NoSchedule
      serviceAccountName: flannel
      initContainers:
      - name: install-cni
        image: quay.io/coreos/flannel:v0.15.1
        command:
        - cp
        args:
        - -f
        - /etc/kube-flannel/cni-conf.json
        - /etc/cni/net.d/10-flannel.conflist
        volumeMounts:
        - name: cni
          mountPath: /etc/cni/net.d
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
      containers:
      - name: kube-flannel
        image: quay.io/coreos/flannel:v0.15.1
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        resources:
          requests:
            cpu: "100m"
            memory: "50Mi"
          limits:
            cpu: "100m"
            memory: "50Mi"
        securityContext:
          privileged: false
          capabilities:
            add: ["NET_ADMIN", "NET_RAW"]
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        volumeMounts:
        - name: run
          mountPath: /run/flannel
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
      volumes:
      - name: run
        hostPath:
          path: /run/flannel
      - name: cni
        hostPath:
          path: /etc/cni/net.d
      - name: flannel-cfg
        configMap:
          name: kube-flannel-cfg


kube-flannel.yml 为该yml的文件名

#运行命令,加载该文件
kubectl apply -f kube-flannel.yml

#查看状态
kubectl get pods -n kube-system

K8s安装、卸载

8. 测试kubernetes集群

在Kubernetes集群中创建一个pod,验证是否正常运行:

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

访问地址:http://NodeIP:Port
K8s安装、卸载

9.错误

curl -sSL http://localhost:10248/healthz connect: connection refused

The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused

:::rm -rf $HOME/.kube
首先需要到 k8smaster1 节点,创建一个文件
# 创建文件夹
mkdir /etc/systemd/system/kubelet.service.d

# 创建文件
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

# 添加如下内容
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --fail-swap-on=false"

# 重置
kubeadm reset
然后删除刚刚创建的配置目录
rm -rf $HOME/.kube
在 k8smaster1 重新初始化
kubeadm init --apiserver-advertise-address=92.168.60.151:6443 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12  --pod-network-cidr=10.244.0.0/16
:::

kubectl get nodes 出现问题Unable to connect to the server

Unable to connect to the server:  #删除目录后重建
:::解决方法
rm -rf $HOME/.kube
然后再次创建一下即可
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
这个问题主要是因为我们在执行 kubeadm reset 的时候,没有把 $HOME/.kube 给移除掉,再次创建时就会出现问题了
:::

kubeadm join添加 k8snode1 节点到集群[ERROR FileAvailable–etc-kubernetes-pki-ca.crt]



[root@k8smaster1 ~]# kubeadm join 192.168.60.151:6443 --token jkcz0t.3c40t0bqqz5g8wsb     --discovery-token-ca-cert-hash sha256:bc494eeab6b7bac64c0861da16084504626e5a95ba7ede7b9c2dc7571ca4c9e5

[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1 #设为1即可
[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists #文件存在,删除即可
:::解决方法
echo “1” > /proc/sys/net/ipv4/ip_forward
rm -rf /etc/kubernetes/pki/ca.crt
:::

docker 版本问题

this Docker version is not on the list of validated versions: 20.10.17. Latest validated version: 19

docker 版本问题
1.卸载docker服务
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
2.重新下载docker服务
# 指定docker版本
yum install docker-ce-18.06.1.ce-3.el7 docker-ce-cli-18.06.1.ce-3.el7 containerd.io docker-compose-plugin
# docker官网指定格式
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-compose-plugin

coredns- 0/1,状态为Running

K8s安装、卸载

过一会再查看kubectl get po -A


#	使用 kubeadm init时,请指定pod-network-cidr。确保 主机/主网络的ip 不在你引用的子网中!!!
#	即如果你的网络运行在192.168..使用10.0.0.0/16
#	如果你的网络是10.0..使用192.168.0.0/16

“cni0” already has an IP address different from 10.244.1.1/24

K8s安装、卸载

删除重生的方法,首先停用网络,然后删除配置

ifconfig cni0 down    
ip link delete cni0

K8s安装、卸载

#这是pod的ip地址
ifconfig flannel.1 down
ip link delete flannel.1

kubeadm reset重置后再kubeadm init

卸载K8s

执行kubeadm reset命令

清空K8s集群设置卸载管理组件文章来源地址https://www.toymoban.com/news/detail-442211.html

systemctl stop kubelet.service  # 停掉kubelet
kubeadm reset
# 输入y
# 不行就多试几次

卸载管理组件

yum erase -y kubelet kubectl kubeadm kubernetes-cni

docker全部清理

docker rm $(docker ps -a -q)

docker rmi $(docker images -q)

docker 重启

systemctl daemon-reload

systemctl restart docker

systemctl stop docker service

到了这里,关于K8s安装、卸载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8S彻底卸载教程

    注:这里针对的是使用Kubeadm方式安装的Kubernetes集群 零、节点及权限 以下全部操作都是使用root用户进行(非root用户可以使用sudo),并且全部命令都需要在Kubernetes集群的所有节点分别执行: 第一步、停止K8S 所有节点执行: 第二步、清空K8S集群设置 所有节点执行: 第三步、

    2024年02月04日
    浏览(35)
  • linux 无残留卸载k8s

    要完全无残留地卸载 Kubernetes(k8s)集群从 Ubuntu 或类似基于 Debian 的系统中,可以遵循以下步骤。请注意,在操作前请确保备份所有重要数据,并仔细检查命令以适应您当前的环境。 使用 kubeadm 工具来清理集群: 对于 Docker: 对于 containerd (在较新版本的 Kubernetes 中可能被使用

    2024年01月20日
    浏览(31)
  • 删除kubeedge边缘节点和k8s节点_卸载kubeedge

    删除kubeedge边缘节点和k8s节点_卸载kubeedge Linux安装kubeedge_亲测成功 kubeedge边缘节点安装 删除kubeedge边缘节点 卸载kubeedge 卸载k8s节点

    2024年02月12日
    浏览(58)
  • k8s---ingress实现https代理访问

    创建证书 密钥 secrets保存密钥信息,部署pod时把secrets挂载到pod 也可以实现负载均衡。 traefik ingress controller traefik 是一个为了让部署微服务更加快捷而诞生的一个http反向代理,负载均衡。 traefik设计时就能够实时的和k8s API交互,可以感知后端service和pod的变化,还可以自动更新

    2024年01月19日
    浏览(43)
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用

    前面讲解了使用Helm部署mysql集群,这里来看看使用Ingress搭建负载均衡功能 功能类似 Nginx ,可以根据域名、路径把请求转发到不同的 Service , Ingress 为外部访问集群提供了一个 统一 入口, 避免 了 对外暴露集群端口 ,可以配置 https,http访问集群应用,接下来看看如何通过腾讯云来

    2024年01月22日
    浏览(59)
  • 用Kubernetes(k8s)的ingress部署https应用

    我之前有一片文章写的是用ingress暴露应用,这篇文章接着上一片文章继续讲使用ingress暴露https的应用。请先参考上一片文章将ingress先在Kubernetes集群当中安装上: ingress暴露应用文章地址:https://blog.csdn.net/m0_51510236/article/details/132536519 因为是暴露https,所以需要域名证书。分以

    2024年02月10日
    浏览(46)
  • K8s的ingress-nginx配置https

    在另一台机器上配置hosts解析www.yaoyao.com,然后访问 curl --cacert tls.crt https://www.yaoyao.com:10443 这里的10443端口是ingress-nginx-controller服务暴露的nodeport端口

    2024年02月07日
    浏览(37)
  • 生产问题(十四)K8S抢占CPU导致数据库链接池打爆

            线上一天出现了两次数据库连接失败的大量报错,一开始以为是数据库的问题,但是想了想如果是数据库的问题,应该会有大量的应用问题         具体分析之后,发现其实是容器cpu出现了Throttled,导致大量线程阻塞         既然出现了报错,又没有发布,先

    2024年01月25日
    浏览(97)
  • k8s 安装 kubernetes安装教程 虚拟机安装k8s centos7安装k8s kuberadmin安装k8s k8s工具安装 k8s安装前配置参数

    k8s采用master, node1, node2 。三台虚拟机安装的一主两从,机器已提前安装好docker。下面是机器配置,k8s安装过程,以及出现的问题与解决方法   虚拟机全部采用静态ip, master 30机器, node1 31机器, node2 32机器                                        机器ip 192.168.

    2024年02月11日
    浏览(50)
  • 【k8s】--insecure-registry详解 ( 访问仓库、https、http)

    --insecure-registry 是docker中用来设置与docker registry通信的安全限制的一个参数,如果设置为true或1,意味着Docker将会在与这个registry通信时跨过证书问题,不再验证registry的TLS认证证书,可以忽略证书错误,从而绕过Docker安全机制。 这个描述很奇怪,一般由服务端决定以什么方式

    2024年02月04日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包