一、概述
由于业务需求,需要安装版本比较高的k8s,比如:1.20.0
二、环境介绍
操作系统:ubuntu-18.04.6-server-amd64
配置:2核3g
ip地址:192.168.1.12
主机名:k8smaster
操作系统:ubuntu-18.04.6-server-amd64
配置:2核4g
ip地址:192.168.1.13
主机名:k8snode1
基础环境配置
安装docker
apt-get install docker.io
如果需要配置为开机启动,可执行以下命令
systemcd enable docker
systemcd start docker
配置 Docker 镜像加速,编辑配置文件
vi /etc/docker/daemon.json
内容如下:
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
重启 Docker,使配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker
修改主机名
比如修改master节点的,注意主机名不要带有特殊字符。
hostnamectl set-hostname k8smaster
添加hosts文件
192.168.1.12 k8smaster
192.168.1.13 k8snode1
关闭swap
临时关闭
swapoff -a
永久关闭
修改 /etc/fstab
# 注释掉以下带有swap字段的一行
/dev/mapper/cl-swap swap swap defaults 0 0
三、安装kubeadm,kubelet,kubectl
添加更新源,修改文件
vi /etc/apt/sources.list
最后一行增加
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
安装 https 工具以及 k8s
apt-get update && apt-get install -y apt-transport-https curl
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add
apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated
下载镜像
由于初始化时,需要连接到google,所以可能无法下载内容。
我们可以通过使用 kubeadm config images list
命令,列举需要拉取的镜像。我们来手动通过 Docker 拉取。这个过程比较麻烦,还需要手动修改镜像名称。
拉取方法 docker pull {镜像名称}
。
Google 访问不了,不过 DockerHub 已经备份好需要的镜像。
mirrorgooglecontainers 这个仓库备份了相应的镜像。遗憾的是,镜像不一定都是最新的备份。阿里云上面的 google_containers 仓库应该是备份最新的。
新建脚本pullk8s.sh,内容如下:
for i in `kubeadm config images list`; do
imageName=${i#k8s.gcr.io/}
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName
done;
执行脚本
bash pullk8s.sh
初始化
请根据实际情况,修改kubernetes-version和apiserver-advertise-address参数。
kubernetes-version是k8s版本,apiserver-advertise-address是k8s master节点ip
kubeadm init --kubernetes-version=1.20.0 --apiserver-advertise-address=192.168.1.12 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.1.0.0/16 --pod-network-cidr=10.222.0.0/16 --ignore-preflight-errors=Swap --ignore-preflight-errors=NumCPU
初始化成功后,会输出一段信息,注意自己保存好。
配置kubectl工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装flannel
使用谷歌浏览器下载文件,地址如下:
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
将yaml文件上传到linux,然后执行安装
kubectl apply -f kube-flannel.yml
设置开机启动
systemctl enable kubelet
命令补全
apt-get install -y bash-completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
四、node加入集群
注意:node节点,只需要安装docker和kubeadm,kubelet,kubectl即可。
注意主机名已经修改正确,加入节点
kubeadm join 192.168.1.12:6443 --token sx0dph.jthe8rswjpozchsu \
--discovery-token-ca-cert-hash sha256:f5325f7abf26ad375e139e231e587848c3ec41270f7bef2828b8adf428c3bc92
登录master节点,查看
root@k8smaster:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8smaster Ready control-plane,master 3h38m v1.20.0
k8snode1 Ready <none> 3h10m v1.20.0
五、使用yaml发布应用
以flaskapp为例子
登录k8smaster执行
flaskapp-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: flaskapp-1
spec:
selector:
matchLabels:
run: flaskapp-1
replicas: 1
template:
metadata:
labels:
run: flaskapp-1
spec:
containers:
- name: flaskapp-1
image: jcdemo/flaskapp
ports:
- containerPort: 5000
View Code
flaskapp-service.yaml
apiVersion: v1
kind: Service
metadata:
name: flaskapp-1
labels:
run: flaskapp-1
spec:
type: NodePort
ports:
- port: 5000
name: flaskapp-port
targetPort: 5000
protocol: TCP
nodePort: 30005
selector:
run: flaskapp-1
View Code
加载yml文件
kubectl apply -f flaskapp-service.yaml
kubectl apply -f flaskapp-deployment.yaml
查看pod状态
root@k8smaster:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
flaskapp-1-84fbb4f499-646rw 1/1 Running 2 172m
等待几分钟,确保为Running状态
访问页面
使用master ip+nodeport访问
http://192.168.1.12:30005/
效果如下: