前语
作业中越来越重度运用k8s,想进一步了解k8s的作业原理。一方面学习业界优秀系统设计思路,另一方面多了解也能够进步日常作业效率,比方和k8s开发的沟通效率等。今日第一步:自己着手搭建一个k8s服务。
本文选用的版别
kubectl kubelet kubeadm版别: 1.23.1
操作系统版别: CentOS 8.2 64位
准备作业
1.采购云主机
官方主张最低云主机装备2核4G,国内恣意云厂商采购就行,作为K8S服务的宿主机。本教程操作系统为CentOS 8.2 64位。
备注:官方文档标记最低装备内存要求2G,可是装置完dashboard、ingress等服务之后比较卡顿,所以为了流畅这儿推荐4G内存。
2.铺开端口
外网铺开30000
端口,后续浏览器登陆k8s dashboard看板运用。并检查ssh服务端口22是否正常开启。
运用ssh登陆云主机,开端装备。
3.装置工具
装置常用工具:
yum install -y yum-utils device-mapper-persistent-data lvm2 iproute-tc
4.增加阿里源
国内存在墙的问题,增加阿里源加快:
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
开端装置
1.装置社区版别docker
装置:
yum -y install docker-ce
enable:
systemctl enable docker
检查docker版别docker version
:
2.装置 kubectl kubelet kubeadm
2.1增加阿里源
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
留意点:v1.24版别后kubernetes抛弃docker,装置进程存在一些问题,这儿咱们指定1.23.1版别装置。
2.2装置 1.23.1版别 kubectl kubelet kubeadm:
yum install -y kubectl-1.23.1 kubelet-1.23.1 kubeadm-1.23.1
发动kubelet:
systemctl enable kubelet
检查kubectl版别:
2.3修改cgroupdriver
履行如下指令:
cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
重启服务:
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
2.4替换镜像源
由于这儿咱们运用的是国内的云厂商,拜访海外k8s.gcr.io
拉取镜像存在墙的问题,所以下面咱们就替换成registry.cn-hangzhou.aliyuncs.com/google_containers
的地址,具体操作如下:
删除旧装备文件:
rm -f /etc/containerd/config.toml
出产默许装备文件:
containerd config default > /etc/containerd/config.toml
替换镜像地址:
sed -i 's/k8s.gcr.io/registry.cn-hangzhou.aliyuncs.com\/google_containers/' /etc/containerd/config.toml
重启containerd
:
systemctl restart containerd
2.4初始化k8s master节点
初始化指令:
kubeadm init --kubernetes-version=1.23.1 \
--apiserver-advertise-address=<你的云主机内网IP> \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16
通常会卡在这一步,假如大家依照本文的版别,理论不会报错,假如报错需求逐个搜索解决了。
假如初始化失败,履行如下指令后再重新初始化:
kubeadm reset -f
初始化成功之后得到如下指令,加入新的node节点运用(本次不运用):
kubeadm join <你的云主机内网IP>:6443 --token 78376v.rznvls130w3sgwb7 \
--discovery-token-ca-cert-hash sha256:add03fb7de52ad73fd96626fa9d9f0d639186524ba34d24742c15fce8093b8c5
装备kubectl
:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
检查k8s服务发动状况:
kubectl get pod --all-namespaces
3.装置calico网络
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/custom-resources.yaml
装置完毕后,检查calico服务发动状况:
kubectl get pod --all-namespaces
4.装置kubernates-dashboard
4.1 下载装备文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml
4.2 增加nodeport
装备nodeport,外网拜访dashboard:
4.3 创立dashboard服务
创立:
kubectl apply -f recommended.yaml
检查kubernetes-dashboard发动状况:
kubectl get pod -n kubernetes-dashboard
4.4 外网拜访dashboard
浏览器翻开dashboard,地址:<你的外网IP:30000>
如上图所示,因为https的问题,浏览器会提示「您的连接不是私密连接」。推荐运用chrome浏览器,并在当前页面上恣意位置点击,然后键盘输入「thisisunsafe」再点击回车健即可。
4.5 获取token
创立用户。dashboard-adminuser.yaml
装备文件示例,履行如下指令直接创立,参考官方教程创立示例用户 https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md
:
创立装备文件:
cat <<EOF > dashboard-adminuser.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
EOF
创立用户:
kubectl apply -f dashboard-adminuser.yaml
创立成功之后提示:
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
履行如下指令获取token:
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
4.6 复制token登陆dashboard
到这儿咱们现已能够正常创立pod了,可是外网还不能直接拜访到pod,尽管能够选用dashboard的nodeport
的方案,可是nodeport
只支持露出30000-32767的端口,不适用于出产环境,接着咱们就通过另一种方式ingress
来对外露出pod。
5. 装置ingress
5.1 下载官方装备文件,这儿运用的v1.3.1版别:
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.3.1/deploy/static/provider/cloud/deploy.yaml
5.2 相同由于墙的问题,咱们把装备文件中的镜像源换成阿里源:
替换nginx-ingress-controller
镜像源:
sed -i 's/registry.k8s.io\/ingress-nginx\/controller:v1.3.1@sha256:54f7fe2c6c5a9db9a0ebf1131797109bb7a4d91f56b9b362bde2abd237dd1974/registry.cn-hangzhou.aliyuncs.com\/google_containers\/nginx-ingress-controller:v1.3.1/g' ./deploy.yaml
替换kube-webhook-certgen
镜像源:
sed -i 's/registry.k8s.io\/ingress-nginx\/kube-webhook-certgen:v1.3.0@sha256:549e71a6ca248c5abd51cdb73dbc3083df62cf92ed5e6147c780e30f7e007a47/registry.cn-hangzhou.aliyuncs.com\/google_containers\/kube-webhook-certgen:v1.3.0/g' ./deploy.yaml
5.3 创立ingress服务
创立:
kubectl apply -f deploy.yaml
检查状况:
kubectl get pod --all-namespaces
创立完结之后,检查ingress状况,为pending
状况,原因是短少LB,这儿咱们运用metallb
。
5.4 装置metallb
履行装置指令:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-native.yaml
创立secret:
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
检查装置状况:
kubectl get ns
kubectl get all -n metallb-system
5.4 绑定外网IP EXTERNAL-IP
kubectl get service ingress-nginx-controller --namespace=ingress-nginx
kubectl edit service ingress-nginx-controller --namespace=ingress-nginx
增加:
externalIPs:
- 118.195.228.232
kubectl get service ingress-nginx-controller --namespace=ingress-nginx
检查发动状况kubectl get pod --all-namespaces
:
metalab和ingress-nginx
的状况仍是pending
,检查原因:
kubectl describe pod ingress-nginx-controller-6bfbdbdd64-jp7lw -n ingress-nginx
原因是现在只有master
节点,还没有node
节点,未了节约本钱,这儿咱们允许master参与调度,把master节点也当node运用。
5.5 允许master节点能够被调度
履行:
kubectl taint nodes --all node-role.kubernetes.io/master-
检查pod状况:
kubectl get pod --all-namespaces
pod均正常运行。到这儿,一个根底的k8s服务根本装置完结。
体验k8s
解析域名
你的测验域名A解析到服务器的外网IP上,具体步骤略。
创立测验服务pod
kubectl create deployment demo --image=httpd --port=80
kubectl expose deployment demo
创立ingress映射
kubectl create ingress demo --class=nginx --rule="k8s.tigerb.cn/*=demo:80"
测验
检查ingress服务service的外网端口
demo
pod发动成功后拜访http://k8s.tigerb.cn:32374/
测验服务即可。
到此为止,咱们就成功布置了一个k8s服务,运用dashborad就能够很轻松完结服务布置、扩容、缩容等。