k8s来一波

k8s无脑搭建


建议最小硬件配置:2核CPU、2G内存、20G硬盘 服务器最好可以访问

软件环境:


软件	版本
操作系统	CentOS7.9_x64 (mini)
Docker	23-ce
Kubernetes	1.23

服务器:


master	192.168.106.140
node1	192.168.106.141
node2	192.168.106.142

主机名解析(以下命令 所有节点都要执行)


# 编辑三台服务器的 /etc/hosts 文件 ,添加下面内容:
192.168.106.140 master
192.168.106.141 node1
192.168.106.142 node2

# 设置各个服务器 hostname
hostnamectl set-hostname  master
hostnamectl set-hostname  node1
hostnamectl set-hostname  node2

时间同步(所有节点)

#没有安装环境可使用 
yum install chrony
#启动chronyd服务
systemctl start chronyd
systemctl enable chronyd
date 

禁用selinux和firewalld服务(所有节点)


# 关闭firewalld服务
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux服务(重启后才生效)
sed -i 's/enforcing/disabled/' /etc/selinux/config

禁用swap分区(所有节点)


# 编辑分区配置文件/etc/fstab,注释掉swap分区一行 注意修改完毕之后需要重启linux服务
vi /etc/fstab 
#注释掉下面的设置
/dev/mapper/centos-swap swap

添加网桥过滤和地址转发功能(所有节点)


cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
#然后执行(生效命令)
sysctl --system

docker安装(所有节点)


yum install -y yum-utils

# 设置docker仓库镜像地址
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装下载docker
yum install docker-ce docker-ce-cli containerd.io

# 设置docker开机启动
systemctl enable docker && systemctl start docker

# 配置docker 镜像加速器
cd /etc
mkdir docker
vim daemon.json
追加
{ 	
	"exec-opts": ["native.cgroupdriver=systemd"], 	
	"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
 } 
 
# 重启docker服务
systemctl restart docker

kubernetes镜像切换成国内源(所有节点)


cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
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(所有节点)


yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0

#设置kubelet开机启动
systemctl enable kubelet

部署Kubernetes(master)


# 下面的操作只需要在master节点上执行即可(初始化完成后会很慢,最后会输出一个join命令,可以先保存后边会用)

kubeadm init \
  --apiserver-advertise-address=192.168.106.140 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.23.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all
  
–apiserver-advertise-address #集群通告地址(master 机器IP)
–image-repository #由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
–kubernetes-version #K8s版本,与上面安装的一致
–service-cidr #集群内部虚拟网络,Pod统一访问入口
–pod-network-cidr #Pod网络,与下面部署的CNI网络组件yaml中保持一致

#创建必要文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

从节点执行(node1和node2) 把初始化生成的 join 命令 在这里执行


# 下面的操作只需要在node节点上执行即可(下面的命令是 k8s初始化的时候 生成的)

kubeadm join 192.168.106.140:6443 --token oqniu3.qhz7h2oce46laify \
	--discovery-token-ca-cert-hash sha256:00c1154563a071025439fc56fe66a141c64af5bd779f7afd282302898a2b1c02
	

部署容器网络(CNI)(master)


Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。 下载YAML:

wget https://docs.projectcalico.org/manifests/calico.yaml

#下载完后还需要修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的 –pod-network-cidr指定的一样

# 大概在 4601行
            - name: CALICO_IPV4POOL_CIDR
              value: "10.244.0.0/16"

kubectl apply -f calico.yaml

#查看节点状态
kubectl get all -owide

#查看通信状态
kubectl get pods -n kube-system

# 至此K8s已经部署完成。

部署nginx测试


kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl scale --replicas=2 deployment nginx

kubectl get all -owide 看 nginx 端口

以上命令开启了两个nginx 实例 请求master ip端口 会发现只按一个实例请求
突然down掉某一个 所有请求会落到另一个nginx实例

遇到的问题


# 从节点无法获取 pod

root@k8s-node1 ~]# kubectl get pod
The connection to the server localhost:8080 was refused - did you specify the right host or port?

执行命令

echo "export KUBECONFIG=/etc/kubernetes/kubelet.conf" >> /etc/profile

source /etc/profile

再次查看 kubectl get pod 已经正常。

原因: kubernetes node没有与本机绑定,集群初始化的时候没有绑定 
此时设置在本机的环境变量即可解决问题。

你可能感兴趣的:(笔记,kubernetes,linux,docker)