5

Kubernetes v1.24 基于containerd部署 - PunchLinux

 2 years ago
source link: https://www.cnblogs.com/punchlinux/p/16498592.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

  k8s每个节点安装containerd。

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

containerd配置

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

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

  再一次重启每个节点的containerd

systemctl restart containerd
2052820-20220720160317205-1585867599.png

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

chronyc sourcs -Vdate
2052820-20220720160418269-133288728.png

安装kubeadm环境

  配置软件仓库

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

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

apt-get update

  最新的版本则是1.24.3

2052820-20220720160633647-2006965831.png

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

root@master:~# apt install kubeadm=1.24.3-00 kubectl=1.24.3-00 kubelet=1.24.3-00
2052820-20220720160737264-292999691.png

  查看k8s初始化所需的镜像

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

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

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

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

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

2052820-20220720160950195-771454696.png

初始化k8s集群

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

root@master:~# vim /etc/modules-load.d/modules.confip_vsbr_netfilter root@master:~# modprobe ip_vsroot@master:~# modprobe br_netfilter
2052820-20220720161120497-329176948.png
root@master:~# cat /etc/sysctl.confnet.ipv4.ip_forward=1vm.max_map_count=262144kernel.pid_max=4194303fs.file-max=1000000net.ipv4.tcp_max_tw_buckets=6000net.netfilter.nf_conntrack_max=2097152 net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1vm.swappiness=0 root@master:~# sysctl -p

 

2052820-20220720161227185-914449537.png

  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,可以忽略这个错误

  初始化完成

2052820-20220720161414959-663157457.png

  kubectl凭据配置

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

mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config root@master:~# kubectl get nodesNAME STATUS ROLES AGE VERSIONmaster Ready control-plane 19m v1.24.3
2052820-20220720161526440-1311182222.png

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

root@master:~# mv .kube/config .export KUBECONFIG=/root/configroot@master:~# kubectl get nodes NAME STATUS ROLES AGE VERSIONmaster 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.confroot@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

2052820-20220720161830371-536901594.png
2052820-20220720161857660-380416192.png

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

root@master:~# curl https://projectcalico.docs.tigera.io/manifests/calico-etcd.yaml -Oroot@master:~# vim calico-etcd.yaml
2052820-20220720161940049-426697527.png
root@master:~# kubectl apply -f calico-etcd.yaml
2052820-20220720162018396-324928324.png

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

2052820-20220720162104534-2040777706.png

节点加入集群

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

root@master:~# kubeadm token create --print-join-command
2052820-20220720162218910-413130747.png

  node节点执行加入集群

2052820-20220720162254945-2096971902.png

  获取节点状态

2052820-20220720162340231-178586126.png

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

root@master:~# nerdctl -n k8s.io container ls -a
2052820-20220720162426634-1377506836.png

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

root@master:~# kubectl get pods -A -o wid
2052820-20220720162512599-1530154327.png

  查看节点状态

2052820-20220720162540232-1777564716.png

  验证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/v1kind: Deploymentmetadata: creationTimestamp: null labels: app: web name: webspec: 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

2052820-20220720162707867-1019720732.png

  创建service暴露容器端口

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

  2052820-20220720162752566-1454694670.png

  查看service

root@master:~# kubectl get service
2052820-20220720162831482-278114256.png

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

         访问master:

2052820-20220720162902209-695182632.png

  访问node01

2052820-20220720162937351-1142935534.png

  访问node02

2052820-20220720163016655-1129531990.png

其他k8s运维小技巧

 kubectl命令补全

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

 kubectl edit 高亮显示

[root@master ~]# vim .bashrc[root@master ~]# export EDITOR=vim[root@master ~]# source /root/.bashrc
2052820-20220720163922931-605646148.png

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK