k8s-1.23.3安装,不踩坑

一,环境

机器: 1台master(2c4g) 1台woker(1c2g)

操作系统版本:Ubuntu 22.04.1

用户:root

二. 准备工作 (所有机器)

2.1修改host

# 将master和worker两台主机的名字分别改了
vi /etc/hostname
# 将master和worker的ip分别配置上
vi /etc/hosts

2.2安装docker

apt install -y docker.io 
service docker start
usermod -aG docker ${USER}

# 修改docker的驱动配置为systemd
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}EOF

# 重启docker
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker

# 如果想复核一下,查看docker的驱动的方法:
 docker info | grep -i "Cgroup Driver"

2.3修改转发配置,修改iptables

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1 # better than modify /etc/sysctl.conf
EOF

sudo sysctl --system

2.4修改swap分区

sudo swapoff -a
sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab

附:此处是在别的版本上遇到问题时的一些解决方法,不需要执行!!!不需要执行!!!

# 关闭防火墙,可以通过firewall-cmd --list-ports查看开放的端口,否则即使disable了firewalld,其实端口还是关着的
systemctl start firewalld
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --reload
systemctl disable firewalld
systemctl stop firewalld

# 巨坑,有的机器还有iptables的规则配置,也需要放通
iptables -P INPUT ACCEPT   
iptables -P OUTPUT ACCEPT  
iptables -P FORWARD ACCEPT  


# 关闭selinux

# 临时禁用selinux

setenforce 0

# 永久关闭 修改/etc/sysconfig/selinux文件设置

sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
三. 下载相关镜像(所有机器)

3.1安装kubeadm

sudo apt install -y apt-transport-https ca-certificates curl

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key a

cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

sudo apt update

apt install -y kubeadm=1.23.3-00 kubelet=1.23.3-00 kubectl=1.23.3-00

# 锁定版本
apt-mark hold kubeadm kubelet kubectl

3.2下载各个组件的镜像

repo=registry.aliyuncs.com/google_containers

for name in `kubeadm config images list --kubernetes-version v1.23.3`; do
    src_name=${name#k8s.gcr.io/}
    src_name=${src_name#coredns/}
    docker pull $repo/$src_name
    docker tag $repo/$src_name $name
    docker rmi $repo/$src_name
done
四. 安装master节点

4.1初始化:–pod-network-cidr,设置集群里 Pod 的 IP 地址段。 --apiserver-advertise-address,设置 apiserver 的 IP 地址,对于多网卡服务器来说很重要(比如 VirtualBox 虚拟机就用了两块网卡),可以指定 apiserver 在哪个网卡上对外提供服务 。

kubeadm init \
--pod-network-cidr=10.10.0.0/16 \
--apiserver-advertise-address=192.168.33.10 \
--kubernetes-version=v1.23.3

4.2按照提示,创建配置文件

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

4.3保留让子节点加入的命令,如果丢失,可以通过下面命令获取

kubeadm token create --print-join-command

4.4使用任意浏览器下载:https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml

将文件内容在master机器中,拷贝至任意路径下,新建的一个flannel.yml文件中,修改其中的net-conf.json 字段,其中Network 改为上面init时填入的–pod-network-cidr参数。然后执行kubectl apply -f flannel.yml

net-conf.json: |
{
    "Network": "10.10.0.0/16",
    "Backend": {
        "Type": "vxlan"
    }
}

附:

如果出现问题,可以通过journalctl -xfeu kubelet能看到error信息。解决后再

rm -rf $HOME/.kube
kubeadm reset
# 重复上述的init操作
五. 安装Worker节点

加入Master节点的集群

# 加入集群 这里加入集群的命令每个人都不一样,根据主节点kubeadm token create --print-join-command的结果来执行

kubeadm join 192.168.33.10:6443 --token kcnq89.a7f2hsvlioyyko2a     --discovery-token-ca-cert-hash sha256:ec019c01b1751a609259827b65cda70fde7e2242849934a8b22c4708772e2c94

加入成功后,可以在master节点上使用kubectl get nodes命令查看到加入的节点。

问题参考

在安装成功后。kubectl看不了worker节点的日志,也无法通过exec连上worker节点。但是其他自动伸缩、部署之类的都能在worker节点上拉起pod。

最后是通过在worker节点上,修改/etc/hosts,把master和worker的ip加上去才好了。

先使用kubectl get po -o wide获取各个pod所在节点。然后登陆某个节点的一个pod上(不能直接在节点上ping,因为pod是建立在虚拟网络上,节点ping pod是肯定ping不通的),ping另一个节点的pod的ip,发现ping不通。

后来发现是因为flannel启动时,使用的网卡不对,在vagrant部署时,多生成了一块网卡。参考https://www.jianshu.com/p/ed1ae8443fff解决了问题。

具体方法是,修改flannel.yml文件中,对应着command为flanneld的那个代码块,在args中加上- -iface=网卡名(对应host-only模式的那个网卡,比如192.168.33.10)。然后kubectl replace --force -f flannel.yml

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值