准备好3台服务器,一台作为master,另外两台作为worker节点。 3台服务器网络互通,os是centos-7.9
# 安装docker
yum install -y yum-utils
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install -y docker-ce docker-ce-cli containerd.io
# 启动docker
systemctl start docker
curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 国内可以选择这个地址
# curl -L https://download.fastgit.org/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose# 添加可执行权限
chmod +x /usr/local/bin/docker-compose
--添加yum的k8s源
cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
-- yum安装
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
-- 启动kubeadmin
systemctl enable kubelet
查看安装包:
rpm -qa | grep kube
kubelet --version
kubeadm version
kubectl version
手动下载镜像:
-- 查看仓库下镜像
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
-- pull 镜像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
-- docker images
创建配置文件kubeadm-init.yaml文件,具体的参数介绍可见:kubeadm init | Kubernetes
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --apiserver-advertise-address 172.16.242.129 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.1.0.0/16 --ignore-preflight-errors=all
命令中的各选项简单说明如下:
--image-repository:指定要使用的镜像仓库,默认为gcr.io;
--kubernetes-version:kubernetes程序组件的版本号,它必须要与安装的kubelet程序包的版本号相同;
--control-plane-endpoint:控制平面的固定访问端点,可以是IP地址或DNS名称,会被用于集群管理员及集群组件的kubeconfig配置文件的API Server的访问地址;单控制平面部署时可以不使用该选项;
--pod-network-cidr:Pod网络的地址范围,其值为CIDR格式的网络地址,通常,Flannel网络插件的默认为10.244.0.0/16,Project Calico插件的默认值为192.168.0.0/16;
--service-cidr:Service的网络地址范围,其值为CIDR格式的网络地址,默认为10.96.0.0/12;通常,仅Flannel一类的网络插件需要手动指定该地址;
--apiserver-advertise-address:apiserver通告给其他组件的IP地址,一般应该为Master节点的用于集群内部通信的IP地址,0.0.0.0表示节点上所有可用地址;
--token-ttl:共享令牌(token)的过期时长,默认为24小时,0表示永不过期;为防止不安全存储等原因导致的令牌泄露危及集群安全,建议为其设定过期时长。未设定该选项时,在token过期后,若期望再向集群中加入其它节点,可以使用如下命令重新创建token,并生成节点加入命令。
遇到错误:
9月 12 19:14:54 myk8s-master kubelet[25047]: E0912 19:14:54.390257 25047 kubelet.go:2267] node "myk8s-master" not found
9月 12 19:14:54 myk8s-master kubelet[25047]: W0912 19:14:54.410219 25047 cni.go:237] Unable to update cni config: no networks found in /etc/cni/net.d
解决办法:
-- 首先恢复原始初始化状态
kubeadm reset --force
-- 卸载 版本
yum remove -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
-- 解决CNI缺失问题
可以暂时不处理,等后续安装CNI插件即可。
直接使用kubectl get nodes,会出现权限错误。
The connection to the server localhost:8080 was refused - did you specify the right host or port?
-- 解决方案
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
-- 这个使用,看到的节点的状态是notready。需要安装CNI网络插件
-- 执行命令
kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml
-- 看到有calico-node和calico-kube-controllers pods启动成功后,表示CNI插件网络安装好了。
默认情况下,主节点不参与pod调用,在集群资源有限的情况下,可以主动去掉主节点的标记,让其参与调用。
kubectl taint nodes --all node-role.kubernetes.io/master-
kubeadm join --token
: --discovery-token-ca-cert-hash sha256:
-- 可以再master节点执行命令得到# 如果没有token,请使用命令kubeadm token create 创建
kubeadm token list-- 在master查看hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
> openssl dgst -sha256 -hex | sed 's/^.* //'
先介绍pod和deployment的区别:
Pod和Deployment都是Kubernetes API中的完整对象。Deployment通过ReplicaSet管理创建Pod。它归结为Deployment将使用模板中的规范创建Pod。
一定要先确定集群支持的版本,可通过命令kubectl api-versions
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
resources:
requests:
cpu: "0.3"
memory: 200Mi
limits:
cpu: "0.5"
memory: 300Mi
ports:
- containerPort: 80