kubeadm方式安装基于1.21版本的kubernetes集群

一、准备三台centos7服务器

(1) master节点:192.168.56.106

node1节点:192.168.56.107

node2节点:192.168.56.108

(2)查看master、node1、node2三台服务器的防火墙状态,关闭防火墙,并永久关闭防火墙

#查看防火墙状态(三台服务器分别执行)

systemctl status firewalld

#关闭防火墙

systemctl stop firewalld

#永久关闭防火墙

systemctl disable firewalld

二、master、node1、node2节点安装docker

(1)#如果之前在服务器上安装过docker,卸载旧版本

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

#安装yum工具包

sudo yum install -y yum-utils

#设置docker的镜像仓库,我设置的是docker官方的镜像仓库源,也可以设置第三方镜像源

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo


#安装docker前,先更新yum软件包索引

yum makecache fast
 

#安装docker-ce社区版,安装指令

sudo yum install docker-ce docker-ce-cli containerd.io
#如果输入以上指令,表示安装最新的docker-ce版本,我在我本地安装的是20.10.16

#输入指令,查看可以安装的docker版本

yum list docker-ce --showduplicates | sort -r

 #安装30.10.16版本

yum install docker-ce-3:20.10.6-3.el7.x86_64 docker-ce-cli-3:20.10.6-3.el7.x86_64 container-io

#安装成功后,查看docker启动状态

systemctl status docker

 #如果docker状态为dead,使用指令启动并设置开机启动

systemctl start docker && systemctl enable docker

#查看安装的docker版本

docker version

#设置docker镜像加速器,我是使用的是aliyun的镜像加速,登录自己的aliyun账号,在控制台->容器镜像服务->镜像工具->镜像加速器

 #设置镜像加速器后,查看daemon.json内容

 #重启docker-daemon服务,并重启docker服务,至此docker服务安装完成

systemctl daemon-reload && systemctl restart docker

三、master、node1、node2基于kubeadm安装kubernetes集群

(1)安装前前置环境(master、node1、node2都需要执行)

#修改hostname,master服务器修改为k8s-master,node1服务器修改为k8s-node1,node2服务器修改k8s-node2

master服务器:hostnamectl set-hostname k8s-master

查看master服务器主机名:hostname

 node1服务器:hostnamectl set-hostname k8s-node1

查看node1服务器主机名:hostname

node2服务器:hostnamectl set-hostname k8s-node2

查看node2服务器主机名:hostname

 

#设置hostname解析,master、node1、node2都需要执行,执行成功后,查看hosts文件

 echo "127.0.0.1  $(hostname)" >> /etc/hosts

cat /etc/hosts

 

 

#关闭selinux,master、node1、node2都需要关闭

sed -i 's/enforcing/disabled/' /etc/selinux/config    
setenforce 0

#关闭swap分区,master、node1、node22都需要关闭,使用free -m查看,如果swap显示0,那么表示swap已永久关闭

swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

 #允许iptables检查桥接流量

#修改 /etc/sysctl.conf
sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g"  /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g"  /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g"  /etc/sysctl.conf
# 可能没有,追加
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1"  >> /etc/sysctl.conf
# 执行命令以应用
sysctl -p

(2) kubeadm安装kubernetes  master、node1、node2服务器都需要执行!!!

# 配置K8S的yum源  配置aliyun的yum源,因为国外的yum访问不到
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 卸载kubernetes旧版本
yum remove -y kubelet kubeadm kubectl

# 查看可以安装的kubernetes版本
yum list kubelet --showduplicates | sort -r

# 安装kubelet、kubeadm、kubectl 指定1.21版本 
yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0

# 开机启动kubelet
systemctl enable kubelet && systemctl start kubelet

(3)初始化master节点!!!

############下载核心镜像 kubeadm config images list:查看需要哪些镜像###########

####封装成images.sh文件,标注:如果没有安装vim,使用

yum install -y vim 

#建立image.sh文件
#!/bin/bash
images=(
  kube-apiserver:v1.21.0
  kube-proxy:v1.21.0
  kube-controller-manager:v1.21.0
  kube-scheduler:v1.21.0
  coredns:v1.8.0
  etcd:3.4.13-0
  pause:3.4.1
)
for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
#####封装结束,新建的image.sh没有执行权限,需要给赋予执行权限

chmod +x images.sh && ./images.sh


### registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/coredns:v1.8.0

###查看下载到本地的镜像,总共由七个镜像(kube-apiserver、kube-proxy、kube-controller-manager、kube-scheduler、pause、coredns、etcd)

docker images

##注意1.21.0版本的k8s coredns镜像比较特殊,结合阿里云需要特殊处理,重新打标签
docker tag registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/coredns:v1.8.0 registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/coredns/coredns:v1.8.0


 ########kubeadm init 初始化一个master########################
########kubeadm join 其他worker加入集群########################

kubeadm init \
--apiserver-advertise-address=192.168.56.106 \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.21.0 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.101.0/16
## 注意:pod-cidr与service-cidr
# cidr 无类别域间路由(Classless Inter-Domain Routing、CIDR)
# 指定一个网络可达范围  pod的子网范围+service负载均衡网络的子网范围+本机ip的子网范围不能有重复域

######按照提示继续######
## init完成后第一步:复制相关文件夹
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

## 导出环境变量
Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf


### 部署一个pod网络
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/
  ##############如下:安装calico#####################
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

 ### 命令检查
kubectl get pod -A  ##获取集群中所有部署好的应用Pod,标注:STATUS状态必须全部为Running才表示启动成功


kubectl get nodes  ##查看集群所有机器的状态,标注:STATUS状态必须全部为Ready才表示节点启动成功

 (4)初始化worker节点(node1、node2节点)标注:master服务器也可以执行该指令!!!把master作为一个worker节点加入到集群中!!!

 #node1、node2节点加入到集群中
Then you can join any number of worker nodes by running the following on each as root:

#如果加入集群指令过期怎么办???

#使用以下指令在master服务器上执行,得到新的令牌!!!

kubeadm token create --print-join-command   

###查看集群中所有的pod

kubectl get pod -A

 ##也可以使用以下指令监听查看pod启动过程

watch kubectl get pod -A


#验证集群,获取所有节点
kubectl get nodes

#给节点打标签
## k8s中万物皆对象。node:机器  Pod:应用容器
###node1加标签  《》
kubectl label node k8s-node1 node-role.kubernetes.io/worker='node1'

kubectl label node k8s-node2 node-role.kubernetes.io/worker='node2'
 

## k8s集群,机器重启了会自动再加入集群,master重启了会自动再加入集群控制中心

##设置ipvs模式
###k8s整个集群为了访问通;默认是用iptables,性能下(kube-proxy在集群之间同步iptables的内容)

###查看pod详细信息

kubectl get pod -A -o wide

#1、查看默认kube-proxy 使用的模式
kubectl logs -n kube-system kube-proxy-28xv4
#2、需要修改 kube-proxy 的配置文件,修改mode 为ipvs。默认iptables,但是集群大了以后就很慢
kubectl edit cm kube-proxy -n kube-system
修改如下
   ipvs:
      excludeCIDRs: null
      minSyncPeriod: 0s
      scheduler: ""
      strictARP: false
      syncPeriod: 30s
    kind: KubeProxyConfiguration
    metricsBindAddress: 127.0.0.1:10249
    mode: "ipvs"
 ###修改了kube-proxy的配置,为了让重新生效,需要杀掉以前的Kube-proxy
 kubectl get pod -A|grep kube-proxy
master节点:kubectl delete pod kube-proxy-6cg24 -n kube-system

node1节点:kubectl delete pod kube-proxy-gv6sh -n kube-system

node2节点:kubectl delete pod kube-proxy-pqlc8 -n kube-system
### 修改完成后可以重启kube-proxy以生效,删除kube-proxy后,生成新的kube-proxy的pod信息

至此,docker和kubernetes已安装完成!!!

 四、结尾

(1)master、node1、node2关机重启后,kubernetes会自动重新启动!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值