k8s入门(1)--- 创建简单的集群环境
该环境基于ubuntu20.04 ,一共三台服务器(两台虚拟机,一台物理机),物理机做master, 虚拟机做node。 k8s版本: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-1和k8s-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"]}
然后重启docker和kubectl
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欢迎页面,