Cluster IP
1.创建Service
root@k8s-master:~# kubectl expose deployment maydep --port=8080 --target-port=80
service/maydep exposed
2.查看Service
root@k8s-master:~# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 41h
maydep ClusterIP 10.102.112.40 <none> 8080/TCP 49s
3.测试服务的可用性
root@k8s-master:~# curl 10.102.112.40:8080
<html><body><h1>It works!</h1></body></html>
root@k8s-master:~#
4.删除服务
root@k8s-master:~# kubectl delete service maydep
service "maydep" deleted
root@k8s-master:~# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 42h
NodePort
1.创建NodePort Service
root@k8s-master:~# kubectl expose deployment maydep --port=8080 --target-port=80 --type=NodePort
service/maydep exposed
2.查看Service
root@k8s-master:~# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 42h
maydep NodePort 10.110.234.148 <none> 8080:32591/TCP 2m49s
3.浏览器访问对应信息,IP为node/master的IP + 端口为32591
准备环境
k8s-master 1.1.0.10
k8s-node1 1.1.0.11
k8s-node2 1.1.1.11
操作系统环境准备
- 修改hostname
hostnamectl set-hostname <k8s-master/k8s-node1/k8s-node2>
- 添加主机映射
cat <<EOF >> /etc/hosts
1.1.0.10 k8s-master
1.1.0.11 k8s-node1
1.1.1.11 k8s-node2
EOF
- 停用防火墙
ufw disable
- 关闭交换分区
swapoff -a
sed -i 's/.swap./#&/' /etc/fstab
- 允许 iptables 检查桥接流量
modprobe br_netfilter
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
准备安装runtime -Docker
- 更新apt包索引并安装包以允许apt通过HTTPS使用存储库
apt update -y
sudo apt-get -y install ca-certificates curl gnupg-agent lsb-release
- 添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- 添加Docker的存储库
echo "deb [arch=(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 安装Docker engine
sudo apt-get -y update
apt-get install docker-ce docker-ce-cli containerd.io -y
- 配置 Docker 守护程序,尤其是使用 systemd 来管理容器的 cgroup
sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
- docker0 网桥的容器添加了ACCEPT规则
sed -i '18c ExecStartPost=/sbin/iptables -P FORWARD ACCEPT' /lib/systemd/system/docker.service
systemctl daemon-reload && systemctl restart docker.service
-
安装前注意事项
每台机器至少2CPU或更多
每台机器至少2G内存或更多
为了保障kubelet的正常工作,必须禁用交换分区
-
确认runtime
1.默认情况下,k8s使用的容器运行时接口(CRI)来与你所选择的容器运行时交互。
2.如果你不指定运行时,则 kubeadm 会自动尝试检测到系统上已经安装的运行时, 方法是扫描一组众所周知的 Unix 域套接字。 下面的表格列举了一些 kubeadm 查找的容器运行时及其对应的套接字路径:
3.运行时 域套接字
Docker Engine /var/run/dockershim.sock
containerd /run/containerd/containerd.sock
CRI-O /var/run/crio/crio.sock
4.如果同时检测到 Docker Engine 和 containerd,kubeadm 将优先考虑 Docker Engine。 这是必然的,因为 Docker 18.09 附带了 containerd 并且两者都是可以检测到的, 即使你仅安装了 Docker。 如果检测到其他两个或多个运行时,kubeadm 输出错误信息并退出。
5.kubelet 可以使用已弃用的 dockershim 适配器与 Docker Engine 集成(dockershim 是 kubelet 本身的一部分)。
-
安装kubeadm、kubelet、kubectl
需要在每台机器上安装以下的软件包:
kubeadm:用来初始化集群的指令。
kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
kubectl:用来与集群通信的命令行工具。
安装步骤
1.更新 apt 包索引,并安装使用kubernetes apt仓库所需要的包
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
2.下载Google Cloud公开签名密钥
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
3.添加Kubernetes apt仓库
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
4.更新apt 包索引,安装kubelet、kubectl、kubeadm
指定安装版本,软件名称后添加“=1.23.0-00”
sudo apt-get update
sudo apt-get install -y kubelet=1.23.0-00 kubeadm=1.23.0-00 kubectl=1.23.0-00
sudo apt-mark hold kubelet kubeadm kubectl