K8s 多节点部署流程

最近学习 k8s 集群,这边文章记录一下我搭建k8s集群的步骤
我这边采用的是 kubeadm 来部署集群,还有二进制文件的方式部署

首先说一下我这边的所有节点:(ip 是假的,依据自己情况来)
192.168.0.121 k8s-master1
192.168.0.107 k8s-worker1

以下 1-12 的操作需要在每个节点上都执行一遍…
具体的效果图我就不贴了…
这些操作相当于初始化集群的操作…

1.节点设置一下自己的 hostname
# 在对应的机器上执行

# master 节点上运行:
hostnamectl set-hostname k8s-master1
# worker 节点上运行:
hostnamectl set-hostname k8s-node1
# 以此类推...

设置完成后退出重新登陆一下就可以看到效果了

2.设置sshd禁止DNS解析,以提高ssh连接速度
# 修改配置文件
sed -i '/#UseDNS yes/aUseDNS no' /etc/ssh/sshd_config
# 重启
systemctl restart sshd

没有为什么,执行就对了

3.更新操作系统,升级内核和软件版本
yum update -y

管他妈的先 update一下,老大教我的

4.关闭firewalld,selinux
systemctl stop firewalld

systemctl disable firewalld

sed  -i '/^SELINUX=/s/^.*$/SELINUX=disabled/' /etc/selinux/config

setenforce 0
5.关闭swap分区
swapoff -a

sed -ri 's/.*swap.*/#&/' /etc/fstab
6.根据规划设置主机名,并配置hosts文件
# ip 替换成自己的
cat >>/etc/hosts <<EOF
192.168.0.121 k8s-master1
192.168.0.107 k8s-worker1
EOF
7.将桥接的流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system 
8. 时间同步
yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
# 查看时间同步源状态:
chronyc sourcestats
9.安装docker 并设置开机自启
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

yum -y install docker-ce

systemctl enable docker && systemctl start docker
10.配置镜像下载加速
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

systemctl restart docker
11.添加阿里云YUM软件源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
12.安装配置kubeadm、kubelet、kubectl
# 注意安装的版本必须要保持一致,我这边用的是 1.23.0

yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0 --disableexcludes=kubernetes

systemctl enable --now kubelet

重点来了

master节点单独的操作

先查看以下集群所需要的镜像

kubeadm config images list
# 类似输出:
I1024 11:48:05.634480    4446 version.go:255] remote version is much newer: v1.25.3; falling back to: stable-1.23
k8s.gcr.io/kube-apiserver:v1.23.13
k8s.gcr.io/kube-controller-manager:v1.23.13
k8s.gcr.io/kube-scheduler:v1.23.13
k8s.gcr.io/kube-proxy:v1.23.13
k8s.gcr.io/pause:3.6
k8s.gcr.io/etcd:3.5.1-0
k8s.gcr.io/coredns/coredns:v1.8.6

kubeadm 初始化操作:
其他参数我还不知道什么鬼

 kubeadm init --kubernetes-version=1.23.13 --apiserver-advertise-address=192.168.0.121 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.1.0.0/16 --pod-network-cidr=10.222.0.0/16
# 类似输出
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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 172.31.40.199:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:768eb1bfeebaf5596c21f9e8f7fa63c0c23e3ea57a9258d65f881a8bbb0f442a


# 初始化成功了

–image-repository registry.aliyuncs.com/google_containers
这里是选择国内镜像,由于墙的原因,上面列出的镜像可能拉取不到,网上教程先拉国内镜像然后重命名,我试了不好用还麻烦

–apiserver-advertise-address=192.168.0.121
这里是什么 apiserver 的什么东西,我不太懂,换成了自己master的 ip

查看以下所有的Pod
# 这里可以查看以下所有 pod 
kubectl get po -A 
# 类似输出
NAMESPACE     NAME                                       READY   STATUS    RESTARTS        AGE
kube-system   calico-kube-controllers-54965c7ccb-gzrf5   1/1     Running   0               27m
kube-system   calico-node-6wb67                          1/1     Running   0               27m
kube-system   calico-node-npnnm                          1/1     Running   0               2m37s
kube-system   coredns-6d8c4cb4d-4stl7                    1/1     Running   0               4d20h
kube-system   coredns-6d8c4cb4d-ct28q                    1/1     Running   0               4d20h
kube-system   etcd-k8s-master1                           1/1     Running   2 (3d21h ago)   4d20h
kube-system   kube-apiserver-k8s-master1                 1/1     Running   1 (3d21h ago)   4d20h
kube-system   kube-controller-manager-k8s-master1        1/1     Running   3 (149m ago)    4d20h
kube-system   kube-proxy-5wmjk                           1/1     Running   1 (3d21h ago)   4d20h
kube-system   kube-proxy-tgfrh                           1/1     Running   0               2m37s
kube-system   kube-scheduler-k8s-master1                 1/1     Running   3 (149m ago)    4d20h

# 所有都running起来的话就正常了

#------------------------------------------------------------------------------------------------------------------------
# 如果遇到。。。
#------------------------------------------------------------------------------------------------------------------------
The connection to the server localhost:8080 was refused - did you specify the right host or port?
# 原因:kubectl命令需要使用kubernetes-admin来运行,但是从节点没有这个文件
# 解决办法:
# 1. scp /etc/kubernetes/admin.conf root@ip:/etc/kubernetes
# 2. echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
# 3. source ~/.bash_profile
#------------------------------------------------------------------------------------------------------------------------
# 如果 coredns 一直 pending 看以下官网的pod 网络组件这一块吧,我踩得坑太多,查了很多资料,自己都不知道怎么解决的了
创建Token 并让worker节点加入
# 检查以下时间是否一致
ntpdate ntp1.aliyun.com

# kubeadm 创建 token 
kubeadm token create
# 输出类似:5didvk.d09sbcov8ph2amjw

# 直接输出 worker 节点加入集群命令
 kubeadm token create o2cjol.fvnsm1zq07l9y9vv --print-join-command --ttl=0
#  **** 直接复制此命令到worker节点 **** 
# 输出类似:kubeadm join 192.168.0.121:6443 --token bd6a4s.mppi2bn6gusiwmgl --discovery-token-ca-cert-hash sha256:9997c823b22972fc5720851a7697a41d39ad7adecf456f7bf077878b1da9b362


# 如果你没有 --discovery-token-ca-cert-hash 的值,则可以通过在控制平面节点上执行以下命令链来获取它:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
   openssl dgst -sha256 -hex | sed 's/^.* //'
# 输出类似于以下内容:8cb2de97839780a412b93877f8507ad6c94f73add17d5d7058e91741c9d5ec78

到这一步token 就生成完了

worker节点单独操作

# 将worker1加入 集群 kubeadm join --token 5didvk.d09sbcov8ph2amjw --discovery-token-ca-cert-hash sha256:<hash>
kubeadm join 192.168.0.121:6443 --token bd6a4s.mppi2bn6gusiwmgl --discovery-token-ca-cert-hash sha256:9997c823b22972fc5720851a7697a41d39ad7adecf456f7bf077878b1da9b362
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值