k8s入门(1)--- 创建简单的集群环境

246 阅读3分钟

k8s入门(1)--- 创建简单的集群环境

该环境基于ubuntu20.04 ,一共三台服务器(两台虚拟机,一台物理机),物理机做master, 虚拟机做nodek8s版本:1.22.4

安装基础环境

所有的服务器都需要安装基础的环境,

docker

## 一般不用,新系统没这东西
sudo apt-get remove docker docker-engine docker.io containerd runc

## 安装基础软件
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

## 添加GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## 添加仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## 安装docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io  

为了加速镜像下载,通常需要配置docker镜像仓库, 可以参考阿里云docker镜像仓库

mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["<your accelerate address>"]
}

k8s

## 需要在root权限下
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF  
apt-get update
apt-get install -y kubelet kubeadm kubectl

修改配置

修改hostname

修改/etc/hostname 然后重启

我这边 master节点hostname叫做k8s-master, 两个node节点分别叫做k8s-node-1k8s-node-2

修改hosts

/etc/hosts中添加

172.16.42.1. k8s-master
172.16.42.130 k8s-node-1
172.16.42.130 k8s-node-2

修改ip转发

sysctl net.ipv4.ip_forward
sysctl net.bridge.bridge-nf-call-iptables

修改docker cgroup

/etc/docker/daemon.json中添加

{"exec-opts": ["native.cgroupdriver=systemd"]}

然后重启dockerkubectl

systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet

如果不添加的话,在kubeadm初始化的时候,会出现dial tcp 127.0.0.1:10248: connect: connection refused的问题

主节点Master

kubeadm init --apiserver-advertise-address=172.16.42.1 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

因为init默认会去下载k8s.gcr.io下的镜像, 国内因为网络环境,无法下载成功,因此需要使用--image-repository指定镜像源

--apiserver-advertise-address ,指定master节点的ip,

--service-cidr--pod-network-cidr设置是因为后面需要使用kube-flannel网络插件

等安装完成之后,命令行会输出

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


## ============

kubeadm join 172.16.42.1:6443 --token sltde7.x9owpyliy499eez5 \
>  --discovery-token-ca-cert-hash sha256:629098d3918713eb804c6be56e23e33728fe910b3fa64d2ae92e3912119c5eef

执行分割线上端的命令

从节点

kubeadm join 172.16.42.1:6443 --token sltde7.x9owpyliy499eez5 \
>  --discovery-token-ca-cert-hash sha256:629098d3918713eb804c6be56e23e33728fe910b3fa64d2ae92e3912119c5eef

执行该命令,把Node节点加入Master

添加网络插件

主节点和从节点安装完成之后,通过kubectl get nodes 获取到所有的节点的状态还都是NotReady状态,这时候,我们需要使用kube-flannel网络插件。

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

有时候该yml文件无法下载下来,我们可以手动下载并保存, 然后使用

kubectl apply -f <自己命名>.yml

等待应用成功,在查看node状态,这时候都显示成功状态

状态

测试

网络插件安装成功之后,我们使用一个nginx镜像,查看自己是否可以用主机ip访问到

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

查看状态

状态

可以看到,我们的nginx服务映射到了31417端口,访问主机http://192.168.3.51:31417/ 可以看到nginx欢迎页面,