Автор: Олег Бобок / @Нетология групп
Systemd умеет:
Запускать приложения в нужном порядке, когда они вам нужны;
мониторить их, перезапускать, если они упали;
контроллировать и лимитировать расход ресурсов ими;
монтировать разделы;
конфигурировать сетевые устройства;
запускать задачи по заданному расписанию;
Systemd - монстр!
Systemd - монстр монолит!
Всё, кроме нескольких подов, относящихся к control plane, можно заменить!
И вдобавок:
$ kubeadm init
$ kubeadm join server:port --token secret-token \
--discovery-token-ca-cert-hash sha256:ca-cert-hash
$ kubeadm init --config config.yml
$ kubeadm join server:port --token secret-token \
--discovery-token-ca-cert-hash sha256:ca-cert-hash
Container linux (aka CoreOS)
networkd:
units:
- name: 00-eth1.network
contents: |
[Match]
Name=eth1
[Network]
Address=10.0.0.2/8
storage:
disks:
- device: '/dev/vdb'
wipe_table: true
partitions:
- label: 'STORAGE'
number: 1
start: 0
size: 0
type_guid: linux_filesystem_data
filesystems:
- name: 'STORAGE'
mount:
device: '/dev/disk/by-partlabel/STORAGE'
format: 'xfs'
wipe_filesystem: true
label: 'STORAGE'
files:
- filesystem: 'root'
path: '/etc/modules-load.d/nf_conntrack_ipv4.conf'
mode: 0644
contents:
inline: 'nf_conntrack_ipv4'
- filesystem: root
path: /etc/default/kubelet
mode: 0644
owner: root
group: root
contents:
inline: "KUBELET_EXTRA_ARGS=--authentication-token-webhook"
systemd:
units:
- name: storage.mount
enabled: true
contents: |
[Mount]
What=/dev/disk/by-label/STORAGE
Where=/storage
Type=xfs
[Install]
WantedBy=local-fs.target
Вот он!
apiVersion: kubeadm.k8s.io/v1alpha2
kind: MasterConfiguration
api:
advertiseAddress: 10.0.0.2
apiServerCertSANs:
- 10.0.0.2
- 10.12.0.10
- example.com
kubeProxy:
config:
mode: ipvs
ipvs:
SyncPeriod: '15s'
networking:
dnsDomain: cluster.local
serviceSubnet: 10.12.0.0/16
podSubnet: 192.168.0.0/16
kubeletConfiguration:
feature-gates: "CoreDNS=true"
Где искать?
Как проявляются?
Удивительно, но kube-proxy в этом списке нет
API
apiVersion: v1
kind: hostEndpoint
metadata:
name: eth0
node: myhost
labels:
type: production
spec:
interfaceName: eth0
expectedIPs:
- 192.168.0.1
profiles:
- profile1
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: allow-tcp-6379
spec:
selector: role == 'database'
types:
- Ingress
ingress:
- action: Allow
protocol: TCP
source:
notNets:
- 10.0.0.0/8
destination:
ports:
- 6379
projectcalico.org/v3 -> crd.projectcalico.org/v1
Боль, как обычно, в kubelet
KUBELET_EXTRA_ARGS=--authentication-token-webhook
На самом деле, CoreDNS
На самом деле, CoreDNS container linux (но с docker)
Остались вопросы?
https://t.me/bobizma
https://www.facebook.com/oleg.bobok