k8s自动化集群部署

Linux环境配置:

快速部署k8s集群
  • centos7-1 master
  • centos7-2 node1
  • centos7-3 node2
k8s中Linux必须关闭以下设置:
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
	# 永久关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config  
	# 临时关闭
setenforce 0

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

# 设置虚拟机ip地址不发生改变
 vim /etc/sysconfig/network-scripts/ifcfg-ens33
   	# 修改如下配置
BOOTPROTO=dhcp 			#修改为BOOTPROTO=static
 	# 然后添加如下设置:
IPADDR=master主机ip地址
NETMASK=255.255.255.0
GATEWAY=192.168.10.1 	#在虚拟机-编辑-虚拟网络编辑器查看,或者ifconfig查看
DNS1=192.168.10.1  		#与GATEWAY一致
	# 然后关机,打开虚拟机-编辑-虚拟网络编辑器-NAT设置-点击确定-重启虚拟机即可

# 根据规划设置主机名:
	# master节点
hostnamectl set-hostname k8smaster
	# node1节点
hostnamectl set-hostname k8snode1
	# node2节点
hostnamectl set-hostname k8snode2
# 在master添加hosts:
cat >> /etc/hosts << EOF
master主机ip k8smaster
node1节点ip k8snode1
node2节点ip k8snode2
EOF		
		
# 将桥接的IPv4流量传递到iptables的链
	?为什么这样设置
		同一节点的不同pod是利用linux bridge在网络上进行通讯
		如果不进行设置的话,podA请求services通过iptables发送,services中的podB返回数据时发现podA与podB在同一节点会走网路的第二层进行返回。
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
	
# 生效
sysctl --system  
		
# 设置Linux时间与windows同步
yum install ntpdate -y
ntpdate time.windows.com	

安装Docker(19.03.13)

# 配置docker的阿里yum源
cat >/etc/yum.repos.d/docker.repo<<EOF
[docker-ce-edge]
name=Docker CE Edge - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF

# yum方式下载docker
	# yum安装
yum install docker-ce-19.03.13 docker-ce-cli-19.03.13 containerd.io
	# 查看docker版本
docker --version  
	# 启动docker
systemctl start docker
	#开机启动docker
systemctl enable docker 

# 配置docker镜像源
cat >> /etc/docker/daemon.json << EOF
{
	"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

安装kubernetes

# 添加kubernetes软件源
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

# 安装kubeadm,kubelet和kubectl(指定版本1.20.11)
	# 安装kubelet、kubeadm、kubectl,同时指定版本
yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11
	# 设置开机启动
systemctl enable kubelet

kubeadm方式搭建集群

# 部署Kubernetes Master【master节点】
kubeadm init --apiserver-advertise-address=master主机ip --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.20.11 --service-cidr=10.96.0.0/12  --pod-network-cidr=10.244.0.0/16

使用kubectl工具 【master节点操作】–一个一个执行

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

# 查看当前节点
	kubectl get nodes
	
# 查看状态
	kubectl get pods -n kube-system
	
# 将其他node节点加入master操作(在node1和node2执行下面语句)
kubeadm join master主机ip:6443 --token n4tuyk.pjlc88k3e7f12fea \
    --discovery-token-ca-cert-hash sha256:60d17b6b8749b55d5c5074047ddf2219f2033ec568b1d299d16463a048c89da2 
    
# 默认token有效期为24小时,当过期之后,该token就不可用了。需创建新的token
kubeadm token create --print-join-command

部署CNI网络插件(以下语句报错,是由于域名解析不了,无法访问–只在master节点操作)

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 解决:
	1.通过http://ip.tool.chinaz.com/raw.githubusercontent.com查找raw.githubusercontent.com对应的ip地址
	2.在linux中执行语句
vim /etc/hosts 
	# 添加如下内容:
185.199.109.133  raw.githubusercontent.com
	3.重新执行语句
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

解决某节点还处于NotRead状态,在master机器上将该节点删除

# master节点将该节点删除
kubectl delete node k8snode1
# 然后到k8snode1节点进行重置
 kubeadm reset
# 重置完后在加入--node节点操作
kubeadm join master主机ip:6443 --token n4tuyk.pjlc88k3e7f12fea \
	--discovery-token-ca-cert-hash sha256:60d17b6b8749b55d5c5074047ddf2219f2033ec568b1d299d16463a048c89da2 

测试kubernetes集群–以Nginx服务为例

# 下载nginx镜像,以容器方式启动
kubectl create deployment nginx --image=nginx

# 查看状态
kubectl get pod

# 对外暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort

# 查看一下对外的端口
kubectl get pod,svc

# 测试访问
master主机:30559

在这里插入图片描述

k8s可视化工具:

免费版:Dashboard
企业版:kubesphere
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐