ubuntu22.04安装kubernetes集群

举报
yd_246059053 发表于 2023/12/23 22:48:04 2023/12/23
【摘要】 一、环境参考主机信息:k8s-controller01 – 192.168.40.131k8s-controller02 – 192.168.40.132k8s-controller03 – 192.168.40.133系统版本:ubuntu 22.04。环境准备方面,使用虚拟机安装。安装过程略,最后结果如图:本次实验使用虚拟机进行,主机环境准备步骤只在k8s-controller01进行,...

一、环境参考

主机信息:

  • k8s-controller01 – 192.168.40.131
  • k8s-controller02 – 192.168.40.132
  • k8s-controller03 – 192.168.40.133

系统版本:ubuntu 22.04。环境准备方面,使用虚拟机安装。安装过程略,最后结果如图:


本次实验使用虚拟机进行,主机环境准备步骤只在k8s-controller01进行,完成后再以链接克隆的方式,创建主controller02和controller03节点。创建完成后,再完成主机环境准备步骤的1、2、3步。

二、主机环境准备

1、配置ip地址,并确保各个主机的mac地址唯一

#修改/etc/netplan/00-installer-config.yaml
sudo vim /etc/netplan/00-installer-config.yaml 
-----------------------------
network:
  ethernets:
    ens33:
    #dhcp改为false,默认为true
      dhcp4: false
      #配置ip地址
      addresses:
        - 192.168.40.131/24
      #配置网关
      routes:
        - to: default
          via: 192.168.40.2
      #配置dns
      nameservers:
        addresses: [223.5.5.5,223.6.6.6]
  version: 2


#应用网络配置
sudo netplan apply

#查看ip地址并确认mac地址
ip a


2、查看product_uuid,确保唯一性

sudo cat /sys/class/dmi/id/product_uuid

3、配置主机名以及hosts文件

#设置主机名,192.168.40.131执行
hostnamectl set-hostname k8s-controller01
#设置主机名,192.168.40.132执行
hostnamectl set-hostname k8s-controller02
#设置主机名,192.168.40.133执行
hostnamectl set-hostname k8s-controller03

#配置hosts,三台主机都添加
192.168.40.131   k8s-controller01
192.168.40.132   k8s-controller02
192.168.40.133   k8s-controller03

4、配置时间同步

ubuntu22.04 默认使用systemd-timesyncd服务来实现时间同步,该服务对应的配置文件是/etc/systemd/timesyncd.conf,我们需要修改时间同步服务器时,修改该配置文件即可。

zhangsf@k8s-controller01:~$ sudo vim /etc/systemd/timesyncd.conf
......
[Time]
#修改NTP配置项,多个ntp服务器,使用空格隔开
NTP=ntp.aliyun.com
......
#保存退出后,重启时间同步服务
zhangsf@k8s-controller01:~$ sudo systemctl restart systemd-timesyncd
#通过timedatectl命令查看时间同步状态
zhangsf@k8s-controller01:~$ sudo timedatectl timesync-status


另外,初始安装时,默认是utc时区,可以改成CST


5、关闭swap

#关闭swap
sudo swapoff -a
sudo sed -i '/swap/ s/^\(.*\)$/#\1/g' /etc/fstab

6、配置防火墙

各个端口介绍:

  •     6443端口:kubenetes api server
  •    10250端口:kubelet api
  •    10259端口:kube-scheduler
  •    10257端口:kube-controller-manager
  •     2379、2380端口:etcd server/client api
  •    179端口:calico使用,如果不部署calico,可以不放开
  •     30000-32767:NodePort Services的默认端口范围。

放行策略:

  • 控制节点:如果只作为控制平面使用,可以不放开30000-32767端口
  • 工作节点:只需要179、10250和30000-32767



#ubuntu使用ufw:
# 启动ufw
sudo ufw enable
# 设置为开机自启
sudo systemctl enable ufw

#配置
sudo ufw allow from 192.168.40.131 to any port 6443,2379,2380,10250,10257,10259 proto tcp
sudo ufw allow from 192.168.40.132 to any port 6443,2379,2380,10250,10257,10259 proto tcp
sudo ufw allow from 192.168.40.133 to any port 6443,2379,2380,10250,10257,10259 proto tcp
sudo ufw allow 30000:32767/tcp
sudo ufw allow 179/tcp

ufw命令参考:

#ubuntu使用ufw:
# 启动ufw
sudo ufw enable
# 设置为开机自启
sudo systemctl enable ufw

# 将 <port> 替换为你要放行的具体端口号。例如,要放行 TCP 端口 80,可以执行 sudo ufw allow 80。
sudo ufw allow <port>

# 将 <port> 替换为端口号,<protocol> 替换为协议类型(如 tcp、udp)。例如,要放行 UDP 端口 53,可以执行 sudo ufw allow 53/udp。
sudo ufw allow <port>/<protocol>

sudo ufw allow <start-port>:<end-port>/<protocol>

#删除规则
sudo ufw status numbered
sudo ufw delete [rule_number]
sudo ufw delete allow 80/tcp

#阻止某个ip
sudo ufw deny from [ipaddr]

#允许从某个ip或者网段访问某个端口
sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp

7、配置kernel以及sysctl

$ 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


$ vim /etc/modules-load.d/modules.conf
ip_vs
ip_vs_lc
ip_vs_lblc
ip_vs_lblcr
ip_vs_rr
ip_vs_wrr
ip_vs_sh
ip_vs_dh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
ip_tables
ip_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
xt_set
br_netfilter
nf_conntrack
overlay

#重启后验证内核模块与内存参数:
$ sysctl -a | grep iptable
net.bridge.bridge-nf-call-iptables = 1
$ lsmod | grep ip_vs
......
ip_vs_ftp              16384  0
nf_nat                 49152  1 ip_vs_ftp
ip_vs_sed              16384  0
ip_vs_nq               16384  0
ip_vs_fo               16384  0
ip_vs_dh               16384  0
ip_vs_sh               16384  0
......


8、安装container runtime以及kubernetes tools

#安装依赖包
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release

#下载docker源所需证书
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

#下载kubernetes源所需证书
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

#添加docker源
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

#添加kubernetes源
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

#更新
sudo apt update

#安装kubernetes tools以及containerd
sudo apt install kubelet kubeadm kubectl containerd.io


#修改配置,启用systemcgroup
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

#国内无法访问registry.k8s.io,我们需要改下配置
sed -i "s;registry.k8s.io/pause:3.6;registry.aliyuncs.com/google_containers/pause:3.9;g" /etc/containerd/config.toml

#启动containerd
systemctl start containerd
systemctl enable containerd

#提前下载镜像
sudo kubeadm config images pull --image-repository="registry.cn-hangzhou.aliyuncs.com/google_containers" --kubernetes-version=v1.28.5

安装后验证

查看containerd启动状态


三、节点初始化

1、初始化控制节点

#初始化,如果有错误,会有“[ERROR]”字样提示。
#国内无法访问外网,需要添加--image-repository指定镜像下载地址
sudo kubeadm init --apiserver-advertise-address=192.168.40.131 \
--control-plane-endpoint=k8s-controller01 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.100.0.0/16 \
--pod-network-cidr=10.244.0.0/16

#主节点执行,以上命令会有提示
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

#第一个控制节点生成证书
kubeadm init phase upload-certs --upload-certs
......
[upload-certs] Using certificate key:
#记住这个key,等下添加控制节点用到
cd9e416f4be0a071f8d417ad6531551902eb7c0987d0e53ab4489c610e91e0cb

2、添加控制节点

#如上图所示,节点初始化后,会有两个加入节点的命令,第一个kubeadm join是添加控制节点;第二个是添加worker 节点。
#添加控制节点时,需要加上“--certificate-key”指令,该key通过上节中的命令“kubeadm init phase upload-certs --upload-certs”生成
#实际指令如下所示:
sudo  kubeadm join k8s-controller01:6443 --token xrlj7k.js255bjitjb46frk \
        --discovery-token-ca-cert-hash sha256:a2fedf4e21e6d93e3461ff09deb9ee3007e6216e37af0e2acf56435f19beff80 \
        --control-plane --certificate-key cd9e416f4be0a071f8d417ad6531551902eb7c0987d0e53ab4489c610e91e0cb

#执行完成后,查看节点信息
kubectl get nodes

各个节点信息如下图所示。由于没有初始化网络,所以status还是“NotReady状态”

#由于没有worker节点,需要配置控制节点允许运行pod
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

3、安装calico

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml

#查看结果
kubectl get pods -n kube-system


4、测试安装结果

kubectl create deployment web-app01 --image nginx --replicas 2
kubectl expose deployment web-app01 --type NodePort --port 80
kubectl get deployment web-app01
kubectl get pods
kubectl get  svc web-app01


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。