首页 > 其他分享 >【云原生】kubernetes 1.24 安装教程

【云原生】kubernetes 1.24 安装教程

时间:2024-01-08 15:39:04浏览次数:34  
标签:教程 service kubernetes etc -- nginx proxy timeout 1.24


博主介绍:

– 我是了 凡 微信公众号【了凡银河系】期待你的关注。未来大家一起加油啊~


前言

下面记录kubernets 1.24 安装记录。主要使用calico作为网络插件、kong ingress作为路由转发、nginx作为四层代理。
如果安装过程中遇到问题,及时沟通,如果不能及时回应,可以关注【了凡银河系】微信公众号加微信沟通。



文章目录

  • 前言
  • 机器
  • 部署流程
  • calico 安装
  • 解决办法
  • kong ingress 安装
  • nginx 代理转发到kong ingress 配置流程
  • 最终测试
  • 1. 创建yaml文件,编辑deployment、service、ingress
  • 2. 使用命令创建deployment、service、ingress资源
  • 3. 验证结果


机器

  1. 腾讯云服务器两台
  2. 配置2核2G

部署流程

  1. 修改hosts文件
vi /etc/hosts 
 地址 master
 地址 node1
  1. 修改hostname
hostnamectl set-hostname master
hostnamectl set-hostname node1
  1. 防火墙端口打开
calico  179
k8s api 6443
node给master 的pod 访问端口 10250
2379 / 4789
  1. 关闭 swap 交换区
# 查看交换分区的状态
sudo free -m
# 临时关闭
sudo swapoff -a
# 永久关闭: 把 /etc/fstab 中的swap注释掉
sudo sed -i 's/.*swap.*/#&/' /etc/fstab
  1. 禁用 selinux
# 临时关闭
setenforce 0
# 永久关闭
sudo sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# 或编辑文件 /etc/selinux/config :
SELINUX=disabled
  1. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  1. 允许 iptables 检查桥接流量
由于开启内核 ipv4 转发需要加载 br_netfilter 模块,所以加载下该模块
modprobe br_netfilter
编辑文件 /etc/sysctl.d/k8s.conf
vi /etc/sysctl.d/k8s.conf
在文件中添加以下内容:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
`执行命令
sysctl -p /etc/sysctl.d/k8s.conf``
  1. 安装docker

使用阿里云

yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker

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

设置加速器并修改docker驱动

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ovj8fg0z.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

重启并设置自启动

systemctl daemon-reload
systemctl restart docker
systemctl enable docker
  1. 安装 Containerd
我们已经了解过容器运行时 containerd 的一些基本使用,接下来在各个节点上安装 Containerd。

由于 containerd 需要调用 runc,所以我们也需要先安装 runc,不过 containerd 提供了一个包含相关依赖的压缩包 cri-containerd-cni-${VERSION}.${OS}-${ARCH}.tar.gz,可以直接使用这个包来进行安装。

此处我们使用1.5.5 版本

下载压缩包

#下载压缩包
wget https://github.com/containerd/containerd/releases/download/v1.5.5/cri-containerd-cni-1.5.5-linux-amd64.tar.gz

#直接将压缩包解压到系统的各个目录中
tar -C / -xzf cri-containerd-cni-1.5.5-linux-amd64.tar.gz

#然后要将 /usr/local/bin 和 /usr/local/sbin 追加到 ~/.bashrc 文件的 PATH 环境变量中
export PATH=$PATH:/usr/local/bin:/usr/local/sbin

#然后执行下面的命令使其立即生效
source ~/.bashrc
  1. kubernetes init
kubeadm init \
      --apiserver-advertise-address=主节点地址 \
      --image-repository registry.aliyuncs.com/google_containers \
      --kubernetes-version v1.24.2 \
      --service-cidr=10.96.0.0/12 \
      --pod-network-cidr=10.244.0.0/16 \
      --ignore-preflight-errors=all \
      | tee kubeadm-init.log
  1. 保证内部网络可以ping 通,复制 master 节点运行 kubernetes init 成功后生成的 kubernetes join xxx 在其他节点运行,当然处理init不在其他节点执行外,其他都要相同的配置。
kubernetes join xxx

calico 安装

wget -k https://docs.projectcalico.org/manifests/calico.yaml

kubectl apply -f calico.yaml

kubectl get po -n kube-system

验证是否成功,一般会因为网络模式导致某个节点未就绪、或者使用某某云的端口未开放出现问题,可以参考下面的解决办法。

【云原生】kubernetes 1.24 安装教程_容器

解决办法

部署后,修改cm kube proxy 里的mode 为ipvs ,如果使用某某云需要将179端口开放。

- name: IP_AUTODETECTION_METHOD
  value: "interface=eth0"

【云原生】kubernetes 1.24 安装教程_kubernetes_02

kong ingress 安装

wget https://raw.githubusercontent.com/Kong/kubernetes-ingress-controller/master/deploy/single/all-in-one-dbless.yaml

kubectl apply -f all-in-one-dbless.yaml

kubectl get po -n kong

验证是否成功

【云原生】kubernetes 1.24 安装教程_容器_03

nginx 代理转发到kong ingress 配置流程

这里主要是nginx配置四层转发,kong ingress用于七层路由转发。

mkdir /home/work
yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
tar zxvf pcre-8.35.tar.gz && cd pcre-8.35
./configure  --prefix=/home/work/pcre
make && make install
pcre-config --version
yum install nginx -y 当前默认版本为1.20.1
nginx -V查看当前nginx配置模块
systemctl start nginx.service -------------- 启动
systemctl stop nginx.service -------------- 停止
systemctl restart nginx.service -------------- 重启
systemctl reload nginx.service -------------- 重新加载配置
systemctl enable nginx.service -------------- 设置开机自启动
wget http://nginx.org/download/nginx-1.20.1.tar.gz
tar -zxvf nginx-1.20.1.tar.gz && cd nginx-1.20.1
mv /usr/sbin/nginx /usr/sbin/nginx.bak
cp -r /etc/nginx  /etc/nginx.bak
yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel python-devel gcc-c++   openssl-devel cmakepcre-develnanowget  gcc gcc-c++ ncurses-devel per redhat-rpm-config.noarch
./configure  --with-stream --prefix=/home/work/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/home/work/pcre-8.35
make && make install
/home/work/nginx/sbin/nginx
/home/work/nginx/sbin/nginx -s reload
stream {
        server {
               listen 80;
               proxy_connect_timeout 60s;
               proxy_timeout 1800s;
               proxy_next_upstream on;
               proxy_next_upstream_tries 3;
               proxy_next_upstream_timeout 10s;
               proxy_pass tcp_80;
        }
        upstream tcp_80 {
               hash $remote_addr consistent;
               server node1:30080 max_fails=3 fail_timeout=15s;
               # check interval=3000 rise=2 fall=5 timeout=1000 type=tcp;
        }
        server {
               listen 443;
               proxy_connect_timeout 60s;
               proxy_timeout 1800s;
               proxy_next_upstream on;
               proxy_next_upstream_tries 3;
               proxy_next_upstream_timeout 10s;
               proxy_pass tcp_443;
        }
        upstream tcp_443{
               hash $remote_addr consistent;
               server node1:30443 max_fails=3 fail_timeout=15s;
               # check interval=3000 rise=2 fall=5 timeout=1000 type=tcp;
        }
}
#user  nobody;
worker_processes  1;

error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

}
include stream.conf;

最终测试

1. 创建yaml文件,编辑deployment、service、ingress

vim nginx-test.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: preview
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80

kind: Service
metadata:
  name: nginx-service
  namespace: preview
spec:
  selector:
    app: nginx-pod
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx
  namespace: preview
  annotations:
    konghq.com/strip-path: "true"
    kubernetes.io/ingress.class: kong
spec:
  rules:
  - host: "可解析并访问的域名地址"
    http:
      paths:
      - pathType: Prefix
        path: /api
        backend:
          service:
            name: nginx-service
            port:
              number: 80

2. 使用命令创建deployment、service、ingress资源

kubectl apply -f nginx-test.yaml

kubectl get po -n preview 
kubectl get svc -n preview
kubectl get ing -n preview

curl 域名地址/api

3. 验证结果

【云原生】kubernetes 1.24 安装教程_docker_04


【云原生】kubernetes 1.24 安装教程_docker_05


创作不易,点个赞吧!
如果需要后续再看点个收藏!
如果对我的文章有兴趣给个关注!
如果有问题,可以关注公众号【了凡银河系】



标签:教程,service,kubernetes,etc,--,nginx,proxy,timeout,1.24
From: https://blog.51cto.com/u_14454410/9145357

相关文章

  • 无涯教程-Redis - SDIFF命令函数
    RedisSDIFF命令返回一个集合与给定集合的差集的元素.SDIFF-返回值返回数组,结果集的元素.SDIFF-语法以下是RedisSDIFF命令的基本语法。redis127.0.0.1:6379>SDIFFFIRST_KEYOTHER_KEY1..OTHER_KEYNSDIFF-示例redis127.0.0.1:6379>SADDmyset"hello"(in......
  • 无涯教程-Redis - RPOPLPUSH命令函数
    RedisRPOPLPUSH命令返回并删除源(source)中存储的列表的最后一个元素,并将该元素压入存储在目标位置的列表的第一个元素(头)。RPOPLPUSH-返回值返回被弹出的最后一个元素。RPOPLPUSH-语法以下是RedisRPOPLPUSH命令的基本语法。redis127.0.0.1:6379>RPOPLPUSHSOU......
  • Kubernetes容器实践深度解析
    Kubernetes容器实践深度解析引言在当今云原生时代,容器技术已经成为构建、部署和管理应用程序的关键工具之一。而在众多的容器编排系统中,Kubernetes(简称K8s)因其强大的自动化、弹性和可扩展性而备受欢迎。本文将深入探讨Kubernetes容器实践,从基础概念到高级应用,为读者提供全面的指南......
  • 无涯教程-Redis - LREM命令函数
    RedisLREM命令从存储在键处的列表中删除等于该值的元素的首次计数出现,count参数通过以下方式影响操作-count>0- 删除等于从头到尾移动的值的元素。count<0- 删除等于从尾到头移动的值的元素。count=0  - 删除所有等于value的元素。LREM-返回值返回整数,已......
  • OpenHarmony SDK 升级助手使用教程【坚果派-坚果】
    OpenHarmonySDK升级助手使用教程【坚果派-坚果】作者:坚果团队:坚果派公众号:“大前端之旅”团队介绍:坚果派由坚果创建,团队拥有8个华为HDE,3个HSD,以及若干其他领域的三十余位万粉博主运营。本人为华为HDE、中国计算机学会CCF专业会员、OpenHarmony布道师、开发者联盟优秀讲师、2023......
  • 无涯教程-Redis - LPUSH命令函数
    RedisLPUSH命令将所有指定的值插入存储在键处的列表的开头,如果键不存在,则创建空列表,当键包含的值不是列表时,将返回错误。LPUSH-返回值返回操作后列表的长度。LPUSH-语法以下是RedisLPUSH命令的基本语法。redis127.0.0.1:6379>LPUSHKEY_NAMEVALUE1..VALUENLP......
  • 无涯教程-Redis - LLEN命令函数
    RedisLLEN命令返回存储在键处的列表的长度,如果键不存在,则返回0,当键上存储的值不是列表时,将返回错误。LLEN-返回值返回整数,列表的长度在关键处。LLEN-语法以下是RedisLLEN命令的基本语法。redis127.0.0.1:6379>LLENKEY_NAMELLEN-示例redis127.0.0.1:6379>......
  • 无涯教程-Redis - LINSERT命令函数
    RedisLINSERT命令将参考值枢轴(pivot)之前或之后的值插入存储在键处的列表中,如果键不存在,则不执行任何操作。当键存在但不包含列表值时,将返回错误。LINSERT-返回值返回整数,即插入操作后列表的长度,如果未找到值透视点,则返回-1。LINSERT-语法以下是RedisLINSERT命令......
  • 无涯教程-Redis - LINDEX命令函数
    RedisLINDEX命令用于获取存储在键处的列表中索引处的元素。索引从零开始,因此0表示第一个元素,1表示第二个元素,依此类推。负索引可用于指定从列表末尾开始的元素,在这里,-1表示最后一个元素,-2表示倒数第二个,依此类推。LINDEX-返回值返回请求的元素,或者当索引超出范围时为nil。......
  • 无涯教程-Redis - BRPOPLPUSH命令函数
    RedisBRPOPLPUSH命令用于从列表中返回一个值,或者阻塞直到一个可用,BRPOPLPUSH命令仅返回最后一个元素并将其插入到另一个列表(如果有)中,或者在特定时间内阻止客户端执行任何命令。BRPOPLPUSH-返回值如果键存在,则返回值,否则返回nil。BRPOPLPUSH-语法以下是RedisBRPOP......