• Kubernetes v1.24 基于containerd部署


      k8s每个节点安装containerd。

      containerd安装参考《containerd安装博文》:https://www.cnblogs.com/punchlinux/p/16496094.html

    containerd配置

      修改containerd的config.toml配置文件,修改k8s的镜像初始化pause底层网络镜像的下载地址

    root@master:~# vim /etc/containerd/config.toml
    sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"

      

      再一次重启每个节点的containerd

    systemctl restart containerd

      每个节点保持时间同步一致,安装chrony。检查时间一致性

    chronyc sourcs -V
    date

     

    安装kubeadm环境

      配置软件仓库

    apt-get update && apt-get install -y apt-transport-https
    curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
    cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
    EOF

     

      更新软件仓库,并检查源更新

    apt-get update

      最新的版本则是1.24.3

     

      所有k8s节点都安装kubeadm、kubeadm和kubectl

    root@master:~# apt install kubeadm=1.24.3-00 kubectl=1.24.3-00 kubelet=1.24.3-00

      查看k8s初始化所需的镜像

    root@master:~# kubeadm config images list --kubernetes-version v1.24.3

     

      编写一个shell脚本,修改官方镜像地址为阿里云镜像地址

            -n k8s.io则指定k8s 的namespace下载镜像

    root@master:~# vim imagedown.sh
    nerdctl -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.24.3
    nerdctl -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.24.3
    nerdctl -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.24.3
    nerdctl -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.24.3
    nerdctl -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7
    nerdctl -n k8s.io pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.3-0

     

       所有k8s节点执行脚本,下载镜像

    初始化k8s集群

      每台k8s节点设置加载模块,内核参数调优

    root@master:~# vim /etc/modules-load.d/modules.conf
    ip_vs
    br_netfilter
    root@master:~# modprobe ip_vs
    root@master:~# modprobe br_netfilter

     

      内核优化

    root@master:~# cat /etc/sysctl.conf
    net.ipv4.ip_forward=1
    vm.max_map_count=262144
    kernel.pid_max=4194303
    fs.file-max=1000000
    net.ipv4.tcp_max_tw_buckets=6000
    net.netfilter.nf_conntrack_max=2097152
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    vm.swappiness=0
    root@master:~# sysctl -p

     

      master执行初始化集群

    root@master:~# kubeadm init --apiserver-advertise-address=192.168.100.10 \
    --apiserver-bind-port=6443 \
    --kubernetes-version=v1.24.3 \
    --pod-network-cidr=10.100.0.0/16 \
    --service-cidr=10.200.0.0/16 \
    --service-dns-domain=cluster.local \
    --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
    --ignore-preflight-errors=swap

      选项解释:

           --apiserver-advertise-address  api-server地址也就是master节点地址

           --apiserver-bind-port  api-server服务端口号

           --kubernetes-version  k8s版本号

           --pod-network-cidr  pod网络的地址建议16位或者8位地址

           --service-cidr  svc网络地址建议16位或者8位地址与pod网络区别开来

           --service-dns-domain=cluster.local  集群dns域名地址,默认为cluster.local

           --image-repository  k8s镜像下载地址

           --ignore-preflight-errors=swap  忽略初始化错位,如果开启了swap,可以忽略这个错误

     

      初始化完成

     kubectl凭据配置

      kubectl默认使用~/.kube/config文件中凭据信息管理kubernetes。

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    root@master:~# kubectl get nodes
    NAME STATUS ROLES AGE VERSION
    master Ready control-plane 19m v1.24.3

      如果环境变量KUBECONFIG存在,则优先使用境变量KUBECONFIG设置的值。

    root@master:~# mv .kube/config .
    export KUBECONFIG=/root/config
    root@master:~# kubectl get nodes
    NAME STATUS ROLES AGE VERSION
    master NotReady control-plane,master 102s v1.24.3

      等网络配置完成后,STATUS状态由NotReady变更为Ready

     

      还可以通过选项--kubeconfig=''明确指定凭据文件位置。 

    root@master:~# kubectl get nodes --kubeconfig /root/config

      

      kubernetes对凭据文件名没有要求

    root@master:~# mv config kube.conf
    root@master:~# kubectl get nodes --kubeconfig kube.conf

      

    配置网络

      这里采用calico网络。

      官方地址:http://projectcalico.org 或者 https://www.tigera.io/project-calico/

      产品文档:https://projectcalico.docs.tigera.io/about/about-calico

     

      calico项目下载地址:

      https://projectcalico.docs.tigera.io/getting-started/kubernetes/installation/config-options

     

      下载calico网络插件yaml并修改pod网络地址,此地址为初始化集群指定的pod网络地址段

    root@master:~# curl https://projectcalico.docs.tigera.io/manifests/calico-etcd.yaml -O
    root@master:~# vim calico-etcd.yaml

     

    root@master:~# kubectl apply -f calico-etcd.yaml

      

       安装calico后,立即创建pod,由于工作节点还未加入到集群,所以calico网络还处于pending状态

     

    节点加入集群

           如果master节点初始化集群时终端输出的加入集群命令丢失,可以使用以下命令重新获取:

    root@master:~# kubeadm token create --print-join-command

      

      node节点执行加入集群

     

      获取节点状态

      

      nerdctl 查看k8s的namespace下运行的容器

    root@master:~# nerdctl -n k8s.io container ls -a

      

      等待一段时间后,查看pod运行状态为running则部署完成

    root@master:~# kubectl get pods -A -o wid

      

      查看节点状态

      

      验证k8s正常提供服务:

             部署一个名为web的deployment并在宿主机可以访问:

    root@master:~# kubectl create deployment web --image nginx:latest --replicas 2 --dry-run=client -o yaml > web.yaml

     

      修改一下镜像拉去规则imagePullPolicy: IfNotPresent

    root@master:~# cat web.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    creationTimestamp: null
    labels:
    app: web
    name: web
    spec:
    replicas: 2
    selector:
    matchLabels:
    app: web
    template:
    metadata:
    labels:
    app: web
    spec:
    containers:
    - image: nginx:latest
    name: nginx
    imagePullPolicy: IfNotPresent

     

      创建deployment

    root@master:~# kubectl apply -f web.yaml

     

      查看pods

      创建service暴露容器端口

    root@master:~# kubectl expose deployment web --target-port 80 --port 80 --type NodePort

      

      

      查看service

    root@master:~# kubectl get service

      

      宿主机依次访问每个节点的32316

             访问master:

        

      访问node01

      访问node02

    其他k8s运维小技巧

    kubectl命令补全

    root@master:~# kubectl completion bash > /etc/bash_completion.d/kubectl
    root@master:~# kubeadm completion bash > /etc/bash_completion.d/kubeadm
    root@master:~# source /etc/bash_completion.d/kubectl
    root@master:~# source /etc/bash_completion.d/kubeadm

       

    kubectl edit 高亮显示

    [root@master ~]# vim .bashrc
    [root@master ~]# export EDITOR=vim
    [root@master ~]# source /root/.bashrc

     

    以上就是关于Kubernetes v1.24版本的安装。如果对你有帮助或有建议疑问可以评论区留言!

     

  • 相关阅读:
    C++继承、多态与虚函数(二)
    ClickHouse副本节点数据损坏恢复
    pdf转cad怎么弄?教你这几种快速转换cad的方法
    【学习笔记】RabbitMQ
    Linux下 Alluxio 的编译和运行
    R包的尽头是 C/C++
    1.JUL
    2024年最新阿里云和腾讯云云服务器价格租用对比
    WPF MVVM
    [java]JsonObject与JsonArray转换
  • 原文地址:https://www.cnblogs.com/punchlinux/p/16498592.html