k8s-k8s部署(云服务器可参考)

一、k8s部署前机器准备

0、机器准备

生产测试环境相关机器配置可自行搜索查看,此次部署采用两台腾讯轻量云服务器;(因为轻量云服务器也踩了很多坑,如有相同的小伙伴可重点看章节二k8s部署中master节点安装部分

1、 升级Linux内核到最新版

CentOS7,默认的内核版本是3.10.0;

#导入ELRepo仓库的公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#为yum安装ELRepo仓库
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#查看可用版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#安装最新内核
yum --enablerepo=elrepo-kernel install kernel-ml
# 查看当前可用内核
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
# 选择相应版本
grub2-set-default ${序号}
PS: grub2-set-default 1
# 升级完成,可以通过uname -r命令进项验证。
uname -r

image-20221012183738811

2、设置时间与网络同步

centos7:

# 1 查看系统时间
timedatectl 
# 2 设置时区为北京时间
timedatectl set-timezone Asia/Shanghai
# 3.设置时间同步网络
本节所有命令均在root用户下运行。
# 3.1安装ntp服务
# 如果已经安装,此命令会自动无效。
yum install -y ntp
# 3.2修改ntp相关参数
vi /etc/sysconfig/ntpd
将其修改为:
SYNC_HWCLOCK=yes
OPTIONS="-g -x"
# 3.3启动ntp服务
在这里实际调用的是重启命令,这样可以忽略ntp服务的当前状态。
systemctl restart ntpd
# 3.4设置ntp服务开机启动
systemctl enable ntpd
# 3.5设置Linux系统时钟与远程NTP服务器同步
timedatectl set-ntp true

centos8:

#1.chrony安装
yum install -y chrony
#2.启动chrony服务
systemctl start chronyd
#3.设置系统开机自动启动chrony服务
systemctl enable chronyd 
#4.查看系统时间是否已同步
date

4、hosts设置

    vim /etc/hosts
43.143.65.53 k8s-master
1.116.132.201 k8s-node01

5、设置防火墙为Iptables并设置空规则

# 关闭防火墙
systemctl stop firewalld
# 关闭防火墙开机启动
systemctl disable firewalld
# 置空规则
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables sav
# 由于k8s内部节点之间的通讯使用的是内网ip,我们需要把内网ip的重定向到公网ip上(master与node节点分别执行对应的命令)
iptables -t nat -A OUTPUT -d 10.0.4.5 -j DNAT --to-destination 43.143.65.53
iptables -t nat -A OUTPUT -d 10.0.4.3 -j DNAT --to-destination 1.116.132.201

6、 关闭selinux

因为K8s安装的时候会去检测swap分区有无关闭,如果开启了话可能会把pod放在虚拟内存运行,大大降低工作效率。(也可以通过–ingress排除)

# 临时关闭 ,但是重启系统后还会开启
setenforce 0
# 永久关闭 输入命令vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,然后保存退出。
vi /etc/selinux/config

7、关闭swap

# 临时
swapoff -a 
# 永久
sed -ri 's/.*swap.*/#&/' /etc/fstab 

8、关闭系统不需要的服务

systemctl stop postfix && systemctl disable postfix

9、端口开放(非云服务器不需执行)

由于两台机器是处于公网环境,且k8s节点之间需要通讯,所以需要开放一些端口,端口配置可以直接进到腾讯云控制台进行配置

以下是官网要求的master节点的端口配置

img

以下是官网要求的node节点的端口配置

img

10、docker安装

yum install -y yum-utils
# 添加yum源,这里添加的是阿里云的yum源
yum-config-manager  --add-repo  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看docker版本
yum list docker-ce --showduplicates | sort -r
# 您可以选择其他版本
yum  -y install docker-ce-20.10.12-3.el7
# 设置国内镜像加速,你也可以用自己的仓库镜像,这里是我申请的阿里云个人加速镜像
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ui3fq00k.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# 导入镜像设置
systemctl daemon-reload
# 启动docker
systemctl restart docker
# 设置docker开机启动
systemctl enable docker

11、桥接IPV4流量传递到iptables 的链 (master和node01节点均需要)

tee /etc/sysctl.d/k8s.conf <<-'EOF'
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 配置生效
sysctl -p /etc/sysctl.d/k8s.conf

12、配置k8s yum源(master和node01节点均需要)

tee /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

13、安装kubeadm(初始化cluster),kubelet(启动pod)和kubectl(k8s命令工具) (master和node01节点均需要)

yum install -y kubelet-1.20.5
yum install -y kubeadm-1.20.5
yum install -y kubectl-1.20.5

14、拉取镜像及改名

images.sh

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.20.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.20.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.20.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.20.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.20.5  k8s.gcr.io/kube-proxy:v1.20.5
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.20.5 k8s.gcr.io/kube-scheduler:v1.20.5
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.20.5 k8s.gcr.io/kube-apiserver:v1.20.5
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.20.5 k8s.gcr.io/kube-controller-manager:v1.20.5
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0  k8s.gcr.io/etcd:3.4.13-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2  k8s.gcr.io/pause:3.2


docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.20.5
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.20.5
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.20.5
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.20.5
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0

运行脚本

bash images.sh

image-20221013091944921

可以看到镜像已经下载安成,并改修改tag为k8s.gcr.io/*

二、k8s部署

1、master节点安装

1、初始化
kubeadm init \
  --apiserver-advertise-address=43.143.65.53 \    # 此处43.143.65.53 为公网ip
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.20.5 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all \
  --v=6 

这个地方一定会报错

image-20221013195305741

当出现以下情况下需要etcd.yaml

在输入上述命令后,kubeadm即开始了master节点的初始化,但是由于etcd配置文件不正确,所以etcd无法启动,要对该文件进行修改。
文件路径"/etc/kubernetes/manifests/etcd.yaml" :

此处"43.143.65.53"为腾讯云公网ip,要关注的是"–listen-client-urls"和"–listen-peer-urls"。需要把–listen-client-urls后面的公网IP删除,把–listen-peer-urls改成127.0.0.1:2380

原因是因为腾讯云只要选择VPC网络均是采用NAT方式将公网IP映射到私人网卡的,有兴趣的同学可以了解下NAT。这也就是为什么很多同事无法在腾讯云或阿里云上安装k8s集群的原因

image-20221013195407150

弹出以下信息表示master节点安装成功(注意红色框框部分,node节点安装时需要用到)

image-20221013195639145

# 按照提示执行即可
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2、部署容器网络
curl https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml >>kube-flannel.yml
chmod 777 kube-flannel.yml 
kubectl apply -f kube-flannel.yml
3、查看cs状态
kubectl get cs

image-20221013200034209

发现controller-manager和scheduler状态不对。

原因是默认端口是0了,需要注释掉/etc/kubernetes/manifests下的kube-controller-manager.yaml和kube-scheduler.yaml的- – port=0

image-20221013200113018

image-20221013200131809

# 注释完重启服务
systemctl restart kubelet.service
# 查看组件状态
kubectl get cs

image-20221013200238782

如上图所示即为成功;

到此,master节点部署完成(为了不浪费资源我们一般需要允许master节点部署pod,需要运行以下命令)

kubectl taint nodes --all node-role.kubernetes.io/master-

2、node节点部署

在node节点运行初始化master节点时提供的命令即可;

kubeadm join 43.143.65.53:6443 --token 3ycdz8.v2g4csbh3p20qweg \
    --discovery-token-ca-cert-hash sha256:c23830bb3046cc14cdb4dd422eab6cda74f747648b79e09bb4d9fea8244c9e04

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成:

kubeadm token create --print-join-command

3、测试

等待5分钟左右在master节点运行

kubectl get nodes -o wide

可以看到node01由noready变成ready

image-20221013200600799

在Kubernetes集群中创建一个pod,验证是否正常运行:

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

image-20221013200702696

访问地址:http://<任意Node的IP>:Port ,如:

image-20221013200736800

至此,k8s部署成功!!!

– PS 在任意node节点执行kubectl

#1、将master节点中/etc/kubernetes/admin.conf拷贝倒需要运行的服务器/etc/kubernetes/目录中
scp /etc/kubernetes/admin.conf root@k8s-node1:/etc/kubernetes
#2、在对应服务器上配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf">>~/.bash_profile
#3、使生效
source ~/.bash_profile

三、部署dashboard

Dashboard是官方提供的一个UI,可用于基本管理K8s资源。

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml

如果下载不下来,可自行搜索同版本recommended.yaml;
也可从云盘直接下载(提取码:69jd):recommended.yaml
PS: 云盘中文件已做修改,如需使用可跳过下一步,直接apply

默认Dashboard只能集群内部访问,您可以运行命令vi recommended.yaml修改Service类型为NodePort,方便集群外的机器访问。

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30443
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort

image-20221013202926128

kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard

image-20221013202255972

待所有pod处于running的状态后,创建service account并绑定默认cluster-admin管理员集群角色:

# 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

访问地址:https://<任意Node的IP>:30443,将上条命令产生的token复制后填入,进行登录.

image-20221013203203481
至此。k8s部署全部结束。

PS: 感谢大佬文章
如何通过kubeadm部署k8s集群

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值