Ubuntu 20.04 部署kubernetes 1.22 集群

标签: kubernetes Ubuntu | 发表时间:2021-10-31 19:46 | 作者:root
出处:https://www.luyouli.com

由于众所周知的原因(F**K 红X),CentOS8的生命周期就快结束了,系统要转入Ubuntu的怀抱了,不过还好所有的应用都扔到kubernetes上了,迁移的难度大大降低。近期在做Ubuntu的测试,正好把在ubuntu 20.04 LTS 上部署最新的kubernetes记录下来

基础环境:

系统:ubuntu 20.04 LTS

master:172.19.82.170

slave1:172.19.82.192

slave2:172.19.82.160

基础组件:

$ sudo su# apt update && apt upgrade -y && init 6

# apt install -y net-tools lrzsz htop

配置时间并令时间戳立即生效

# timedatectl set-timezone Asia/Shanghai && systemctl restart rsyslog

设置hosts解析:

# hostnamectl set-hostname master && bash

# hostnamectl set-hostname slave1 && bash

# hostnamectl set-hostname slave2 && bash

# cat >> /etc/hosts<< EOF

172.19.82.170 master

172.19.82.192 slave1

172.19.82.160 slave2

EOF

关闭SWAP(过于简单就不写了)

关闭selinux和防火墙 (过于简单就不写了)

修改内核参数:

# cat >> /etc/sysctl.conf << EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

vm.max_map_count = 262144EOF

# modprobe br_netfilter && sysctl -p /etc/sysctl.conf

设置rp_filter的值

kubernetes集群如果使用的是calico网络插件,那么要求下面两个内核参数为0或者1,ubuntu20.04默认是2

# vim /etc/sysctl.d/10-network-security.conf

net.ipv4.conf.default.rp_filter=1

net.ipv4.conf.all.rp_filter=1

# sysctl –system

安装docker-ce
# apt remove docker docker-engine docker.io containerd runc
# apt-get install ca-certificates \curl gnupg lsb-release
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# apt update
# apt install docker-ce docker-ce-cli containerd.io
# systemctl enable docker
# mkdir /etc/docker/
# vim /etc/docker/daemon.json
{
        "exec-opts":["native.cgroupdriver=systemd"]
}
# systemctl restart docker
安装kubernetes 1.22
# apt install ca-certificates curl software-properties-common apt-transport-https curl
# curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
# cat >> /etc/apt/sources.list.d/kubernetes.list <<EOF 
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# apt update && apt install -y kubelet kubeadm kubectl
# apt-mark hold kubelet kubeadm kubectl    # 如果需要锁定版本使用这个命令
# apt-mark unhold kubelet kubeadm kubectl  # 解锁
# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.2", GitCommit:"8b5a19147530eaac9476b0ab82980b4088bbc1b2", GitTreeState:"clean", BuildDate:"2021-09-15T21:37:34Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/amd64"}
# systemctl enable kubelet
修改配置文件   # 只在master节点操作
# kubeadm config print init-defaults > kubeadm.yaml
# vim kubeadm.yaml       修改&新增4处
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: 172.19.82.170   # 修改为master节点IP
  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.22.2       # 修改为正确的版本号,原来是1.22.0
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16     # 新增
  serviceSubnet: 10.96.0.0/12
scheduler: {}
查看需要的镜像   # 只在master节点操作
# kubeadm config images list --config kubeadm.yaml
registry.aliyuncs.com/google_containers/kube-apiserver:v1.22.2
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.22.2
registry.aliyuncs.com/google_containers/kube-scheduler:v1.22.2
registry.aliyuncs.com/google_containers/kube-proxy:v1.22.2
registry.aliyuncs.com/google_containers/pause:3.5
registry.aliyuncs.com/google_containers/etcd:3.5.0-0
registry.aliyuncs.com/google_containers/coredns:v1.8.4
拉取镜像
# kubeadm config images pull --config kubeadm.yaml
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-apiserver:v1.22.2
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-controller-manager:v1.22.2
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-scheduler:v1.22.2
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-proxy:v1.22.2
[config/images] Pulled registry.aliyuncs.com/google_containers/pause:3.5
[config/images] Pulled registry.aliyuncs.com/google_containers/etcd:3.5.0-0
[config/images] Pulled registry.aliyuncs.com/google_containers/coredns:v1.8.4
初始化集群    # 只在master节点操作
# kubeadm init --config kubeadm.yaml
[init] Using Kubernetes version: v1.22.2
[preflight] Running pre-flight checks
        [WARNING Hostname]: hostname "node" could not be reached
        [WARNING Hostname]: hostname "node": lookup node on 127.0.0.53:53: server 
························
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
·····················
# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config
# kubectl get nodes
NAME   STATUS     ROLES                  AGE   VERSION
node   NotReady   control-plane,master   34m   v1.22.2

添加slave节点到master集群中   # 在两个slave节点执行
# kubeadm join 172.19.82.170:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:7600dfe96c4aed7cf86a4d43c8ab1653b642f0xxxxxxxxxxxxxxxxxxxxx 
# kubectl get nodes   # 在master节点查看
NAME     STATUS     ROLES                  AGE     VERSION
node     NotReady   control-plane,master   39m     v1.22.2
slave1   NotReady   <none>                 2m50s   v1.22.2
slave2   NotReady   <none>                 113s    v1.22.2
安装flannel插件
# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# vim kube-flannel.yml
在下面增加配置,指定具体的网卡,尤其是在多网卡环境,默认是第一块网卡
args:
        - --ip-masq
        - --kube-subnet-mgr
resources:
变为
args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=ens3    # 指定具体的网卡
resources:
# kubectl create -f kube-flannel.yml 
# kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
node     Ready    control-plane,master   63m   v1.22.2
slave1   Ready    <none>                 26m   v1.22.2
slave2   Ready    <none>                 25m   v1.22.2

这样环境就OK了

相关 [ubuntu kubernetes 集群] 推荐:

Ubuntu 20.04 部署kubernetes 1.22 集群

- - 鹿先森
由于众所周知的原因(F**K 红X),CentOS8的生命周期就快结束了,系统要转入Ubuntu的怀抱了,不过还好所有的应用都扔到kubernetes上了,迁移的难度大大降低. 近期在做Ubuntu的测试,正好把在ubuntu 20.04 LTS 上部署最新的kubernetes记录下来. 系统:ubuntu 20.04 LTS.

基于 VirtualBox 与 Ubuntu 16 搭建 Kubernetes 集群

- - DockOne.io
【编者的话】这篇文章记录了我在一台机器使用 VirtualBox + Ubuntu 16 搭建 Kubernetes 的整个过程,包括其中遇到的一些问题以及解决办法. 下面是一段来自维基百科的关于 Kubernetes 的解释:. Kubernetes(常简称为 K8s)是用于自动部署、扩展和管理「容器化(containerized)应用程序」的开源系统.

Kubernetes 集群日志基础

- - Linux 中国◆开源社区
探索 Kubernetes 中不同容器日志记录模式的工作原理. 服务器和应用程序日志记录是开发人员、运维人员和安全团队了解应用程序在其生产环境中运行状态的重要工具. 日志记录使运维人员能够确定应用程序和所需组件是否运行平稳,并检测是否发生了异常情况,以便他们能够对这种情况做出反应. 对于开发人员,日志记录提供了在开发期间和之后对代码进行故障排除的可见性.

使用Prometheus、Thanos监控Kubernetes集群

- - DockOne.io
当你阅读这篇文章的时候,我相信你一定已经说服了你的经理,或者是公司CTO,选择容器和Kubernetes作为微服务治理平台,去转型升级你们公司的软件产品. 你非常非常的happy,一切都貌似按照计划进行,你创建了你的第一个Kubernetes集群(三大主流云服务提供商,微软云Azure,亚马逊云AWS和谷歌云GCP都提供了非常方便的方式部署Kubernetes平台),你开发了你的第一个容器化应用,然后把它部署到了你的Kubernetes集群上.

Kubernetes - 集群内容器访问集群外服务

- - 掘金后端
GitHub地址: github.com/QingyaFan/c…. 企业内部一般存在很多的微服务,在逐步容器化的过程中,会有部分服务在集群外部,未完成容器化,比如数据库,而部分已经完成容器化的依赖于这些服务的服务,过渡过程中,需要集群内部的容器访问集群外部的服务. 为了在容器化过程中,让服务不中断,就需要让Kubernetes集群内部的容器能访问集群外部的服务,怎么做到呢,在每个应用的配置文件中使用外部IP或者外部rds名字吗.

构建生产就绪的Kubernetes集群的16点清单

- - DockOne.io
Kubernetes是用于构建高度可扩展系统的强大工具. 结果,许多公司已经开始或正在计划使用它来协调生产服务. 不幸的是,像大多数强大的技术一样,Kubernetes也很复杂. 我们整理了以下清单,以帮助你生产环境最佳实践Kubernetes. Kubernetes提供了一种编排容器化服务的方法,因此,如果您没有按顺序实践你的容器,那么集群一开始就不会处于良好状态.

利用Kubeadm部署 Kubernetes 1.13.1集群实践录 | CodeSheep · 程序羊

- -
Kubernetes集群的搭建方法其实有多种,比如我在之前的文章 《利用K8S技术栈打造个人私有云(连载之:K8S集群搭建)》中使用的就是二进制的安装方法. 虽然这种方法有利于我们理解 k8s集群,但却过于繁琐. 而 kubeadm是 Kubernetes官方提供的用于快速部署Kubernetes集群的工具,其历经发展如今已经比较成熟了,利用其来部署 Kubernetes集群可以说是非常好上手,操作起来也简便了许多,因此本文详细叙述之.

调试Kubernetes集群中的网络停顿问题

- - DockOne.io
我们曾经在这里中聊起过Kubernetes ( Kubernetes at GitHub : https://github.blog/2017-08-16. ithub/),在过去几年,Kubernetes在Github已经成为标准的部署模式. 目前在Github,我们在Kubernetes上运行着海量的面向内部团队以及面向C端的服务.

简单了解一下Kubernetes,并搭建自己的集群

- - DockOne.io
这篇博客的本意是带大家从零开始搭建Kubernetes集群的. 但是我后面一想,如果是我看了这篇文章,会收获什么. 是我的话我会选择拒绝,所以我加了关于Kubernetes的简单介绍,每一步的步骤都添加了解释. 由于篇幅和时间原因,我只介绍了Kubernetes中较为核心的Pod和Service. 文章前半段会简单的介绍一下Kubernetes,后半段会介绍如何从零开始慢慢的搭建集群.

Kubernetes(K8S)集群部署搭建图文教程(最全)

- -
Kubernetes 集群安装. Harbor采取私有的仓库去镜像使用. 第一步:Router软路由构建. 第二步:centos7安装 5台(自行安装). 复制这段内容后打开百度网盘手机App,操作更方便哦. 1、安装k8s的节点必须是大于1核心的CPU 2、安装节点的网络信息. 3、koolshare 软路由的默认面是koolshare.